Шорткод смещения продуктов Woocommerce - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь создать собственный шорткод продуктов Woocommerce, который позволяет мне компенсировать определенное количество продуктов при добавлении шорткода на страницу. Я смог заставить работать смещенную часть, взглянув на WooCommerce - недавнее смещение продуктов и https://ericwijaya.com/load-woocommerce-loop-custom-arguments/

Проблема, с которой я столкнулся, заключается в том, что атрибут «категория» продуктов Woocommerce не работает с моим новым шорткодом. Мой шорткод выглядит так: [products_offset limit = "8" category = "fiction" offset = "10" orderby = "menu_order"]

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

Это код, который я добавил к своей функции.php:

function products_offset_func( $atts ) {
$atts = shortcode_atts( array(
    'per_page' => '12',
    'columns'  => '4',
    'orderby'  => 'date',
    'order'    => 'desc',
    'offset'   => 0,
    'category' => '', // Slugs
    'operator' => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
), (array) $atts );

ob_start();

$query_args = array(
    'columns' => $atts['columns'],
    'posts_per_page' => $atts['per_page'],
    'orderby'        => $atts['orderby'],
    'order'          => $atts['order'],
    'offset'         => $atts['offset'],
    'no_found_rows'  => 1,
    'post_status'    => 'publish',
    'post_type'      => 'product',
    'meta_query'     => WC()->query->get_meta_query(),
);
?>
<ul class="products">
    <?php
        $loop = new WP_Query( $query_args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
                wc_get_template_part( 'content', 'product' );
            endwhile;
        } else {
            echo __( 'No products found' );
        }
        wp_reset_postdata();
    ?>
</ul><!--/.products-->
<?php

return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';

}

add_shortcode( 'products_offset', 'products_offset_func' );`

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 13 апреля 2019

Разобрался. Я не передавал слаг категории в WP_Query. Добавлено:

if( ! empty( $atts['category'] ) ) {
    $query_args['tax_query'] = array(
  array(
    'taxonomy' => 'product_cat',
    'field'    => 'slug',
    'terms'    => trim( $atts['category'] ),
    'operator' => $atts['operator']
  ),
);
}

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

//Shortcode for Offset Products

function products_offset_func( $atts ) {
$atts = shortcode_atts( array(
    'per_page' => '12',
    'columns'  => '4',
    'orderby'  => 'date',
    'order'    => 'desc',
    'offset'   => 0,
    'category' => '', // Slugs
    'operator' => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
), (array) $atts );

ob_start();

$query_args = array(
    'columns'           => $atts['columns'],
    'posts_per_page'    => $atts['per_page'],
    'orderby'           => $atts['orderby'],
    'order'             => $atts['order'],
    'offset'            => $atts['offset'],
    'no_found_rows'     => 1,
    'post_status'       => 'publish',
    'post_type'         => 'product',
    'meta_query'        => WC()->query->get_meta_query(),
);

if( ! empty( $atts['category'] ) ) {
    $query_args['tax_query'] = array(
  array(
    'taxonomy' => 'product_cat',
    'field'    => 'slug',
    'terms'    => trim( $atts['category'] ),
    'operator' => $atts['operator']
  ),
);
}
?>
<ul class="products">
    <?php
        $loop = new WP_Query( $query_args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
                wc_get_template_part( 'content', 'product' );
            endwhile;
        } else {
            echo __( 'No products found' );
        }
        wp_reset_postdata();
    ?>
</ul><!--/.products-->
<?php

return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';

}

add_shortcode( 'products_offset', 'products_offset_func' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...