我使用标准操作注册了一个分类:

add_action( 'init', 'product_brand_order_taxonomy' );
function product_brand_order_taxonomy()  {
    $labels = array(
        'name'                       => 'Brand Heirarchy',
        'singular_name'              => 'Brand Heirarchy',
        'menu_name'                  => 'Brand Heirarchy',
        'all_items'                  => 'All Brand Heirarchies',
        'parent_item'                => 'Parent Brand Heirarchy',
        'parent_item_colon'          => 'Parent Brand Heirarchy:',
        'new_item_name'              => 'New Brand Heirarchy Name',
        'add_new_item'               => 'Add New Brand Heirarchy',
        'edit_item'                  => 'Edit Brand Heirarchy',
        'update_item'                => 'Update Brand Heirarchy',
        'separate_items_with_commas' => 'Separate Brand Heirarchy with commas',
        'search_items'               => 'Search Brand Heirarchies',
        'add_or_remove_items'        => 'Add or remove Brand Heirarchies',
        'choose_from_most_used'      => 'Choose from the most used Brand Heirarchies',
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => true,
    );
    register_taxonomy( 'brand_heirarchy', 'product', $args );
    register_taxonomy_for_object_type( 'brand_heirarchy', 'product' );
}

稍后,我想根据一些论点来获得产品.我还希望brand_heirarchy分也包括在结果中.

$products = array(
    'post_status' => 'publish',
    'limit' => -1,
    'category' => $parent_brand_slugs
);

$products = wc_get_products($product_args);

在返回的数据中,它会给我category_ids个赞

[category_ids] => Array
    (
        [0] => 30
        [1] => 27
        [2] => 25
        [3] => 24
    )

但我希望它也返回与产品相关的brand_heirarchy个ID.

我看到的大多数事情都是关于如何通过自定义分类来筛选产品,我只是想知道什么分类与产品相关联.

我遇到了这样一句话:WooCommerce不允许这样:https://github.com/woocommerce/woocommerce/issues/13138

我看了看使用这个过滤器woocommerce_product_object_query_args,但没有弄明白.还有一个产品搜索过滤器,但看起来并不适用.

在这一点上,似乎我最好的 Select 是循环使用每个产品,并使用大约wp_get_object_terms( $data['id'], 'brand_heirarchy' );个,但这似乎效率低下.

我已经很久没有做WordPress了,所以我真的在问,是否有更有效的方法来获取与每种产品相关的分类法.

谢谢.

推荐答案

使用wc_get_products()处理自定义分类法是完全可能的.您没有搜索到正确的位置,因为这是使用可用的filter hook woocommerce_product_data_store_cpt_get_products_queryWC_Product_Data_Store_CPT class内处理的.

因此,对于您的定制产品分类brand_heirarchy,您将使用以下内容:

add_filter( 'woocommerce_product_data_store_cpt_get_products_query', 'handle_custom_query_var', 10, 2 );
function handle_custom_query_var( $query_args, $query_vars ) {
    if ( ! empty( $query_vars['brand'] ) ) {
        $query_args['tax_query'][] = array(
            'taxonomy'          => 'brand_heirarchy',
            'field'             => 'slug',
            'terms'             => $query_vars['brand'],
        );
    }
    return $query_args;
}

然后,您现在可以在wc_get_products()函数中使用您的定制分类法,如下所示:

$products = wc_get_products( array(
    'status' => 'publish',
    'limit' => -1,
    'brand' => $brand_slugs // array
) );

现在,它应该奏效了.


相关文档:

Php相关问答推荐

当我们使用PHPUnit时,控制台中的--uses param到底起了什么作用以及如何使用?

通过访问单个产品页面更新WooCommerce产品元数据

添加并显示单价字段到WooCommerce产品变化

在PHP中使用curl命令执行SCRAPYD操作.json不返回任何内容

PHP文件上载问题-";Move_Uploaded_Files";未按预期工作

PHP:为什么递归需要这么长时间

如何配置我的.env文件以在laravel的一个项目中连接两个不同的数据库?

在WooCommerce上设置简单和可变产品的最小订单量

PHP Match如何准确判断条件?

Symfony框架锁定和.env设置

如何在其他数组php中创建具有关联数组的数组

如何在 PHP laravel 中将图像的透明背景转换为白色?

我的功能以舒适的方式显示数组 struct

在 PHP 8.2 中使用 PHP Spreadsheet 和 CodeIgniter 3 导出 Excel 时出错

ACF 更新字段功能不更新 WordPress 中的任何数据

php/html OnSubmit 禁用输入类型提交未给出预期结果

PHP header() 是否缓存重定向,如果是,如何防止它这样做?

Shopware 6:无法在新的自定义插件中保存关联字段(媒体)

为什么在 phpunit 的开头测试 PHP_VERSION?

为什么非贪婪匹配会消耗整个模式,即使后面跟着另一个非贪婪匹配