8768 sujets

Développement web côté serveur, CMS

Bonsoir,

Je sais que ma question est spécifique à wordpress, mais si l'un d'entre vous avait la réponse...

Au préalable, désolé pour la longueur du post.

Je développe un thème wordpress en utilisant woocommerce. Je souhaite surcharger la page listant les produits, en l'occurrence content-product.php.
Voulant comprendre les hook, j'ai tenté d'utiliser cette technique mais je n'y arrive pas :
content-product.php contient ceci :

<?php
    /**
     * woocommerce_before_shop_loop_item hook.
     *
     * @hooked woocommerce_template_loop_product_link_open - 10
     */
    do_action( 'woocommerce_before_shop_loop_item' );

    /**
     * woocommerce_before_shop_loop_item_title hook.
     *
     * @hooked woocommerce_show_product_loop_sale_flash - 10
     * @hooked woocommerce_template_loop_product_thumbnail - 10
     */
    do_action( 'woocommerce_before_shop_loop_item_title' );

    /**
     * woocommerce_shop_loop_item_title hook.
     *
     * @hooked woocommerce_template_loop_product_title - 10
     */
    
    do_action( 'woocommerce_shop_loop_item_title' );

    /**
     * woocommerce_after_shop_loop_item_title hook.
     *
     * @hooked woocommerce_template_loop_rating - 5
     * @hooked woocommerce_template_loop_price - 10
     */
    do_action( 'woocommerce_after_shop_loop_item_title' );

    /**
     * woocommerce_after_shop_loop_item hook.
     *
     * @hooked woocommerce_template_loop_product_link_close - 5
     * @hooked woocommerce_template_loop_add_to_cart - 10
     */
    do_action( 'woocommerce_after_shop_loop_item' );
    ?>

Le code génère une fiche produit où photo, titre et le prix sont inclus dans un seul lien. Je voulais avant d'y insérer mes propres champs perso redéfinir un lien pour chaque donnée : un lien autour de l'image, un autour du titre, et pas sur le prix.
J'ai donc fait ceci :

add_action('init','aff_prod_liste');
function aff_prod_liste() {
    // On ferme le permalien après la photo
    add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 5 ); 
    // On redémarre le permalien avant le titre
    add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 10 ); 
    // On ferme le permalien après le titre 
    add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 5 ); 
    // On supprime la fermeture initiale du permalien
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
}

Mais le résultat obtenu n'est pas celui souhaité :

<a href="monproduit">
<img width="340" height="198" src="monimage" />
</a>
<h3>montitre</h3><a href="monproduit">
</a>
<span class="price"><span class="amount">1000,00&euro;</span></span>

(j'ai épuré l'affichage des données là)

Au début, je n'avais pas inclus le code dans une fonction : il était directement dans mon mu-plugin :


// On ferme le permalien après la photo
    add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 5 ); 
    // On redémarre le permalien avant le titre
    add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 10 ); 
    // On ferme le permalien après le titre 
    add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 5 ); 
    // On supprime la fermeture initiale du permalien
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );


Et cela donnait un résultat différent, mais toujours pas bon puisque je n'arrivais vraisemblablement pas à faire le dernier remove_action et à supprimer la dernière fermeture du lien :


<a href="monproduit">
<img width="340" height="198" src="monimage" />
</a>
<a href="monproduit">
<h3>montitre</h3>
</a>

<span class="price"><span class="amount">1000,00&euro;</span></span>
</a>


Qu'est ce que je n'ai pas compris dans les hook ?