wc_get_template_part( 'content', 'product' ) | Где находится этот файл?

6 февр. 2020 г., 18:18:00
Просмотры: 46.1K
Голосов: 5

Кажется, я хожу по кругу, пытаясь найти пример / ответ / ресурс по этому вопросу.

Я создал кастомную домашнюю страницу WooCommerce в /theme-name/woocommerce/archive-product.php, где использую этот код для вывода товаров:

$display_count = 9;
$page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$offset = ( $page - 1 ) * $display_count;
$args = array(
    'post_type'         => 'product',
    'post_status'       => 'publish', 
    'posts_per_page'    => $display_count,
    'page'              => $page,
    'offset'            => $offset,
    'orderby'           => 'menu_order',
    'order'             => 'ASC'
); ?>

<div class="homepage-content">

    <div class="product-list-contain">

        <?php
        $loop = new WP_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(); ?>

            <?php
            do_action( 'woocommerce_after_shop_loop' ); ?>

        <?php
        else :

            do_action( 'woocommerce_no_products_found' );

        endif; ?>

        <?php
        wp_reset_postdata(); ?>

    </div>

</div>

На выходе получается ul, заполненный элементами li:

<li class="product type-product post-2048 status-publish first instock product_cat-uncategorized product_tag-aesthetic product_tag-hard product_tag-thermoconductive has-post-thumbnail shipping-taxable product-type-simple">

    <a href="/example/" class="woocommerce-LoopProduct-link woocommerce-loop-product__link">

        <img width="300" height="300" src="/example.jpeg" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail" alt="алмазная фольга" srcset="example.jpeg 300w, example.jpeg 150w, example.jpeg 100w, example.jpeg 80w" sizes="(max-width: 300px) 100vw, 300px">

        <h2 class="woocommerce-loop-product__title">Алмаз</h2>
    </a>

</li>

Где я могу внести изменения в разметку этих li, создаваемых этой строкой:

wc_get_template_part( 'content', 'product' );

Я создал папку дочерней темы WooCommerce и внес изменения в archive-product.php в ней.

Где можно внести изменения в эту часть wc_get_template_part( 'content', 'product' ); цикла товаров WooCommerce?

РЕДАКТИРОВАНИЕ (После ответа в комментариях): Теперь я внутри content-product.php. Но здесь просто больше действий WP, таких как

do_action( 'woocommerce_shop_loop_item_title' );

Теперь мой вопрос: где редактируется этот файл - woocommerce_shop_loop_item_title?

Спасибо всем участникам, Джейсон.

2
Комментарии

/theme-name/woocommerce/content-product.php — это файл, который вам нужен. Если его там нет, вы можете скопировать его из папки /templates в директории плагина WooCommerce.

Andrea Somovigo Andrea Somovigo
6 февр. 2020 г. 18:55:48

Этот файл затем содержит больше ссылок на другие шаблоны. Я хочу иметь возможность работать с переменными, такими как заголовок. И затем изменить его, например, с h2 на h3. Вот такие вещи c:

Jason Is My Name Jason Is My Name
7 февр. 2020 г. 12:20:31
Все ответы на вопрос 1
0
10

Как упоминалось в комментариях, функция wc_get_template_part() пытается найти и загрузить запрошенный файл шаблона.
Эти файлы шаблонов могут находиться либо в подкаталоге /woocommerce/ дочерней темы, либо быть определены в другом стороннем плагине (с помощью фильтра woocommerce_locate_template). Если ни один из этих вариантов не существует, WooCommerce загружает стандартный файл шаблона из каталога /plugins/woocommerce/templates/.

Обновленный вопрос

WooCommerce использует WordPress Plugin API для загрузки содержимого шаблонов. Именно поэтому в файлах шаблонов так много функций do_action(). Вы можете (и, вероятно, должны) использовать эти фильтры действий для управления содержимым. Переопределение всего файла шаблона должно быть последним выбором (в соответствии с лучшими практиками).
В данном случае файл content-product.php содержит следующую строку:

do_action( 'woocommerce_before_shop_loop_item_title' );

Стандартное содержимое для всех шаблонов определено в файле /plugins/woocommerce/includes/wc-template-hooks.php, и для заголовка у нас есть следующее:

add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );

В данном случае функция woocommerce_template_loop_product_title добавляет HTML-разметку и содержимое для секции заголовка и находится в этом файле: /plugins/woocommerce/includes/wc-template-functions.php

function woocommerce_template_loop_product_title() {
    echo '<h2 class="' . esc_attr( apply_filters( 'woocommerce_product_loop_title_classes', 'woocommerce-loop-product__title' ) ) . '">' . get_the_title() . '</h2>';
}

Вы можете либо использовать woocommerce_shop_loop_item_title для добавления дополнительной HTML-разметки в часть заголовка, либо удалить стандартное содержимое и добавить свое собственное:

remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );
add_action( 'woocommerce_shop_loop_item_title', 'tst_your_function', 10 );

function tst_your_function() {
    echo '<h3 class="' . esc_attr( apply_filters( 'woocommerce_product_loop_title_classes', 'woocommerce-loop-product__title' ) ) . '"><strong>' . get_the_title() . '</strong></h3>';
}
7 февр. 2020 г. 17:47:19