用于 WordPress 的 PHP 片段,用于获取所有产品子类别

Posted

技术标签:

【中文标题】用于 WordPress 的 PHP 片段,用于获取所有产品子类别【英文标题】:PHP snippet for WordPress to get all product subcategories 【发布时间】:2021-06-17 01:35:21 【问题描述】:

我正在尝试为 WordPress 制作一个 sn-p。给定父产品类别的 id,它应该获取所有子类别的列表。

产品类别分为三个级别,如果给定级别 1,则结果应该是每个较低级别中的所有子类别。

我开始编写代码,但没有完成,不知道问题出在哪里。最重要的是,我正在使用 Oxygen 构建器,这就是为什么我在 CodeSnippet 插件上创建了一个短代码,并在 Oxygen 上添加了这个短代码。

这是我正在尝试的代码,这部分应该返回父类别的子类别。

     add_shortcode( 'subcategoriasdecategoria', function () 

?>
<ul class="megamenu_categoria2"> 
<?php
$get_parent_cats = array(
            'parent' => '0' //get top level categories only
        ); 

        $all_categories = get_categories( $get_parent_cats );//get parent categories 

        foreach( $all_categories as $single_category )
            //for each category, get the ID
            $catID = $single_category->cat_ID;

            echo '<li><a href=" ' . get_category_link( $catID ) . ' ">' . $single_category->name . '</a>'; //category name & link
            $get_children_cats = array(
                'child_of' => $catID //get children of this parent using the catID variable from earlier
            );

            $child_cats = get_categories( $get_children_cats );//get children of parent category
            echo '<ul class="megamenu_categoria2">';
                foreach( $child_cats as $child_cat )
                    //for each child category, get the ID
                    $childID = $child_cat->cat_ID;

                    //for each child category, give us the link and name
                    echo '<a class="megamenu_categoria2" href=" ' . get_category_link( $childID ) . ' ">' . $child_cat->name . '</a>';

                
            echo '</ul></li>';
         //end of categories logic 
    
    return $out;
 ); 

谁能帮帮我?

【问题讨论】:

【参考方案1】:

首先,您必须获取所有父类别,然后根据父 id,您可以编写一个循环函数,为您提供给定 id 的子类别。检查下面的代码。

function get_child_categories( $parent_category_id )
    $html = '';
    $child_categories = get_categories( array( 'parent' => $parent_category_id, 'hide_empty' => false, 'taxonomy' => 'product_cat' ) );
    if( !empty( $child_categories ) )
        $html .= '<ul>';
        foreach ( $child_categories as $child_category ) 
            $html .= '<li>'.$child_category->name;
            $html .= get_child_categories( $child_category->term_id );
            $html .= '</li>';
        
        $html .= '</ul>';
    
    return $html;


function list_categories()
    $html = '';
    $parent_categories = get_categories( array( 'parent' => 0, 'hide_empty' => false, 'taxonomy' => 'product_cat' ) );
    $html.= '<ul>';
    foreach ( $parent_categories as $parent_category ) 
        $html .= '<li>'.$parent_category->name;
        $html .= get_child_categories( $parent_category->term_id  );
        $html .= '</li>';
    
    $html.= '</ul>';
    return $html;

add_shortcode( 'list_categories', 'list_categories' );

输出

一个 B C D E F G H

【讨论】:

非常感谢@Bhautik!获取所有帖子类别效果很好。但是如何使获取所有产品类别?我尝试使用 'product_cat' => $taxonomy 作为参数,但它不起作用。 您应该接受@Bhautik 的回答。是的,product_cat 是正确的分类法。 ***.com/questions/21009516/…【参考方案2】:

我正在尝试创建一个查询参数,该参数为我提供 ID 为“457”的产品类别的所有子产品类别。我正在尝试这个:

<?php
$categoria2 ='457';
$taxonomy = 'product_cat';
$orderby = 'name';
$order = 'ASC';
$empty = 0;

$args = array(
    'taxonomy' => $taxonomy,
    'orderby' => $orderby,
    'order' => $order,  
    'child_of' => $categoria2,
    'hide_empty' => $empty,   
  );

    //echo build_query( $args );

?>

我得到的查询是这样的:

taxonomy=product_cat&orderby=name&order=ASC&child_of=457&hide_empty=0

但我在手动查询参数中的氧气中继器上输入它没有成功。

【讨论】:

以上是关于用于 WordPress 的 PHP 片段,用于获取所有产品子类别的主要内容,如果未能解决你的问题,请参考以下文章

php 用于WordPress的PHP

PHP 用于function.php文件的Wordpress侧边栏脚本

PHP 用于wordpress的简单iframe短代码

php 用于WordPress的SAAS REST API

PHP 用于Wordpress网站的Facebook OpenGraph标签

PHP会话不适用于多个WordPress页面