私はquery_postsを使ってページ上に "related posts"セクションを作成しようとしています。 1つのカテゴリからのランダムな投稿を1ページに表示したいので、これを使用したいのですが、プラグインはやり過ぎるでしょう。
私が抱えている問題は、ユーザーが現在表示しているページをリストから動的に除外することです。これが私が使っているコードで、現在のページを除外するためにいくつかの方法を試しましたが、どれもうまくいきませんでした。
<?php
// The Query
$post_id = get_the_ID();
query_posts("showposts=4&post_type=page&post_parent=168&orderby=Rand&exclude='. $post_id .'");
// The Loop
while ( have_posts() ) : the_post();
echo '<li><a href="'. get_permalink() .'">';
the_title();
echo '</a></li>';
endwhile;
// Reset Query
wp_reset_query();
?>
これは間違っているのでしょうか、それとも間違ったコードを使用しているのですか、あるいはその両方ですか?
TIA!
編集時:
Miloの提案の後、私はもう一度見て、彼の返事とWPフォーラムへの投稿を組み合わせました。 :
<?php
$this_post = $post->ID;
global $post;
$args= array(
'post_type' => 'page',
'posts_per_page' => 4,
'post_parent' => 168,
'orderby' => 'Rand',
'post__not_in' => array($this_post)
);
$rel_posts = get_posts($args);
foreach($rel_posts as $post) :
setup_postdata($post);
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
あなたのコードでは、もし$post_id
が99だとしたら:
query_posts("showposts=4&post_type=page&post_parent=168&orderby=Rand&exclude='. $post_id .'");
これはクエリの投稿に渡されることになります:
query_posts("showposts=4&post_type=page&post_parent=168&orderby=Rand&exclude='. 99 .'");
だから、ここであなたの問題は'. 99 .'
はexclude
のための有効な値ではないということです。
そうは言っても、query_posts
はテンプレートのmainループを変更するためだけに使うべきです。追加のクエリを実行したい場合は、新しい WP_Query
インスタンスを作成する必要があります。
$args = array(
'post_type' => 'page',
'posts_per_page' => 4,
'post_parent' => 168,
'orderby' => 'Rand',
'exclude' => $post_id
);
$related_posts = new WP_Query( $args );
while( $related_posts->have_posts() ):
$related_posts->the_post();
// loop stuff
endwhile;