基于WooCommerce类别/子类别的动态下拉菜单

时间:2018-01-09 17:21:59

标签: php wordpress woocommerce dropdown categories

我正在尝试创建一组动态下拉列表,其中包含WooCommerce的类别和子类别。我很难知道如何实现这一目标。我知道woocommerce有一个可以下拉的小部件,但这不是我想要的。我创建了一个示例here,显示了我想要实现的内容......这个示例是从JSON文件中提取猫和子猫。

我还创建了这张图片来展示我的目标... nav example

我不是在寻找代码解决方案,只是试图了解我可以从WooCommerce的API获取什么,所以我可以有一个起点。我对WooCommerce的API及其能够实现的目标并不熟悉,因此对我来说这是一个未知的领域。

任何人都有任何反馈,我非常感激。

谢谢。

塞尔

1 个答案:

答案 0 :(得分:1)

这是一个显式代码示例,它仅使用Wordpress函数,并将在多维数组中分层输出所有产品类别的原始必要数据。正如您将看到的那样,您不需要非常熟悉WooCommerce API,因为它是Wordpress自定义分类。

我已将此功能挂钩,以便在档案和产品页中输出您的产品类别原始数据(仅用于测试目的)

add_action( 'woocommerce_before_main_content', 'get_product_categories_data' );
function get_product_categories_data(){
    $result = array();
    $taxonomy = 'product_cat';
    $level1_terms = get_terms( array(
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
        'parent' => 0,
    ) );
    foreach($level1_terms as $term1){
        $level2_terms = get_terms( array(
            'taxonomy' => $taxonomy,
            'hide_empty' => false,
            'parent' => $term1->term_id,
        ) );
        $result[$term1->term_id] = array(
            'id' => $term1->term_id,
            'name' => $term1->name,
            'level' => '1',
            'link' => esc_url( get_term_link( $term1->term_id, $taxonomy ) ),
        );
        if(count($level2_terms) > 0){
            foreach($level2_terms as $term2){
                $level3_terms = get_terms( array(
                    'taxonomy' => $taxonomy,
                    'hide_empty' => false,
                    'parent' => $term2->term_id,
                ) );
                $result[$term1->term_id]['childs'][$term2->term_id] = array(
                    'id' => $term2->term_id,
                    'name' => $term2->name,
                    'level' => '2',
                    'link' => esc_url( get_term_link( $term2->term_id, $taxonomy ) ),
                );
                if(count($level3_terms) > 0){
                    foreach($level3_terms as $term3){
                        $level4_terms = get_terms( array(
                            'taxonomy' => $taxonomy,
                            'hide_empty' => false,
                            'parent' => $term3->term_id,
                        ) );
                        $result[$term1->term_id]['childs'][$term2->term_id]['childs'][$term3->term_id] = array(
                            'id' => $term3->term_id,
                            'name' => $term3->name,
                            'level' => '3',
                            'link' => esc_url( get_term_link( $term3->term_id, $taxonomy ) ),
                        );
                        if(count($level4_terms) > 0){
                            foreach($level4_terms as $term4){
                                $result[$term1->term_id]['childs'][$term2->term_id]['childs'][$term3->term_id]['childs'][$term4->term_id]  = array(
                                    $term4->term_id => array(
                                        'id' => $term4->term_id,
                                        'name' => $term4->name,
                                        'level' => '4',
                                        'link' => esc_url( get_term_link( $term4->term_id, $taxonomy ) ),
                                    )
                                );
                            }
                        }
                    }
                }
            }
        }
    }
    echo '<pre>'; print_r($result); echo '</pre>'; // Raw data output (for testing)

    // return $result;
}

原始输出 - 您将获得4个类别/子类别级别,类似于此摘录:

Array
(
    [11] => Array
        (
            [id] => 11
            [name] => Clothing
            [level] => 1
            [link] => http://www.example.com/clothing/
            [childs] => Array
                (
                    [12] => Array
                        (
                            [id] => 12
                            [name] => Hoodies
                            [level] => 2
                            [link] => http://www.example.com/clothing/hoodies/
                            [childs] => Array
                                (
                                    [36] => Array
                                        (
                                            [id] => 36
                                            [name] => Hood 1
                                            [level] => 3
                                            [link] => http://www.example.com/clothing/hoodies/hood1/
                                            [childs] => Array
                                                (
                                                    [85] => Array
                                                        (
                                                            [id] => 85
                                                            [name] => Sub Hood 1
                                                            [level] => 4
                                                            [link] => http://www.example.com/clothing/hoodies/hood1/sub-hood-1/
                                                        )
                                                )
                                        )
                                    [37] => Array
                                        (
                                            [id] => 37
                                            [name] => Hood 2
                                            [level] => 3
                                            [link] => http://www.example.com/clothing/hoodies/hood2/
                                        )
                                )
                        )
                    [16] => Array
                        (
                            [id] => 16
                            [name] => T-shirts
                            [level] => 2
                            [link] => http://www.example.com/clothing/t-shirts/
                        )
                )
        )
)
  

假设您能够在JSON格式化数据数组中分派必要的数据,就像链接的实时下拉列表示例一样。