WooCommerce动作挂钩和覆盖模板

Dmi*_*lga 17 php wordpress templates woocommerce hook-woocommerce

我已经开始学习如何使用WooCommerce创建模板,我遇到了一个小问题.例如,在Woocommerce插件的php文件content-single-product.php中,我有这样的字符串:

     <?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' );

    ?>
Run Code Online (Sandbox Code Playgroud)

例如,当我想编辑它(删除一些字段并更改结构)时,我尝试删除字符串:

do_action('woocommerce_single_product_summary');

之后写这样:

<?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');
    ?>
Run Code Online (Sandbox Code Playgroud)

你能告诉我为什么这不起作用?

这样编辑的正确方法是什么?

谢谢

Loi*_*tec 46

首先在下面参考,您将找到如何通过主题覆盖正确的woocommerce模板 (避免编辑插件模板).

在你的第一个代码片段中,正如你可以看到woocommerce_single_product_summary钩子一样,你可以按顺序使用WordPress函数@hooked在这个钩子位置的所有不同模板do_action():

do_action( 'woocommerce_single_product_summary' ); 
Run Code Online (Sandbox Code Playgroud)

因此,在您的自定义代码(第二个代码片段)中,您刚刚用钩子模板slug (不是钩子)替换了钩子,并且不能用作入口点操作钩子.有关WooCommerce操作列表和筛选现有挂钩,请参阅本答案底部的参考资料...

后果:如果用模板slug替换钩子,则注释列表代码中的所有其他钩子模板(以@hooked开头)都将丢失.


说明(如何):

如何 - 具体例子:

您想要在钩子中自定义woocommerce_template_single_title钩子模板.woocommerce_single_product_summary

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
Run Code Online (Sandbox Code Playgroud)

然后你需要编辑位于(子文件夹)中的相应woocommerce_single_product_summary钩子 ......一旦我们理解了模板结构文件和模板中的钩子,最后就不那么复杂了.title.phpsingle-product

优先数,给出了钩模板的顺序:先在较小的,更大的末...

另请参见:Wordpress和Woocommerce中的钩子及其钩子函数执行队列


其他方式:

您还可以使用所有现有模板挂钩来定位非常具体的更改或自定义,自定义函数也位于function.php活动子主题(或主题)或任何插件文件的文件中.

使用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 ); 
Run Code Online (Sandbox Code Playgroud)

这个函数的优先级序号15 ,并显示 "这是我的自定义操作功能"字符串文本,之间product priceproduct short description...

此挂钩函数的可选参数:
- 模板slug(字符串).
- 优先级(int).


参考文献: