wc_get_template_part( 'content', 'product' ) | Unde se află acest fișier?

6 feb. 2020, 18:18:00
Vizualizări: 46.1K
Voturi: 5

Se pare că mă învârt în cerc încercând să găsesc un exemplu / răspuns / resursă pentru aceasta.

Am construit o pagină de start personalizată WooCommerce în /theme-name/woocommerce/archive-product.php unde folosesc acest fragment pentru a afișa produsele:

$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() ) :

            // execută acțiunea înainte de bucla magazinului

            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>

Rezultatul este un ul completat cu li-uri:

<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="folie diamant" 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">Diamant</h2>
    </a>

</li>

Unde pot face modificări la aspectul acestor li-uri create de această linie:

wc_get_template_part( 'content', 'product' );

Am creat un folder WooCommerce pentru tema copil și am făcut modificările la archive-product.php acolo.

Unde pot face modificări la această parte wc_get_template_part( 'content', 'product' ); din bucla de produse WooCommerce?

EDITARE (După răspunsul din comentarii): Acum sunt în content-product.php. Dar acesta are mai multe acțiuni WP precum

do_action( 'woocommerce_shop_loop_item_title' );

Acum întrebarea mea ar fi, unde se editează acest fișier - woocommerce_shop_loop_item_title?

Mulțumesc tuturor contributorilor, Jason.

2
Comentarii

/theme-name/woocommerce/content-product.php este fișierul pe care îl cauți. Dacă nu este acolo, îl poți copia din folderul /templates din directorul pluginului WooCommerce.

Andrea Somovigo Andrea Somovigo
6 feb. 2020 18:55:48

Acest fișier apoi are mai multe legături către alte părți de șabloane. Vreau să pot avea acces la variabile precum titlul. Apoi să îl pot schimba într-un h3 în loc de h2-ul curent. Lucruri de genul acesta c:

Jason Is My Name Jason Is My Name
7 feb. 2020 12:20:31
Toate răspunsurile la întrebare 1
0
10

După cum s-a menționat în comentarii, wc_get_template_part() încearcă să localizeze și să încarce fișierul șablon solicitat.
Aceste fișiere șablon pot fi fie în subdirectorul /woocommerce/ al unui child-theme, fie definite într-un alt plugin terță parte (cu ajutorul cârligului de filtrare woocommerce_locate_template). Dacă niciunul dintre acestea nu există, WooCommerce încarcă fișierul șablon implicit din directorul /plugins/woocommerce/templates/.

Întrebare Actualizată

WooCommerce utilizează WordPress Plugin API pentru a încărca conținutul șablonului. De aceea există numeroase funcții do_action() în fișierele șablon. Puteți (și probabil ar trebui) să folosiți aceste filtre de acțiune pentru a manipula conținutul. Suprascrierea întregului fișier șablon ar trebui să fie ultima alegere (din motive de bune practici).
În acest caz, fișierul content-product.php conține această linie:

do_action( 'woocommerce_before_shop_loop_item_title' );

Conținutul implicit pentru toate șabloanele este definit în /plugins/woocommerce/includes/wc-template-hooks.php, iar pentru titlu avem următoarele:

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

În acest caz, funcția woocommerce_template_loop_product_title adaugă markup-urile HTML și conținutul în secțiunea titlului și se află în acest fișier: /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>';
}

Puteți fie să utilizați woocommerce_shop_loop_item_title pentru a adăuga markup-uri HTML suplimentare în partea de titlu, fie să eliminați conținutul implicit și să adăugați propriul:

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() . '</string></h3>';
}
7 feb. 2020 17:47:19