web-dev-qa-db-fra.com

Crochets d'action WooCommerce et modèles prioritaires

J'ai commencé à apprendre à créer des modèles avec WooCommerce et j'avais rencontré un petit problème. Par exemple, dans le fichier php content-single-product.php du plugin Woocommerce, j'ai des chaînes comme ça:

     <?php
        /**
         * woocommerce_single_product_summary hook.
         *
         * @hooked woocommerce_template_single_title - 5
         * @hooked woocommerce_template_single_rating - 10
         * @hooked woocommerce_template_single_price - 10
         * @hooked woocommerce_template_single_excerpt - 20
         * @hooked woocommerce_template_single_add_to_cart - 30
         * @hooked woocommerce_template_single_meta - 40
         * @hooked woocommerce_template_single_sharing - 50
         */
        do_action( 'woocommerce_single_product_summary' );

    ?>

Et par exemple, quand je veux éditer ceci (supprimer certains champs et changer la structure) j'essaie d'effacer la chaîne:

do_action ('woocommerce_single_product_summary');

et après cela, écrivez comme ceci:

<?php
        /**
         * woocommerce_single_product_summary hook.
         *
         * @hooked woocommerce_template_single_title - 5
         * @hooked woocommerce_template_single_rating - 10
         * @hooked woocommerce_template_single_price - 10
         * @hooked woocommerce_template_single_excerpt - 20
         * @hooked woocommerce_template_single_add_to_cart - 30
         * @hooked woocommerce_template_single_meta - 40
         * @hooked woocommerce_template_single_sharing - 50
         */
        //do_action( 'woocommerce_single_product_summary' );
        do_action('woocommerce_template_single_title');
    ?>

Pourriez-vous me dire pourquoi cela ne fonctionne pas?

Quelle est la bonne façon d'éditer comme ça?

Merci

16
Dmitry Shulga

Tout d'abord dans référence ci-dessous , vous trouverez comment remplacer correctement les modèles de woocommerce via un thème (en évitant d'éditer les modèles de plugins).

Dans votre premier extrait de code, comme vous pouvez le voir pour le crochet woocommerce_single_product_summary, vous avez dans l'ordre tous les différents modèles qui sont @hooked dans cet emplacement du crochet avec do_action() WordPress:

do_action( 'woocommerce_single_product_summary' ); 

Donc, dans votre code personnalisé (le 2e extrait de code), vous venez de remplacer le crochet , par le slug de modèle accroché (c'est-à-dire [~ # ~] pas [~ # ~] un crochet) et ne fonctionnera pas [~ # ~] [~ # ~] comme point d'entrée crochet d'action . Voir les références au bas de cette réponse pour la liste des actions et filtres WooCommerce hooks existants

Conséquences: Tous les autres modèles accrochés dans le code de liste commentée (commençant par @ accroché) seront manquants si vous remplacez un crochet par un slug de modèle .


Explications (Comment):

COMMENT - Exemple concret:

Vous souhaitez personnaliser le modèle woocommerce_template_single_title Accroché dans woocommerce_single_product_summary Crochet .

THE HOOK NAME:  woocommerce_single_product_summary hook.

THE TEMPLATES HOOKED (+priority order number)  => corresponding template file name:    
— woocommerce_template_single_title       (5) => single-product/title.php
— woocommerce_template_single_rating     (10) => single-product/rating.php
— woocommerce_template_single_price      (10) => single-product/price.php
— woocommerce_template_single_excerpt    (20) => single-product/short-description.php
— woocommerce_template_single_add_to_cart(30) => single-product/add-to-cart/ (6 files depending on product type)
— woocommerce_template_single_meta       (40) => single-product/review-meta.php
— woocommerce_template_single_sharing -  (50) => single-product/share.php

Ensuite, vous devrez modifier le crochet correspondant woocommerce_single_product_summarytitle.php situé dans single-product (sous-dossier)… Enfin, ce n'est pas si compliqué, une fois que nous comprenons les fichiers de structure de modèle et les crochets dans ces modèles.

Le numéro de priorité , donne l'ordre des modèles accrochés: plus petit en premier, plus grand à la fin…

Voir aussi: Hooks et leur file d'attente d'exécution des fonctions hookées dans Wordpress et Woocommerce


Autres moyens:

Vous pouvez également utiliser tous les crochets de modèles existants pour cibler des modifications ou des personnalisations très spécifiques, avec des fonctions personnalisées situées dans le function.php fichier de votre thème enfant (ou thème) actif ou tout autre plugin.

Exemple utilisant add_action() WordPress:

// define the woocommerce_single_product_summary callback function

function my_custom_action() { 
    echo '<p>This is my custom action function</p>';
};     
add_action( 'woocommerce_single_product_summary', 'my_custom_action', 15 ); 

Cette fonction a un numéro de priorité de 15 et affichera "Ceci est ma fonction d'action personnalisée" = texte de chaîne, entre le product price et le product short description

Arguments optionnels de cette fonction hookée pour ce hook:
- Le slug du modèle (chaîne).
- La priorité (int).


Les références:

43
LoicTheAztec