как переопределить цикл woocommerce или archive-product.php

30 мая 2018 г., 00:18:55
Просмотры: 58.6K
Голосов: 9

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

wc_get_template_part( 'content', 'product' );

Не знаю, что это такое, думал, что это будет выглядеть как обычный HTML и CSS классы, которые я могу отредактировать, но я все еще думаю, что это может быть где-то скрыто, но не знаю где найти.

Я застрял со вчерашнего дня на том, как редактировать HTML элементы, я все еще новичок в разработке тем, поэтому, пожалуйста, помогите мне или хотя бы посоветуйте. Вот полный archive-product.php, который выглядит следующим образом:

get_header(); ?>

<div class="row">
    <div class="small-12 medium-12 large-12 columns text-left">
        <!--хлебные крошки-->
        <?php
        /**
         * хук woocommerce_before_main_content.
         *
         * @hooked woocommerce_output_content_wrapper - 10 (выводит открывающие div для контента)
         * @hooked woocommerce_breadcrumb - 20
         * @hooked WC_Structured_Data::generate_website_data() - 30
         */
        do_action( 'woocommerce_before_main_content' );
        ?>
    </div>

    <header class="small-12 medium-6 large-6 columns text-left woocommerce-products-header collapse">
    <!--заголовок-->
        <?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>

        <h1 class="woocommerce-products-header__title page-title"><?php woocommerce_page_title(); ?></h1>

        <?php endif; ?>

        <?php
            /**
             * хук woocommerce_archive_description.
             *
             * @hooked woocommerce_taxonomy_archive_description - 10
             * @hooked woocommerce_product_archive_description - 10
             */
            do_action( 'woocommerce_archive_description' );
        ?>
    </header>

    <div class="small-12 medium-6 large-6 columns collapse">

        <?php if ( have_posts() ) : ?>
        <?php
            /**
             * хук woocommerce_before_shop_loop.
             *
             * @hooked woocommerce_result_count - 20
             * @hooked woocommerce_catalog_ordering - 30
             */
            do_action( 'woocommerce_before_shop_loop' );
        ?>
        <?php endif; ?>
    </div>

</div>


<div class="row small-up-2 large-up-4">
    <?php if ( have_posts() ) : ?>

    <?php #woocommerce_product_loop_start(); ?><!--удаляет ul-->

        <?php woocommerce_product_subcategories(); ?>

        <?php while ( have_posts() ) : the_post(); ?>

            <?php
                /**
                 * хук woocommerce_shop_loop.
                 *
                 * @hooked WC_Structured_Data::generate_product_data() - 10
                 */
                do_action( 'woocommerce_shop_loop' );
            ?>

            <?php wc_get_template_part( 'content', 'product' ); ?>

        <?php endwhile; // конец цикла. ?>

    <?php #woocommerce_product_loop_end(); ?>

    <?php
        /**
         * хук woocommerce_after_shop_loop.
         *
         * @hooked woocommerce_pagination - 10
         */
        do_action( 'woocommerce_after_shop_loop' );
    ?>

    <?php elseif ( ! woocommerce_product_subcategories( array( 'before' => woocommerce_product_loop_start( false ), 'after' => woocommerce_product_loop_end( false ) ) ) ) : ?>

    <?php
        /**
         * хук woocommerce_no_products_found.
         *
         * @hooked wc_no_products_found - 10
         */
        do_action( 'woocommerce_no_products_found' );
    ?>

    <?php endif; ?> 
</div>
0
Все ответы на вопрос 1
1
13

Шаблонизация WooCommerce работает по-разному в зависимости от ваших потребностей и/или навыков.

Функция:

<?php
    wc_get_template_part('content', 'product');

является эквивалентом функции шаблонов ядра WordPress в WooCommerce:

<?php
    get_template_part('filename');

Важно знать, что это то же самое, что и require в PHP, но без использования расширения .php в конце.

Прежде чем выполнять какие-либо из описанных ниже шагов, убедитесь, что ваша тема поддерживает WooCommerce, проверив в файле functions.php наличие следующей строки кода:

<?php

// Хук after_setup_theme добавляет поддержку WC
function mytheme_add_woocommerce_support() {
    add_theme_support( 'woocommerce' ); // <<<< здесь
}
add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' );

Для использования собственного дизайна/шаблона у вас есть несколько вариантов:

1) Самый простой способ:

Создайте файл "woocommerce.php" в папке вашей темы

Этот файл будет иметь наивысший приоритет в плане того, какой файл будет использоваться WordPress в вашей теме. Удалите этот файл, если хотите использовать второй способ.

2) Продвинутый способ:

Создайте папку "woocommerce" и скопируйте в неё шаблон, который вы хотите изменить.

WooCommerce/WordPress распознает это и будет использовать шаблоны из этой папки. Этот метод называется "переопределением шаблонов" и позволяет вам вставлять и изменять части вывода WooCommerce во фронтенде вашей темы. Это более продвинутый способ кастомизации WC, возможно, вызов для вас, но точно более профессиональный способ сделать это.

В этом случае вы, вероятно, ищете этот файл:

woocommerce/archive-product.php

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

В итоге ваш новый файл может выглядеть так:

<?php get_header(); ?>
    <div class="container">
        <div class="row">
            <?php get_template_part('sidebars/sidebar-left'); ?>
            <main class="col-xs-12 col-sm-9 col-md-9 col-lg-9">

                <?php
                    // Запускаем только на страницах архива магазина, не на страницах отдельных товаров или других страницах
                    if ( is_shop() || is_product_category() || is_product_tag() ) {
                        // Товаров на странице
                        $per_page = 24;
                        if ( get_query_var( 'taxonomy' ) ) { // Если на странице архива таксономии товаров (категория или метка)
                            $args = array(
                                'post_type' => 'product',
                                'posts_per_page' => $per_page,
                                'paged' => get_query_var( 'paged' ),
                                'tax_query' => array(
                                    array(
                                        'taxonomy' => get_query_var( 'taxonomy' ),
                                        'field'    => 'slug',
                                        'terms'    => get_query_var( 'term' ),
                                    ),
                                ),
                            );
                        } else { // На главной странице магазина
                            $args = array(
                                'post_type' => 'product',
                                'orderby' => 'date',
                                'order' => 'DESC',
                                'posts_per_page' => $per_page,
                                'paged' => get_query_var( 'paged' ),
                            );
                        }
                        // Устанавливаем запрос
                        $products = new WP_Query( $args );
                        // Стандартный цикл
                        if ( $products->have_posts() ) :
                            while ( $products->have_posts() ) : $products->the_post();
                                // Ваша новая HTML-разметка здесь
                                ?>
                                <div class="col-xs-12 col-md-3">
                                    <h2><?php the_title(); ?></h2>
                                    <?php the_content(); ?>
                                    <?php // дополнительные элементы здесь... разметка, классы и т.д. ?>
                                </div>
                                <?php
                            endwhile;
                            wp_reset_postdata();
                        endif;
                    } else { // Если не на странице архива (корзина, оформление заказа и т.д.), выполняем стандартные операции
                        woocommerce_content();
                    }
                ?>

            </main>
        </div>
    </div>
</div>
<?php get_footer(); ?>

Надеюсь, это даст вам понимание, как это работает. Вы также можете посмотреть системную страницу WC в админке внизу. Там будет указано, какие шаблоны использует WC.

30 мая 2018 г. 10:30:12
Комментарии

Я рад, что смог помочь :)

user3135691 user3135691
31 мая 2018 г. 04:46:45