Обработка видимости Woocommerce для скрытых продуктов в запросе WP - PullRequest
0 голосов
/ 30 октября 2018

Можете ли вы помочь мне с этим? У меня есть список продуктов, и я хочу скрыть эти продукты, помеченные как скрытые в деталях видимости продукта. Вот код, который у меня есть:

<code> $args = array(
                'posts_per_page' => -1,
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'product_cat',
                        'field' => 'term_id',
                        // 'terms' => 'white-wines'
                        'terms' => $product_categories[$wc_arr_key[$wc_cat_id]]->term_id,
                        'visibility' => 'visible' //NOT WORKING...
                    )
                ),
                'post_type' => 'product',
                'orderby'    => 'menu_order',      
                'order'           =>  'ASC',      

            );
            $products = new WP_Query( $args );

            if(isset($_GET['staging']) && $_GET['staging'] == "true") {
                echo "<pre>" . print_r($products) . "
"; }

Я хочу отобразить все продукты, которые помечены как видимые.

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

WooCommerce сохраняет эти данные как метаданные, поэтому вам нужно будет выполнить мета-запрос с именем _visibility. Это будет выглядеть как

'meta_query' => array(
    array(
        'key'       => '_visibility',
        'value'     => 'hidden',
        'compare'   => '!=',
    )
)

При этом будут извлечены все сообщения, для которых мета-видимость не равна скрытой

.
0 голосов
/ 30 октября 2018

Начиная с Woocommerce 3, видимость продукта обрабатывается таксономией product_visibility для термина exclude-from-catalog, поэтому вам нужно использовать второй массив в массиве налоговых запросов:

<code>$terms = array( $product_categories[$wc_arr_key[$wc_cat_id]]->term_id );

$products = new WP_Query( array(
    'post_type'         => 'product',
    'post_status'       => 'publish',
    'posts_per_page'    => -1,
    'tax_query'         => array(
        'relation'      => 'AND',
        array(
            'taxonomy'  => 'product_cat',
            'field'     => 'term_id',
            'terms'     => $terms
        ),
        array(
            'taxonomy'  => 'product_visibility',
            'terms'     => array('exclude-from-catalog'),
            'field'     => 'name',
            'operator'  => 'NOT IN',
        ),
    ),
    'orderby'           => 'menu_order',
    'order'             =>  'ASC',
) );


if(isset($_GET['staging']) && $_GET['staging'] == "true") {
    echo "<pre>" . print_r($products) . "
"; }

Проверено и работает.

Похожие: Изменения в базе данных для продуктов в woocommerce 3

0 голосов
/ 30 октября 2018

Используйте код ниже, чтобы исключить hidden продукты и отображать только visible единицы

<code>$args = array(
                'posts_per_page' => -1,
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'product_cat',
                        'field' => 'term_id',
                        // 'terms' => 'white-wines'
                        'terms' => $product_categories[$wc_arr_key[$wc_cat_id]]->term_id
                    )
                ),
                'meta_query' => array(
                    array(
                       'key'       => '_visibility',
                       'value'     => 'hidden',
                       'compare'   => '!='
                         )
                 ),
                'post_type' => 'product',
                'orderby'    => 'menu_order',      
                'order'           =>  'ASC'      

            );
            $products = new WP_Query( $args );

            if(isset($_GET['staging']) && $_GET['staging'] == "true") {
                echo "<pre>" . print_r($products) . "
"; }
...