显示 Post 自定义 Post 类型的子类别

Show Post Count on Subcategories of a Custom Post Type

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

我只想显示子类别中所有 post 的计数。

这是我目前的情况:

<?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();
?>

上面是它目前的样子。 小册子卡片标签(其中每个有4个post)是post计数值应该显示开启,其余为 posts.

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

如果您想要 post 和术语与 post 混合并一起显示 - 这是一项非常艰巨的任务。

我建议您只在列表中使用一个或另一个 - 更容易。

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

  1. 为您要展示的所有 post 创建一个类别(例如创建 "Floor graphics"、"Mugs"、"Notepads" 和 "Stickers"),就像您为 "Brochures" 和 "Card Tags" 所做的一样。这样,您将拥有 2 个包含 4-4 post 的子类别,以及包含 1-1 post 的 4 个子类别。
  2. 如果你这样做,那么你只需要使用 get_terms() 查询。

这可能是您的查询(您希望在其中查看 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;

这样您将获得包含名称和计数(在需要时)的列表,但您将丢失图像和内容(悬停时)。

如果你想要返回图片和内容,你可以在每个子类别的第一个 post 中查询此内容,如下所示:

$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,
            )
        )
    )
);

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

希望对您有所帮助。 :)