У меня есть эта проблема / спрос со стороны клиента: Показать все товары со складами> 0 Показать также все товары со складами = 0 и для пользовательского флажка '_show_zero_stock' установлено значение true
Но предоставляется код в functions.phpне работает, как описано.
Я думаю, что проблема только в состоянии «ГДЕ ИСПОЛЬЗОВАТЬ»!is_admin () && $ q-> is_main_query () && $ q-> is_search ', но мне нужна ваша помощь.Я попытался meta_query, но wp с ответом ~ 1s после загрузки страницы meta_query 20s.
Wordpress 5.2.1, Woocommerce 3.5.5, Тема: версии Flastome (дочерние) будут обновлены до последних.
- если в продукте установлен флажок «_show_zero_stock», то _show_zero_stockсуществует и значение = 'да'
- присоединиться к postmeta по post_id
- добавить запрос для фильтрации товаров по условию
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 [интерфейс]
Какие части не должны быть затронуты: продуктстраницы - URL продукта должен быть доступным и видимым независимо от значения _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) );
}