wc_get_template_part('content', 'product') | Dove si trova questo file?

6 feb 2020, 18:18:00
Visualizzazioni: 46.1K
Voti: 5

Mi sembra di girare in tondo cercando di trovare un esempio / risposta / risorsa su questo.

Ho creato una homepage personalizzata di WooCommerce in /theme-name/woocommerce/archive-product.php dove uso questo snippet per visualizzare i prodotti:

$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>

L'output è un ul riempito con 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="foglio di diamante" 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">Diamante</h2>
    </a>

</li>

Dove posso fare modifiche al layout di questi li creati da questa riga:

wc_get_template_part( 'content', 'product' );

Ho creato una cartella del tema child WooCommerce e ho fatto le modifiche a archive-product.php al suo interno.

Dove si possono fare modifiche a questa parte wc_get_template_part( 'content', 'product' ); del loop dei prodotti WooCommerce?

MODIFICA (Dopo la risposta al commento): Ora sono dentro content-product.php. Ma questo ha solo altre azioni WP come

do_action( 'woocommerce_shop_loop_item_title' );

Ora la mia domanda sarebbe, dove si modifica questo file - woocommerce_shop_loop_item_title?

Grazie a tutti i contributori, Jason.

2
Commenti

/theme-name/woocommerce/content-product.php è il file che stai cercando. Se non è lì, puoi copiarlo dalla cartella /templates nella directory del plugin woocommerce.

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

Questo file poi ha solo più collegamenti ad altri pezzi del template. Voglio poter avere le variabili come il titolo. Poi poterlo cambiare in un h3 invece dell'attuale h2. Cose così c:

Jason Is My Name Jason Is My Name
7 feb 2020 12:20:31
Tutte le risposte alla domanda 1
0
10

Come menzionato nei commenti, wc_get_template_part() cerca di individuare e caricare il file template richiesto.
Questi file template potrebbero trovarsi sia nella sottodirectory /woocommerce/ di un child-theme, sia essere definiti in un altro plugin di terze parti (con l'aiuto dell'hook filter woocommerce_locate_template). Se nessuno di questi esiste, WC carica il file template predefinito dalla directory /plugins/woocommerce/templates/.

Domanda Aggiornata

WooCommerce utilizza l'API dei Plugin di WordPress per caricare il contenuto dei template. Ecco perché ci sono molte funzioni do_action() nei file template. Puoi (e probabilmente dovresti) usare questi action filter per manipolare il contenuto. Sostituire l'intero file template dovrebbe essere l'ultima scelta (per buone pratiche).
In questo caso il file content-product.php contiene questa riga:

do_action( 'woocommerce_before_shop_loop_item_title' );

Il contenuto predefinito per tutti i template è definito in /plugins/woocommerce/includes/wc-template-hooks.php e per il titolo abbiamo questo:

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

In questo caso, la funzione woocommerce_template_loop_product_title aggiunge i markup HTML e il contenuto alla sezione del titolo e si trova in questo file: /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>';
}

Puoi usare woocommerce_shop_loop_item_title per aggiungere markup HTML aggiuntivi nella parte del titolo, oppure rimuovere il contenuto predefinito e aggiungere il tuo:

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 feb 2020 17:47:19