具有动态值的自定义WooCommerce端点不起作用

问题描述

我想为WooCommerce建立一个具有动态价值的新端点。不幸的是,我遇到了rest_no_route错误。

这是代码(插件):

<?php 

function filter($data){
    $brand = $data['brand'];
    $products = [];
    $loop = new WP_Query( array(
        'post_type'      => 'product','posts_per_page' => -1,'meta_query'     => array( array(
            'key'        => 'brands.id','value'      => $brand,'compare'    => '=',)),));
    if ( $loop->have_posts() ){
        while ( $loop->have_posts() ){
            $loop->the_post();
            array_push($products,get_post())
        } 
        wp_reset_postdata();
    }
    return $products;
    
}

add_action( 'rest_api_init',function () {
  register_rest_route( '/wc/v3','/brand=(?P<brand>\d+),array(
    'methods' => 'GET','callback' => 'brand',) );
} );


?>

这是我尝试访问的方式:

/wp-json/wc/v3/brand=1623

这是产品中brand属性的外观:

"brands": [
            {
                "id": 1623,"name": "HUGO BOSS","slug": "hugo-boss"
            }
        ],

感谢您的帮助!

解决方法

这是关于分类术语(不是发布元数据)的信息,尤其是WooCommerce品牌,因此您需要使用税收查询,而不要遵循(假设您正在使用WooCommerce品牌,因此分类应为“ product_brand”

因此构成WP_Query的函数应该是:

function filter($data){
    if( isset($data['brand']) && $data['brand'] > 0 ) {
        $taxonomy = 'product_brand'; // The taxonomy for WooCommerce Brands
        
        $products = (array) get_posts( array(
            'post_type'      => 'product','post_status'    => 'publish','posts_per_page' => -1,'tax_query'      => array( array(
                'taxonomy'      => $taxonomy,'field'         => 'term_id','terms'         => intval($data['brand']),) ),) );
        
        // return an array of WP_Post Objects (or an empty array)
        return $products; 
    }    
}

应该更好地工作。 您应该使用自定义名称来命名函数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...