Скрыть на складе Woocommerce сопутствующие товары

8 лет, yeesh, и никто не понял это? : /

Вы можете переопределить оператор import или aka функцию __import__.

Это всего лишь проверенный код scribble, потому что я не мог найти никакой законной ссылки:

import importlib

def secure_importer(name, globals=None, locals=None, fromlist=(), level=0):

    if name != 'C': print(name, fromlist, level)

    # not exactly a good verification layer
    frommodule = globals['__name__'] if globals else None
    if name == 'B' and frommodule != 'C':
        raise ImportError("module '%s' is restricted."%name)

    return importlib.__import__(name, globals, locals, fromlist, level)

__builtins__.__dict__['__import__'] = secure_importer

import C

, и вот тесты для этого кода:

Python 3.4.3 |Anaconda 2.3.0 (32-bit)| (default, Mar  6 2015, 12:08:17) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
B ('f',) 0
imported secure module
>>> from B import f
B ('f',) 0
linecache None 0
encodings.utf_8 ['*'] 0
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    from B import f
  File "\home\tcll\Projects\python\test\restricted imports\main.py", line 11, in secure_importer
    raise ImportError("module '%s' is restricted."%name)
ImportError: module 'B' is restricted.
>>> import C
>>> 

Пожалуйста, не комментируйте меня, используя Python34, у меня есть мои причины, и это мой основной интерпретатор в Linux конкретно для тестирования вещей (например, приведенного выше кода) для моего основного проекта.

0
задан LoicTheAztec 2 March 2019 в 23:39
поделиться

3 ответа

Попробуйте выполнить следующее:

add_filter( 'woocommerce_product_related_posts_query', 'alter_product_related_posts_query', 10, 3 );
function alter_product_related_posts_query( $query, $product_id, $args ){
    global $wpdb;

    $query['join']  .= " INNER JOIN {$wpdb->postmeta} as pm ON p.ID = pm.post_id ";
    $query['where'] .= " AND pm.meta_key = '_stock_status' AND meta_value = 'instock' ";

    return $query;
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Я надеюсь, что это работает.

0
ответ дан LoicTheAztec 2 March 2019 в 23:39
поделиться

Да, можно скрыть товары, не связанные со складами.

Добавьте приведенное ниже в functions.php - это скроет отсутствующие товары от сопутствующих товаров.

add_filter( 'woocommerce_output_related_products_args', function( $args )
{
    $args = wp_parse_args( array(
        'posts_per_page' => 4,
        'meta_query' => array (
           'key' => '_stock_status',
           'value' => 'instock'
    )
    ), $args );
    return $args;
});

Постов на каждой странице страницы можно удалить, но это полезно для быстрой визуализации того, что это сработало на вашем блоке сопутствующих товаров.

0
ответ дан thetwopct 2 March 2019 в 23:39
поделиться

создать функцию и привязать ее к хуку связанных продуктов woocommerce, например:

function dont_show_outofstock( $is_visible, $id ) {
    $product = new wC_Product( $id );

    if ( ! $product->is_in_stock() && ! $product->backorders_allowed() ) {
    $is_visible = false;
    }

    return $is_visible;
}
add_filter( 'woocommerce_output_related_products_args', 'dont_show_outofstock', 10, 2 );
0
ответ дан sarah miller 2 March 2019 в 23:39
поделиться
Другие вопросы по тегам:

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