Как создать рабочий пользовательский запрос товара в WooCommerce? - PullRequest
1 голос
/ 28 января 2020

У меня возникают трудности при создании собственного продукта WooCommerce. L oop.

. В процессе работы я столкнулся с несколькими вопросами, которые были бы действительно полезны, если бы на них можно было ответить.

В настоящее время я работаю с этим блоком кода:

ARCHIVE-PRODUCT. PHP (перемещено в дочернюю тему -> woocommerce / archive-product. php):

<?php
/**
 * @see https://docs.woocommerce.com/document/template-structure/
 * @package WooCommerce/Templates
 * @version 3.4.0
 */

defined( 'ABSPATH' ) || exit;

get_header();

$display_count = $atts['per_page'];
echo $display_count; // NO value - How do I access this?
$page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
echo $page; // returns 1 - CORRECT;
$offset = ( $page - 1 ) * $display_count;
echo $offset; // returns 0 - CORRECT;
$args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'posts_per_page'        => $atts['per_page'],
    'page'                  => $page,
    'offset'                => $offset,
    'orderby'               => $atts['orderby'],
    'order'                 => $atts['order']
); ?>

<?php
$loop = new WC_Product_Query( $args );
if ( $loop->have_posts() ) :

    // do_action( 'woocommerce_before_shop_loop' );

    woocommerce_product_loop_start();
?>

    <div id="product-list">

        <?php
        while ( $loop->have_posts() ) :

            $loop->the_post();

            wc_get_template_part( 'content', 'product' );

        endwhile;
        ?>

    </div>

    <?php
    woocommerce_product_loop_end();

    do_action( 'woocommerce_after_shop_loop' );

else :

    do_action( 'woocommerce_no_products_found' );

endif;

wp_reset_postdata();

do_action( 'woocommerce_after_main_content' );

do_action( 'woocommerce_sidebar' );

get_footer(); ?>

Возможно, моя ошибка сразу очевидна.

По мере того, как я прохожу свой код, я выделю вопросы, с которыми столкнулся, и не могу найти ответы.

Начиная с строка:

$display_count = $atts['per_page'];
echo $display_count; // NO value - How do I access this?

Насколько я понимаю, эти переменные ($atts['per_page'], $atts['order_by'], $atts['order']) были включены сюда: /includes/class-wc-shortcodes.php.

Однако я могу только см. этот атрибут, настроенный для отдельных страниц продукта, если я не ошибаюсь?

Могу ли я использовать переменные, установленные в $ atts []? Это также касается использования этих переменных далее вниз по странице в массиве $ args

Как мне настроить их, чтобы я мог их использовать?

Где хранятся и изменяются эти значения?

При записи пользовательского сценария разбиения на страницы AJAX в файл функций. php эти переменные легко доступны и здесь ? Если нет, как я могу их настроить?

$page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
echo $page; // returns 1 - CORRECT;

Настройка переменной страницы, чтобы помочь мне отслеживать страницу, на которой я нахожусь.

$offset = ( $page - 1 ) * $display_count;
echo $offset; // returns 0 - CORRECT;

Создание переменная смещения, помещаемая в аргументы, чтобы можно было сказать, сколько продуктов будет смещено, очень пригодится при разбивке на страницы.

$loop = new WC_Product_Query( $args );

Построение l oop продуктов, связанных с $ args

Это лучший обработчик запросов для использования? Я видел множество других, таких как:

$loop = new WP_Query( $args );
$loop = new wc_get_products( $args );

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

РЕДАКТИРОВАТЬ: В идеале это также покажет мне, как использовать WooCommerce l oop так как я использовал плагин, добавляемый к плагину WooCommerce, который помогает мне переупорядочивать продукты в индивидуальном порядке. Это заказной список товаров, который я sh смогу вытащить.

1 Ответ

0 голосов
/ 28 января 2020

Basi c запрос к l oop через продукты WooCommerce

<ul class="products">
<?php
$args = array(
    'post_type'   => 'product',
    'post_status' => 'publish',
    'posts_per_page' => -1,  // -1 will get all the product. Specify positive integer value to get the number given number of product
    );
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) : $the_query->the_post();

        // Get default product template
        wc_get_template_part( 'content', 'product' );

    endwhile;
} else {
    echo __( 'No products found' );
}
wp_reset_postdata();
?>
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...