动态排除当前页面ID

时间:2012-03-22 作者:Justice Is Cheap

我正在尝试使用query\\u posts在页面上创建“相关帖子”部分。我之所以想使用它,仅仅是因为我们想在一个页面上显示来自一个类别的随机帖子,所以一个插件就太过分了。

我遇到的问题是从列表中动态排除用户所在的当前页面。这是我正在使用的代码,我尝试了几种方法来排除当前页面,但都没有成功。

<?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!

On Edit:

在米洛的建议之后,我再次查看了他的回复,并结合了他在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; ?>

1 个回复
最合适的回答,由SO网友:Milo 整理而成

在代码中,如果$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 只能用于更改模板中的主循环。如果要执行其他查询,应创建新的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;

结束

相关推荐

WordPress“the loop”中需要的简单Foreach循环帮助

我需要“循环”中的foreach循环This is my current code (index.php) :<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div><a href=\"<?php the_permalink(); ?>\" title=\"<?php get_the_title(); ?>\"> <?php the_title()