获取除当前帖子外具有当前标签的所有帖子的标题

时间:2012-12-21 作者:Steve

我正在尝试打印当前帖子类别中所有帖子的项目符号列表(即“同级帖子”),但当前帖子本身除外。

我已经能够获得当前bost的标签,并使用以下代码打印出与当前帖子具有相同标签的所有帖子的列表。然而,我当时试图向循环中添加一些逻辑,以便在循环时将当前帖子的名称与帖子的名称进行比较,并且仅当它们不匹配时才生成项目符号项(我知道当前if语句没有任何作用,我正在试着调试循环)。

问题是,一旦循环开始,它似乎会删除我分配给当前帖子标题的变量。

<?php
        // declare array to hold tags
        $current_tags =  array();
        // get the tags on the current post
        $posttags = get_the_tags();
        if ($posttags) {
          foreach($posttags as $tag) {
            // add to tags array
            $current_tags[] = $tag->name;
          }
        }
        // convert the array to comma-delimited string
        $tags = implode(\',\', $current_tags);            
    ?>


    <ul>
        <?php
        // get the current page\'s title
        $page_title = the_title();
        echo $page_title; // "Spicy Lemon Chicken"

        $args = array( \'post_type\' => \'recipe\', \'tag\' => $tags );
        $loop = new WP_Query( $args );
        while ( $loop->have_posts() ) : $loop->the_post(); ?>

        <? 
        $t = get_the_title(); // get current title in the loop
        echo \'$t = \'.$t;
        echo \'$page_title = \'. $page_title; // empty string

        if ( $t != $page_title) { }; ?>
            <li><a href="<? the_permalink(); ?>"><? the_title(); ?></a></li>
       <? endwhile; ?>
    </ul>

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

首先,您有一个语法错误:

$page_title = the_title();
Thethe_title() 模板标记将回显帖子标题,而不是返回帖子标题。您将要使用get_the_title() 而是:

$page_title = get_the_title();
其次,只需将当前帖子从二次查询中排除,通过传递the post__not_in post parameter 到您的WP_Query() 呼叫

更改此项:

$args = array( \'post_type\' => \'recipe\', \'tag\' => $tags );
。。。对此:

$args = array( 
    \'post_type\' => \'recipe\', 
    \'tag\' => $tags,
    \'post__not_in\' => array( $post->ID )
);
然后,您就不需要在辅助查询循环中测试它了。

我会这样重写您的二次查询循环:

$related_posts_args = array( 
    \'post_type\' => \'recipe\', 
    \'tag\' => $tags,
    \'post__not_in\' => array( $post->ID )
);
$related_posts = new WP_Query( $related_posts_args );

if ( $related_posts->have_posts() ) : 
    ?>
    <ul>
    <?php
    while ( $related_posts->have_posts() ) : $related_posts->the_post();
        ?>
        <li><a href="<? the_permalink(); ?>"><? the_title(); ?></a></li>
        <?php
    endwhile;
    ?>
    </ul>
    <?php
endif;
wp_reset_postdata();

结束

相关推荐

Tags Sorted By Characters?

如果我在一篇文章中放置了多个标签,那么在发布文章后,所有标签都会按字符序列自动排列,比如B C D。。。任何想法,如果我希望有所有的标签将不会排序或按字符序列排列。。。。所以,第一个标签将是第一个,最后一个标签将放置在最后。。。尽管第一个标记可能以Z开头,最后一个标记以A开头。。那么,我所说的保持标签序列静态的方法是什么呢?