我有这个问题/客户的要求: 显示所有库存> 0的产品 还显示所有库存= 0且自定义复选框'_show_zero_stock'设置为true的产品
但是在functions.php中提供的代码无法按所述方式工作。
我认为问题仅在“使用地点”条件下存在! is_admin()&& $ q-> is_main_query()&& $ q-> is_search',但我需要您的帮助。我尝试了meta_query,但是meta_query 20s页面加载后响应为〜1s的wp了。
Wordpress 5.2.1,Woocommerce 3.5.5,主题:Flastome(儿童) 版本将升级到最新版本。
function custom_posts_join($join, $q){
if( ! is_admin() && $q->is_main_query() && $q->is_search) {// No global $wp_query here
global $wpdb;
$join .= " LEFT JOIN $wpdb->postmeta as meta_1 ON $wpdb->posts.ID = meta_1.post_id";
}
return $join;
}
function filter_function_name_2925( $where, $q ){ // No global $wp_query here
if( ! is_admin() && $q->is_main_query() && $q->is_search) {
$where .= " AND ((meta_1.meta_key = '_stock' AND meta_1.meta_value > 0) OR (meta_1.meta_key = '_hide_zero_stock' AND meta_1.meta_value = 'yes' ))";
}
return $where;
}
add_filter( 'posts_join' , 'custom_posts_join', 10, 2);
add_filter( 'posts_where', 'filter_function_name_2925', 10, 2 );
预期结果- 显示库存> 0(与)的产品 显示库存= 0且已检查_show_zero_stock
的产品哪些部分应该受到影响: 类别,搜索和Ajax搜索[前端]
哪些部分不应受到影响: 产品页面-无论_show_zero_stock值如何,产品网址都必须可访问且可见
我用meta_query尝试过。可怕的性能影响:
add_action( 'woocommerce_product_query', 'show_out_of_stock_products' );
function show_out_of_stock_products( $q ) {
$meta_query = $q->get( 'meta_query' );
$meta_query[] = array(
'cache_results' => false,
'relation' => 'OR',
array(
'key' => '_stock',
'compare' => '>',
'value' => '0',
'type' => 'numeric',
),
array(
'relation' => 'AND',
array(
'key' => '_stock',
'compare' => '=',
'value' => '0',
'type' => 'numeric',
),
array(
'key' => '_show_zero_stock',
'compare' => 'EXISTS',
)
)
);
$q->set( 'meta_query', array($meta_query) );
}
答案 0 :(得分:0)
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => '_stock',
'value' => 1,
'compare' => '<'
)
),
'fields' => 'ids',
);`enter code here`
$product_ids = get_posts( $args );
$product_ids = implode( ",", $product_ids );
This will return all out of stock products