WC_get_products 元查询被忽略
WC_get_products Meta Query being ignored
我在使用 wc_get_products 元查询时遇到问题。我试图排除 SKU 中具有 clearance
或 express
的产品,并且 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
或 !=
但没有任何效果或似乎影响查询。
非常感谢任何帮助。
谢谢
更新-----------------------------
我在开头的 post 中犯了一个重大错字,以确认我使用的是 wc_get_products 否 wp_query
我一直在尝试元查询的一些变体,但到目前为止没有任何效果...
仅使用单个元查询似乎也不起作用
'meta_query' => array(
'key' => '_sku',
'value' => 'express',
'compare' => '!=', // also tried 'NOT LIKE'
),
由于最初与查询混淆,我将把 Howard E 的问题标记为正确,因为它是针对 wp_query 和 repost 的正确信息。
尝试更新您的 meta_query。您首先说 "OR" 表示 clearance
和 express
的关系。
'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
的任何实例。如果需要,您可能需要添加其他条件。
我在使用 wc_get_products 元查询时遇到问题。我试图排除 SKU 中具有 clearance
或 express
的产品,并且 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
或 !=
但没有任何效果或似乎影响查询。
非常感谢任何帮助。
谢谢
更新-----------------------------
我在开头的 post 中犯了一个重大错字,以确认我使用的是 wc_get_products 否 wp_query
我一直在尝试元查询的一些变体,但到目前为止没有任何效果...
仅使用单个元查询似乎也不起作用
'meta_query' => array(
'key' => '_sku',
'value' => 'express',
'compare' => '!=', // also tried 'NOT LIKE'
),
由于最初与查询混淆,我将把 Howard E 的问题标记为正确,因为它是针对 wp_query 和 repost 的正确信息。
尝试更新您的 meta_query。您首先说 "OR" 表示 clearance
和 express
的关系。
'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
的任何实例。如果需要,您可能需要添加其他条件。