私は、商品を持っているすべてのカテゴリを取得しようとしていますが、商品がないカテゴリも取得しています。
WordPressバージョン4.6.1
wp_dropdown_categories(
array(
'class' => 'product-category-field',
'id' => 'product-category',
'name' => 'category',
'taxonomy' => 'product_cat',
'selected' => get_query_var('product_cat' ),
'hierarchical' => 1,
'hide_empty' => 1,
'value_field' => 'slug',
'show_count' => 1
)
);
get_terms
でも以下のコードで空のカテゴリを表示しています。
<?php $terms = get_terms('product_cat', array( 'parent' => 0 ));
if( $terms ):
$original_query = $wp_query;
foreach ( $terms as $key => $term ):
?>
<li>
<?php echo $term->name; ?>
<ul>
<?php
$child_terms = get_terms(
'product_cat',
array(
'child_of' => $term->term_id,
'hide_empty' => true
)
);
foreach ( $child_terms as $child_term ) {
$re_child_terms = get_terms(
'product_cat',
array(
'child_of' => $child_term->term_id,
'hide_empty' => true
)
);
if ( ! $re_child_terms ){
?>
<li>
<?php echo $child_term->name; ?>
</li>
<?php
}
}
?>
</ul>
</li>
<?php
endforeach;
$wp_query = null;
$wp_query = $original_query;
?>
</ul>
<?php endif; ?>
注:どちらの場合も、商品がゼロのカテゴリを表示したくありません。
wc_product_dropdown_categories()
はwp_dropdown_categories()
の代わりにトリックを行います。
Get_termsパート用
取り替えることによって
$re_child_terms = get_terms( 'product_cat', array( 'child_of' => $child_term->term_id, 'hide_empty' => true ) );
if ( ! $re_child_terms ){
と
$re_child_terms = get_term_children( $child_term->term_id, 'product_cat' );
if ( $child_term->count > 0 && empty( $re_child_terms ) ){
私の問題を解決しました。
よくわかりませんが、get_termsの問題は here だと思います
// Make sure we show empty categories that have children.
if ( $hierarchical && $args['hide_empty'] && is_array( $terms ) ) {
foreach ( $terms as $k => $term ) {
if ( ! $term->count ) {
$children = get_term_children( $term->term_id, $term->taxonomy );
if ( is_array( $children ) ) {
foreach ( $children as $child_id ) {
$child = get_term( $child_id, $term->taxonomy );
if ( $child->count ) {
continue 2;
}
}
}
// It really is empty.
unset( $terms[ $k ] );
}
}
}
それらに関連する投稿がない場合でも、これはすべてのカテゴリを一覧表示するのが非常に簡単です。
wp_dropdown_categories で次のプロパティをfalseに設定するだけです。方法。
'hide_empty' => 0,
'hide_if_empty' => 1
これがあなたの問題を解決することを願っています。