返回

WooCommerce:仅获取正在销售的类目

php

在 WooCommerce 中仅获取正在销售的类目

摘要:
在 WooCommerce 电子商务网站中,分类结构有助于用户轻松找到他们想要的产品。有时,仅显示包含正在销售产品的类目很有用。本文提供了一个使用 PHP 代码实现此功能的综合指南。

获取父级类目

首先,获取所有父级产品类目,这些类目不包含任何子类目。

检查子类目中是否存在正在销售的产品

接下来,遍历每个父级类目并检查其子类目。如果任何子类目包含正在销售的产品,则表示该父级类目应显示。

显示包含正在销售产品的类目

最后,仅显示包含正在销售产品的父级类目。这可以帮助客户更快地找到他们感兴趣的产品。

示例代码

以下示例代码展示了如何实现此功能:

<ul class="accordion list-group sub-catalog">
<?php
$terms = get_terms('product_cat', array( 'parent' => 0, 'exclude' => '15' ));
if( $terms ):
    $original_query = $wp_query;
    foreach ( $terms as $key => $term ):
        $child = get_terms(
            'product_cat',
            array(
                'child_of' => $term->term_id,
                'hide_empty' => true
            )
        );
        ?>
        <li class="accordion-card list-group-item">
            <div class="acc-card-title">
                <a href="<?php echo get_term_link($term); //echo $term->name; ?>"><?php echo $term->name; ?></a>
                <?php if ( ! $child ){ ?>
                    <?php
                } else {
                    ?>
                    <span class="fa fa-plus"></span>
                    <?php
                }
                ?>
            </div>
            <ul class="accordion list-group sub-catalog">
                <?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 class="accordion-card list-group-item">
                            <div class="acc-card-title">
                                <a href="<?php echo get_term_link($child_term);?>"> <?php echo $child_term->name; ?></a>
                            </div>
                        </li>
                        <?php
                    }
                }
                ?>
            </ul>
        </li>
        <?php
    endforeach;
    $wp_query = null;
    $wp_query = $original_query;
?>
</ul>
<?php endif; ?>

常见问题解答

1. 如何排除特定类目?
在获取父级类目时,可以使用 exclude 参数排除特定类目。例如:

$terms = get_terms('product_cat', array( 'parent' => 0, 'exclude' => '15' ));

2. 如何在代码中设置类目名称?
在显示类目时,可以使用 $term->name 获取类目名称。

3. 如何添加子类目层级?
示例代码中注释掉了添加子类目层级的部分。取消注释以启用该功能。

4. 如何自定义显示样式?
代码中使用的样式只是示例。你可以根据需要自定义样式。

5. 如何处理没有子类目的类目?
在示例代码中,如果类目没有子类目,它将不会显示在accordion中。