获取所有类别,即使没有产品在它下面?

时间:2016-10-13 作者:Prafulla Kumar Sahu

我试图得到所有有产品的类别,但也得到没有产品的类别。

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; ?>
注意:在这两种情况下,都不希望显示产品为零的类别。

2 个回复
最合适的回答,由SO网友:Prafulla Kumar Sahu 整理而成

wc_product_dropdown_categories() 将代替wp_dropdown_categories() .

对于get\\u 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\\u术语的问题是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 ] );
                }
            }
        }

SO网友:Kapil Yadav

这很容易列出所有类别,即使它们没有任何与这些类别相关的帖子。

您只需在中将以下属性设置为falsewp_dropdown_categories. 方法

\'hide_empty\' => 0,
\'hide_if_empty\' => 1
希望这能解决你的问题。

相关推荐

Get_Terms()在自定义帖子类型上提供了错误的自定义分类Childs计数

我有一个自定义的分类法,我们称之为;指示;。我们将其与自定义帖子类型“配合使用”;产品;。我们对术语Parent->;小孩父级从未与产品建立连接。我使用它来创建一个自定义的select字段,并且需要父字段作为optgroup标题。是否使用此结构父级子级1(根据后端的2篇帖子)子级2(根据后端的1篇帖子)但是如果我查询子主题并检查计数,它总是显示为NULL。在Wordpress仪表板中,它使用2和1正确定位。为什么不在前端呢。 $args = array( \'hide_e