在自定义帖子类型的子类别上显示帖子计数

时间:2016-09-16 06:40:14

标签: php wordpress while-loop count custom-taxonomy

我有一个名为 products 的自定义帖子类型,其中 product_categories 作为其分类名称。它包含每个都有子类别和帖子的类别。

我想仅显示子类别中所有帖子的计数。

这是我到目前为止所做的:

<?php
// POSTS LOOP

// Query 
$args = array( 'post_type' => 'products' , 'orderby' => 'menu_order', 'order' => 'ASC' ,
    'tax_query' => array(
        array(
            'taxonomy' => 'product_categories',
            'terms' => array(14),
            'include_children' => false
        )
));
$query = new WP_Query( $args );

// Post Counter
$term_id = 14;
$tax_name = 'product_categories';
$terms = get_terms($tax_name, array('parent' => 0));
$term_children = get_term_children($term_id,$tax_name);
$post_count = 0;

// Loop Structure
echo '<ul>';
while ( $query->have_posts() ) : $query->the_post();
    echo '<li class="zazzoo-page">';

        foreach($terms as $term) {

            $term_children = get_term_children($term->term_id,$tax_name);
            echo '<ul>';
            foreach($term_children as $term_child_id) {
                $term_child = get_term_by('id',$term_child_id,$tax_name);
                $post_count = $term_child->count;
                echo '<div class="zazzoo-counter">'. $post_count .' Designs</div>';
            }
            echo '</ul>';

        } ?>

        <div class="title-border"><div class="page-title"><?php the_title(); ?></div></div>
        <div class="hovereffect">
            <?php the_post_thumbnail('zazzoo-thumb', array('class' => 'responsive-img')); ?>
            <div class="overlay">
                <h2><?php the_title(); ?></h2>
                <?php the_content(); ?>
            </div>
        </div>
    <?php echo '</li>';
endwhile;
echo '</ul>';

wp_reset_query();
?>

Just some visual of what the above code displays 上图是目前的样子。 手册卡片标签(每个帖子中有4个帖子)是应该显示帖子计数值的子类别,其余的是帖子。

我还在学习WordPress主题开发,所以如果有人能提供一些指导,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果您希望将帖子和术语与帖子混合在一起并将它们展示在一起 - 这是一项非常艰巨的任务。

我建议你只在列表中使用其中一个 - 更容易。

为此,您可以执行以下操作:

  1. 为您要显示的所有帖子创建一个类别(例如,创建“地板图形”,“马克杯”,“笔记本”和“贴纸”),就像您为“手册”和“卡片标签”所做的那样。这样你就会有2个子类别,里面有4-4个帖子,还有4个子类别,里面有1-1个帖子。
  2. 如果你这样做,那么你只需要使用get_terms()查询。
  3. 这可能是您的查询(您要查看ID为14的术语的子类别):

    $tax_name = 'product_categories';
    $parent_id = 14;
    $terms = get_terms( $tax_name, array( 'parent' => $parent_id, 'pad_counts' => 1, ) );
    

    然后你可以去打印它:

    $html = '';
    $html .= '<ul>';
    foreach ( $terms as $single_term ) {
        $html .= '<li class="zazzoo-page">';
        // only put the tag on terms, that have more than 1 items in it
        if ( $single_term->count > 1 ) {
            $html .= '<div class="zazzoo-counter">'. $single_term->count .' Designs</div>';
        }
        $html .= '<div class="title-border">';
        $html .= '<div class="page-title">';
        $html .= $single_term->name;
        $html .= '</div>';
        $html .= '</div>';
        $html .= '<div class="hover effect">';
        $html .= '<div class="overlay">';
        $html .= $single_term->name;
        $html .= '</div>';
        $html .= '</div>';
        $html .= '</li>';
    }
    $html .= '</ul>';
    
    echo $html;
    

    通过这种方式,您将获得包含姓名和计数的列表(如果需要),但您将丢失图像和内容(在悬停时)。

    如果您想要恢复图像和内容,可以查询此内容的每个子类别的第一篇文章,如下所示:

    $posts_array = get_posts(
        array(
            'posts_per_page' => 1,
            'post_type' => 'products',
            'tax_query' => array(
                array(
                    'taxonomy' => 'product_categories',
                    'field' => 'term_id',
                    'terms' => $single_term->term_id,
                )
            )
        )
    );
    

    或者您可以将图像和/或描述分配给您显示的自定义分类子类别。

    我希望这能帮到你一点点。 :)