Conditionals if tags exist?

时间:2012-04-12 作者:Phill

我有以下代码来显示与页面标题同名的标记文章,但我只想在标记存在时显示,否则它只会显示没有内容的“相关文章”。我尝试过使用一些条件句,但没有成功。有没有办法做到这一点?我在这里没有发现任何与此相关的示例或问题。

<h1>Related Articles</h1>
<?php query_posts( \'tag=\' . get_the_title() . \'\' );
while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
<?php wp_reset_query();?>
谢谢你的帮助

2 个回复
SO网友:janw

试试这个

<?php $related = new WP_Query( \'tag=\' . get_the_title() . \'\' );
if( $related->have_posts() ):
    <h1>Related Articles</h1>
    while ( $related->have_posts() ) : the_post(); ?>
        <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> </li>

   <?php endwhile;

else:
//there are no related articled
endif;
wp_reset_postdata();?>
编辑您不应该使用query_posts 对于二次回路。这个query_posts 更改“主循环”(在本例中,主循环初始值仅包含您的页面)。看见the Codex here:

query\\u posts()用于更改主循环。使用query\\u posts()后,将更改与post相关的全局变量和模板标记。在调用query\\u posts()后调用的条件标记也将被更改-这可能是也可能不是预期的结果。

要创建辅助列表(例如,页面底部的相关帖子列表,或侧栏小部件中的链接列表),请尝试创建WP\\u Query的新实例或使用get\\u posts()。

SO网友:Chip Bennett

首先,一个警告:我认为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();
?>

结束

相关推荐

为标记和TagsCloud创建单独的小部件?

是否可以为“Tags”和“TagsCloud”创建单独的小部件?这个问题很相似,但是您如何为“Tags”和“TagsCloud”制作两个单独的小部件?区别在于类将被称为“tags”,而不是“tagscloud”,并且wp\\u tag\\u cloud()的默认设置将具有相同的大小,无论有多少帖子?How do I display a tag cloud with both post tags AND a custom taxonomy?