我正在尝试使用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; ?>
最合适的回答,由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;