首先,一个警告:我认为get_the_title()
因为标签过滤器非常脆弱。除非你所有的帖子标题都是单字,否则我怀疑你永远不会找到匹配的。因此,如果要通过匹配post标记来查询帖子,您真的应该使用一些方法来拆分帖子标题中的单词。尝试分解的结果get_the_title()
, 或者,更好的是:后permalink slug,例如viabasename( get_permalink() )
.
其次,为什么不简单地为每篇文章添加标签,然后通过post标签查询?这似乎比通过与帖子标题匹配的帖子标签进行查询要简单得多,也有效得多。
第三,不要使用query_posts()
为此目的。这个query_posts()
预期功能only 修改主循环查询。如果您需要一个二级循环(相关帖子的列表当然是二级循环),那么您需要使用get_posts()
或WP_Query()
.
以下是构建二次查询/循环的一种方法:
<?php
// Get the post slug
$related_post_slug = basename( get_permalink() );
// Explode the slug terms
// Since the post slug is constructed as
// "term-term-term-term", we simply
// Use the hyphen to explode the terms
$related_post_slug_terms = explode( \'-\', $related_post_slug );
// Implode the slug terms, using commas, for an OR query
// If you want an AND query, implode using "+"
$related_post_tags = implode( \',\', $related_post_slug_terms );
// Query related posts
$related_posts = new WP_Query( array(
\'tag\' => $related_post_tags
) );
// Now loop through the related posts query
if( $related_posts->have_posts() ):
while ( $related_posts->have_posts() ) : $related_posts->the_post();
?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php
endwhile;
else:
?>
there are no related articled
<?php
endif;
// Reset post data, for good measure
wp_reset_postdata();
?>