【问题标题】:WC_get_products Meta Query being ignoredWC_get_products 元查询被忽略
【发布时间】:2020-05-26 19:57:14
【问题描述】:

我在使用 wc_get_products 元查询时遇到问题。我试图排除 SKU 中具有 clearanceexpress 的产品,并且 SKU 的格式如下; (不是我的选择,公司在很多个月前就决定了!)

我的俱乐部 - 快递 - 物品 我的俱乐部 - 清仓 - 物品 另一个俱乐部 - 标准 - 物品

以下是我的参数,请有人告诉我它们有什么问题吗?

    'post_status' => array('publish', 'pending', 'draft', 'future', 'private'),
    'parent' => array( 13, 14, 15 ),
    'limit' => 1000,
    'orderby' => 'id',
    'order'   => 'asc',
    'type' => array( 'simple', 'variable' ),
    'meta_query' => array(
                    'relation' => 'and',
                        array(
                            'relation'  => 'or',
                                array(
                                'key' => '_sku',
                                'value' => 'clearance',
                                'compare' => 'NOT LIKE',
                                ),
                            ),
                        array(
                            'relation' => 'or',
                                array(
                                'key' => '_sku',
                                'value' => 'fxpe',
                                'compare' => 'NOT LIKE',
                                ),
                            ),
                        )
);

我还完成了 woocommerce 步骤(在页面底部)Adding Custom Parameter Support,如下所示:

function handle_custom_query_var( $query, $query_vars ) {
    if ( ! empty( $query_vars['_sku'] ) ) {
        $query['meta_query'][] = array(
            'key' => '_sku',
            'value' => esc_attr( $query_vars['_sku'] ),
        );
    }

    return $query;
 }

 add_filter( 'woocommerce_product_data_store_cpt_get_products_query', 'handle_custom_query_var', 10, 2 );

我也尝试过反转元查询并将比较更改为like!=,但没有任何效果或似乎影响查询。

任何帮助都非常感谢。

谢谢

更新-------------------------------

我在最初的帖子中犯了一个重大错字,以确认我使用的是 wc_get_products no wp_query

我一直在尝试元查询的一些变体,但到目前为止没有任何效果...

仅使用单个元查询似乎也不起作用

'meta_query' => array(
                        'key' => '_sku',
                        'value' => 'express',
                        'compare' => '!=',  // also tried 'NOT LIKE'

                        ),

由于最初与查询混淆,我会将 Howard E 的问题标记为正确,因为它是针对 wp_query 的,并使用正确的信息重新发布。

【问题讨论】:

  • 删除元查询后,您的查询是否提供预期结果?
  • 返回了正确的结果,但它们包括具有“快递”和“清仓”sku 的产品。是的,如果元查询被删除,一切正常

标签: php wordpress woocommerce meta-query


【解决方案1】:

尝试更新您的 meta_query。您首先要对clearanceexpress 的关系说“或”。

'meta_query' => array(
    'relation' => 'AND',
    array(
        'relation'  => 'OR',
            array(
            'key' => '_sku',
            'value' => 'clearance',
            'compare' => 'NOT LIKE',
            ),
        ),
    array(
        'relation' => 'OR',
            array(
            'key' => '_sku',
            'value' => 'express',
            'compare' => 'NOT LIKE',
            ),
        ),
    )

* 处理更新后的问题 *

function handle_custom_query_var( $query, $query_vars ) {
    if ( ! empty( $query_vars['_sku'] ) ) {
        $query['meta_query'][] =  array(
        array(
                'relation'  => 'or',
                    array(
                    'key' => '_sku',
                    'value' => 'fxpe',
                    'compare' => 'NOT LIKE',
                    ),
                ),
            array(
                'relation' => 'or',
                    array(
                    'key' => '_sku',
                    'value' => 'clearance',
                    'compare' => 'NOT LIKE',
                    ),
                ),
            );
    }

    return $query;
 }

然后只需在产品查询中使用_sku 并带有值...

$products = wc_get_products(array(
     'post_status' => array('publish', 'pending', 'draft', 'future', 'private'),
    'parent' => array( 13, 14, 15 ),
    'limit' => 1000,
    'orderby' => 'id',
    'order'   => 'asc',
    'type' => array( 'simple', 'variable' ),
    '_sku' => true,
));

添加此过滤器将过滤 WC 查询中的任何 _sku 实例。如果需要,您可能需要添加其他条件。

【讨论】:

  • 对不起,我说得太早了!查询仍然忽略元查询。正在加载所有结果,包括我想要排除的内容...
  • 这些 SKU 是什么样的?
  • 所有字符,例如。 “我的俱乐部 - 类别 - 项目”,不是我所知道的最好的,但由于权力的原因,它必须是这样的
  • ive 还尝试将其简化为一个似乎也不起作用的元查询,返回的所有结果包括排除的结果。
  • 您是否尝试将这两种关系都更改为“和”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 2013-09-04
  • 2014-11-20
  • 2013-03-27
  • 1970-01-01
相关资源
最近更新 更多