wc_get_template_part('content', 'product') | Dove si trova questo file?
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.

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>';
}
