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

Custom WooCommerce endpoint with dynamic value is not working

我想为 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"
            }
        ],

感谢您的帮助!

这是关于 分类术语(不是 post 元数据),尤其是 WooCommerce 品牌,因此您需要使用 税务查询 而不是 (假设您使用的是 WooCommerce Brands,那么分类法应该是 "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; 
    }    
}

它应该更好用。 您应该使用自定义名称以不同方式命名您的函数。