OP中的一些代码有点旧,并且被贬低了,比如caller_get_posts
多年前就贬值了。现在要使用的正确参数是ignore_sticky_posts
. 您的查询效率也很低,对性能没有好处。
下面是我将如何解决这个问题
使用get_queried_object_id()
使用全局$post
使用wp_get_post_terms()
返回分配给帖子的所有标签ID。根据我所做的,我们只需要获取ID,而不需要获取完整的标记对象
使用合适的tax_query
获取所有附加了这些标签的帖子。这是更个人的偏好,因为很容易跨分类法进行更改,而且,从源代码来看,标记参数使用tax_query
使用rand
作为对的值orderby
中的参数WP_Query
简而言之,把这一切都放在代码中:(未测试,需要PHP 5.4+)
<?php
$tags = wp_get_post_terms( get_queried_object_id(), \'post_tag\', [\'fields\' => \'ids\'] );
$args = [
\'post__not_in\' => array( get_queried_object_id() ),
\'posts_per_page\' => 5,
\'ignore_sticky_posts\' => 1,
\'orderby\' => \'rand\',
\'tax_query\' => [
[
\'taxonomy\' => \'post_tag\',
\'terms\' => $tags
]
]
];
$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {
echo \'<div id="related"><h4>Related Posts</h4>\';
while( $my_query->have_posts() ) {
$my_query->the_post(); ?>
<div class="ncc">
<h5><a href="<?php the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>" rel="nofollow"><?php the_title(); ?></a></h5>
<?php the_excerpt(); ?>
</div><!--ncc-->
<?php }
wp_reset_postdata();
echo \'</div><!--related-->\';
}
?>