显示特定类别的标签中的帖子数量

时间:2020-09-13 作者:RLM

我正在Wordpress中创建一个页面模板,显示特定类别中的多个标记。我有这个功能,但现在我想在每个标签中显示帖子的数量,就像我有一个名为apples的标签,上面有5篇帖子,看起来是这样的:

Apples(5)
到目前为止,它只是显示Apples

以下是我要修改的代码:

    <?php
      if (is_category()){
           $cat = get_query_var(\'cat\');
           $yourcat = get_category ($cat);
       }
       $tag_IDs = array();
           query_posts(\'category_name=health\');
                   if (have_posts()) : while (have_posts()) : the_post();
                       $posttags = get_the_tags();
                           if ($posttags):
                           foreach($posttags as $tag) {
                               if (!in_array($tag->term_id , $tag_IDs)):
                                   $tag_IDs[] = $tag->term_id;
                                   $tag_names[$tag->term_id] = $tag->name;
                                   endif;
                       }
                       endif;
                       endwhile; endif;
                   wp_reset_query();
       
               echo "<ul>";
               foreach($tag_IDs as $tag_ID){
               echo \'<a href="\'.get_tag_link($tag_ID).\'">\'.$tag_names[$tag_ID].\'</a>\';
               }
           echo "</ul>";
       ?>                                  
enter image description hereenter image description here

3 个回复
最合适的回答,由SO网友:RLM 整理而成

这是我重写的代码,它解决了我的问题。它循环遍历一个类别,并显示该类别中的所有标记有多少篇文章。

<?php
                            $custom_query = new WP_Query( \'posts_per_page=-1&category_name=health\' );
                            if ( $custom_query->have_posts() ) :
                                $all_tags = array();
                                while ( $custom_query->have_posts() ) : $custom_query->the_post();
                                    $posttags = get_the_tags();
                                    if ( $posttags ) {
                                        foreach($posttags as $tag) {
                                          $all_tags[$tag->term_id][\'id\'] = $tag->term_id;
                                          $all_tags[$tag->term_id][\'name\'] = $tag->name;
                                          $all_tags[$tag->term_id][\'count\']++;
                                        }
                                    }
                                endwhile;
                            endif;
    
                            $tags_arr = array_unique( $all_tags );
                            $tags_str = implode( ",", $tags_arr );
    
                            $args = array(
                                \'smallest\'  => 12,
                                \'largest\'   => 12,
                                \'unit\'      => \'px\',
                                \'number\'    => 0,
                                \'format\'    => \'list\',
                                \'include\'   => $tags_str
                            );
                            foreach ( $all_tags as $tag_ID => $tag ) {
                                echo \'<a href="\'.get_tag_link($tag_ID).\'">\' . $tag[\'name\'] . \'</a> (\'; echo $tag[\'count\'] . \')<br>\';
                            }
                            wp_reset_query()
                         ?>

SO网友:Luis Chuquilin
function wp_get_postcount($id)
{
    $contador = 0;
    $taxonomia = \'categoria\';
    $args = array(
        \'child_of\' => $id,
    );
    $tax_terms = get_terms($taxonomia,$args);
    foreach ($tax_terms as $tax_term){
        $contador +=$tax_term->contador;
    }
    return $contador;
}
SO网友:Tom J Nowell

你得到这个的原因是因为你正在使用query_posts 并在帖子上循环,而不是术语/类别。

所以当你想要这个的时候:

terms = child terms of health
for each term in terms
    print the term name
    print the number of posts in that term
代码实际做的是:

posts = all posts that have the category health
for each posts
    print a list of tags this post has
query_posts, 除了作为一个你永远不应该使用的功能之外,获取帖子,而不是术语/类别。在这里发帖是没有意义的。

因此,我们需要这样做:

healthterm = the health term
terms = child terms of health term
for each term in terms
    print the name
    print the post count
因此,首先我们得到健康术语:

$parent = get_term_by( \'slug\', \'health\', \'category\' );
然后让孩子们做类似的事情:

$terms = get_terms( \'category\', [
    \'parent\' => $parent->term_id
] );
最后,循环这些术语并打印它们的名称/计数

if ( !is_wp_error( $terms ) && !empty( $terms ) ) {
    foreach ( $terms as $term ) {
        // ...
        echo $term->name . \' \' .$term->count;
    }
}
这些是您实现目标所需的缺失构建块。

相关推荐

get_the_tags doesn't works?

我正在创建一个插件,用户将在其中提交他们的电子邮件地址和喜爱的标签。发布新帖子时,如果帖子具有与用户最喜爱的标签类似的标签,则会向用户发送电子邮件。为此,我需要将新的贴子标签与用户最喜欢的标签进行比较。根据其定义get_the_tags($postId) 应返回post_tags 但是没有。我不知道该怎么办!add_action(\'publish_post\', array( $myClass ,\'wp_send_emailToUser\' ), 10, 2); class customFun