Обновление - Добавлено добавление к автоматического перехода в корзину товаров с нулевой или пустой ценой
Чтобы скрыть оба товара, у которых нетцена или которая имеет нулевую цену со страниц архива как магазина, используйте следующее:
add_filter( 'woocommerce_product_query_meta_query', 'shop_only_instock_products', 10, 2 );
function shop_only_instock_products( $meta_query, $query ) {
// In frontend only
if( is_admin() ) return $meta_query;
$meta_query['relation'] = 'OR';
$meta_query[] = array(
'key' => '_price',
'value' => '',
'type' => 'numeric',
'compare' => '!='
);
$meta_query[] = array(
'key' => '_price',
'value' => 0,
'type' => 'numeric',
'compare' => '!='
);
return $meta_query;
}
Код находится в файле function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.
Но использование чего-то вроде вашего первого фрагмента кода даст тот же результат (цены больше нуля) :
add_filter( 'woocommerce_product_query_meta_query', 'shop_only_instock_products', 10, 2 );
function shop_only_instock_products( $meta_query, $query ) {
// In frontend only
if( is_admin() ) return $meta_query;
$meta_query[] = array(
'key' => '_price',
'value' => 0,
'type' => 'numeric',
'compare' => '>'
);
return $meta_query;
}
Код идетв файле function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.
Перемещение товаров в корзину (без их удаления) с нулевой или пустой ценой.
Следующий код обновит состояние всех продуктов, у которых Ноль или пусто цена, до trash
с очень легким прямым запросом SQL .
Вам нужно запускать его только один раз каждый раз, когда вы этого захотите.
// Function that will add products to trash that have Zero price or no price
function auto_add_product_to_trash(){
global $wpdb;
$number_of_products_processed = $wpdb->query("
UPDATE {$wpdb->prefix}posts as a
JOIN {$wpdb->prefix}postmeta AS b ON a.ID = b.post_id
JOIN {$wpdb->prefix}postmeta AS c ON a.ID = c.post_id
SET a.post_status = 'trash'
WHERE a.post_status LIKE 'publish' AND a.post_type LIKE 'product'
AND b.meta_key LIKE '_price' AND c.meta_key LIKE '_sale_price'
AND ( b.meta_value LIKE '' OR b.meta_value LIKE '0' )
AND c.meta_value != '0'
");
// Return the number of products added to trash
return $number_of_products_processed;
}
// Execute the function - Run it just once and comment it
auto_add_product_to_trash();
Код находится в файле function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.
Теперь, когда вы переходите на свои продукты в Backend, все продукты с нулевой или пустой ценой находятся в корзине.Вы можете просмотреть их по одному и легко удалить:

Таким образом, все безопасно, так как вы можете восстановить любой продукт, добавленный в корзину.Если вы восстанавливаете продукт, вам нужно установить его статус «опубликовано» (восстановленные продукты получают статус «черновик»)