Скрыть товары "нет в наличии" на домашней странице в WooCommerce - PullRequest
2 голосов
/ 09 мая 2019

Я не хочу показывать товары "нет в наличии" на моей домашней странице. Я пробовал некоторые хуки и фильтр WooCommerce, чтобы изменить запрос продукта, но он не работает. Я также установил флажок «скрыть на складе» в области настроек woocommerce.

но продукт все еще появляется. Могу ли я получить подсказку, когда это происходит.

Я пытался этот фильтр-хук изменить основной запрос продукта:

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {


$q->set( 'meta_query', array(array(
    'key'       => '_stock_status',
    'value'     => 'outofstock',
    'compare'   => 'NOT IN'
)));

}

remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

Я хочу спрятать товар, но ничего не работает. Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 10 мая 2019

Чтобы исключить товары "Нет в наличии" с вашей домашней страницы, это можно сделать разными способами.

1) Мета-запрос с использованием выделенного фильтра woocommerce_product_query_meta_query:

add_filter( 'woocommerce_product_query_meta_query', 'filter_product_query_meta_query', 10, 2 );
function filter_product_query_meta_query( $meta_query, $query ) {
    // On woocommerce home page only
    if( is_front_page() ){
        // Exclude products "out of stock"
        $meta_query[] = array(
            'key'     => '_stock_status',
            'value'   => 'outofstock',
            'compare' => '!=',
        );
    }
    return $meta_query;
}

2) Налоговый запрос с использованием выделенного фильтра woocommerce_product_query_tax_query:

add_filter( 'woocommerce_product_query_tax_query', 'filter_product_query_tax_query', 10, 2 );
function filter_product_query_tax_query( $tax_query, $query ) {
    // On woocommerce home page only
    if( is_front_page() ){
        // Exclude products "out of stock"
        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'name',
            'terms'    => array('outofstock'),
            'operator' => 'NOT IN'
        );
    }
    return $tax_query;
}

Код помещается в файл functions.php вашей активной дочерней темы (или активной темы). Обе работы.


Похожие: Скрыть только на складе товары на страницах архива магазина в Woocommerce

0 голосов
/ 10 мая 2019

ОБНОВЛЕНИЕ

Проверьте font-page.php файл в текущей папке темы, возможно, ваши разработчики добавили пользовательский код в ваши файлы шаблона, не вызывая никаких действий ловушки.

СТАРЫЙ ОТВЕТ

Почему не использовать настройки WooCommerce?

  1. Перейдите в Woocommerce → Настройки и перейдите на вкладку Продукты
  2. Нажмите кнопкуСсылка на инвентарь вверху
  3. Отметьте Скрыть товары, отсутствующие на складе из каталога , чтобы скрыть товары, отсутствующие на складе
0 голосов
/ 09 мая 2019

Вы используете код для старой версии WooCommerce.Попробуйте этот подход.

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() || is_admin() || ! $q->is_front_page() ) {
        return;
    }

    if ( $outofstock_term = get_term_by( 'name', 'outofstock', 'product_visibility' ) ) {

        $tax_query = (array) $q->get('tax_query');

        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field' => 'term_taxonomy_id',
            'terms' => array( $outofstock_term->term_taxonomy_id ),
            'operator' => 'NOT IN'
        );

        $q->set( 'tax_query', $tax_query );

    }
}
...