web-dev-qa-db-ja.com

現在のページIDを動的に除外

私は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; ?>
2

あなたのコードでは、もし$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;
4
Milo