Виджет Категории продуктов Woocommerce - скрывает категории, которые не имеют никаких продуктов в [закрытом] запасе

Я использую WooCommerce на своем сайте Wordpress и имею виджет на боковой панели, показывающей все категории продуктов. Это - установка для сокрытия пустых категорий, и это работает хорошо. Однако это все еще показывает категории, которые содержат только продукты, которые отсутствуют на складе - что я хотел бы измениться.

Техническое объяснение: продуктами WooCommerce является пользовательский тип сообщения (product), категории продуктов являются пользовательской таксономией (product_cat), и количество запаса является пользовательским полем на продуктах (_stock). Виджет Категорий продуктов WooCommerce показывает им использование wp_list_categories(). Я попытался рыть в код для поиска некоторого вызова фильтра, который я мог сцепить на, но отказавший для нахождения того.

Существует ли хороший способ сделать это, не изменяя код WooCommerce или ядро? Возможно, рычаг/фильтр где-нибудь, что я отсутствовал, который позволит проверять пользовательское значение поля?

3
05.12.2012, 16:56
3 ответа

Если Вы перейдете к WooCommerce => Настройки и выберете вкладку 'Inventory', то Вы будете видеть опцию 'Скрыть отсутствующие на складе объекты от каталога'. При включении этой опции затем, отсутствующие на складе объекты не будут отображены и если категория не будет содержать никого sellable (отсутствующий на складе или никакая цена) объекты, то она будет скрыта также.

Обновление

Хорошо я считал 'виджет' и полностью проигнорировал его в моем ответе.

Виджет Категорий продуктов WooCommerce не поддерживает фильтрацию продуктов/категорий насколько я знаю. Так никакой рычаг или фильтр, о котором я знаю.

Но Вы могли легко скопировать единственный файл и изменить его как одинокий виджет, который не будет по записанному обновлением WooCommerce.

Надежда, которая помогает.

0
19.02.2020, 22:16
  • 1
    Опция проверяется. Отсутствующие на складе объекты не показывают на страницах магазина, но они все еще рассчитывают в номера продуктов категории, и категории, только содержащие отсутствующие на складе объекты, все еще показывают в виджете. –  olex 05.12.2012, 10:50
  • 2
    Зонируемый на 'Виджете'. Посмотрите мои обновления в ответе. –  Steve 05.12.2012, 16:13
  • 3
    Это действительно поддерживает фильтрацию категорий в виджете, который можно также использовать с условными тегами WooCommerce. –  Brad Dalton 22.02.2014, 02:36
  • 4
    @BradDalton Вы были бы так услужливы, что добавили бы ответ на этот вопрос со ссылками на соответствующую документацию? Это значительно улучшило бы качество вопроса/ответа. –  Steve 23.02.2014, 02:51
  • 5
    olex должен отправить некоторый код здесь и внести часть работы. Я обеспечил 2 фильтра и половину кода для начала работы с этим решением. Существуют другие. –  Brad Dalton 23.02.2014, 10:07

Используйте woocommerce_product_categories_widget_args и woocommerce_get_availability просачивается пользовательская функция для фильтрации виджета категорий продуктов для отсутствующих на складе продуктов.

Посмотрите то, что можно подойти с помощью этих фильтров и отправить код назад здесь, если Вы застреваете.

Вот некоторый код от моего сайта, который может помочь Вам начать.

add_filter( 'woocommerce_product_categories_widget_args', 'wpsites_exclude_product_cat_widget' );

function wpsites_exclude_product_cat_widget( $args ) {

$args['exclude'] = array('16','46');

return $args;
}

Вот все рычаги для WooCommerce

4
19.02.2020, 22:16
  • 1
    +1. Я просто думал об этом подходе, но в реверсе... с помощью 'включать' параметра. При запросах всех продуктов в каждой категории как только Вы находите 1 продукт в запасе, можно добавить это к 'включенному' массиву и пропуск к следующей категории вместо того, чтобы проверить каждую категорию. По-видимому, это - старый вопрос (я не всегда замечаю даты), но я заинтригован им. –  helgatheviking 23.02.2014, 10:45
  • 2
    Записало ниже после нахождения этого потока в поиске Google. Я предполагаю, что сам запрос мог быть оптимизирован, мой sql слаб. Любопытный видеть, как этот подход выдерживает сравнение с идеей @helgatheviking циклично выполниться, speedwise. gist.github.com/karpstrucking/1f6139d6899b1709f545 –  karpstrucking 16.01.2016, 20:53

Я не уверен, что это возможно, поскольку я не думаю, что существует место в wp_list_categories() это когда-либо проверяло бы состояние сообщений/продуктов в категории. Даже если бы было, то необходимо было бы запросить много продуктов во ВСЕХ категориях, которые были бы очень неэффективны.

Вы могли, возможно, заменить WC_Product_Cat_Dropdown_Walker и сделайте свою проверку там.

Ответственная функция смотрит, как будто она принимает другого Walker:

/**
 * Walk the Product Categories.
 *
 * @return mixed
 */
function wc_walk_category_dropdown_tree() {
    global $woocommerce;

    if ( ! class_exists( 'WC_Product_Cat_Dropdown_Walker' ) )
        include_once( WC()->plugin_path() . '/includes/walkers/class-product-cat-dropdown-walker.php' );

    $args = func_get_args();

    // the user's options are the third parameter
    if ( empty( $args[2]['walker']) || !is_a($args[2]['walker'], 'Walker' ) )
        $walker = new WC_Product_Cat_Dropdown_Walker;
    else
        $walker = $args[2]['walker'];

    return call_user_func_array(array( &$walker, 'walk' ), $args );
}

Таким образом, при дублировании виджета, Вы могли бы якобы измениться

// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
            wc_product_dropdown_categories( array(
                'show_counts'        => $c,
                'hierarchical'       => $h,
                'show_uncategorized' => 0,
                'orderby'            => $o
            ) );

кому:

// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
            wc_product_dropdown_categories( array(
                'show_counts'        => $c,
                'hierarchical'       => $h,
                'show_uncategorized' => 0,
                'orderby'            => $o,
                                'walker'             => 'InStock_Categories'
            ) );

И затем Вы были бы ответственны за создание и включение InStock_Categories Класс Walker. Полностью непротестированный, но просто бросающий некоторые идеи там.

2
19.02.2020, 22:16

Теги

Похожие вопросы