显示 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 混合并一起显示 - 这是一项非常艰巨的任务。
我建议您只在列表中使用一个或另一个 - 更容易。
为此,您可以执行以下操作:
- 为您要展示的所有 post 创建一个类别(例如创建 "Floor graphics"、"Mugs"、"Notepads" 和 "Stickers"),就像您为 "Brochures" 和 "Card Tags" 所做的一样。这样,您将拥有 2 个包含 4-4 post 的子类别,以及包含 1-1 post 的 4 个子类别。
- 如果你这样做,那么你只需要使用 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,
)
)
)
);
或者您可以为您显示的自定义分类子类别分配图像和/或描述。
希望对您有所帮助。 :)
我有一个名为 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();
?>
我仍在学习 WordPress 主题开发,所以如果有人可以提供一些指导,将不胜感激。
如果您想要 post 和术语与 post 混合并一起显示 - 这是一项非常艰巨的任务。
我建议您只在列表中使用一个或另一个 - 更容易。
为此,您可以执行以下操作:
- 为您要展示的所有 post 创建一个类别(例如创建 "Floor graphics"、"Mugs"、"Notepads" 和 "Stickers"),就像您为 "Brochures" 和 "Card Tags" 所做的一样。这样,您将拥有 2 个包含 4-4 post 的子类别,以及包含 1-1 post 的 4 个子类别。
- 如果你这样做,那么你只需要使用 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,
)
)
)
);
或者您可以为您显示的自定义分类子类别分配图像和/或描述。
希望对您有所帮助。 :)