WooCommerce操作钩子和覆盖模板

我已经开始学习如何使用WooCommerce创建模板,我遇到了一个小问题。例如,在woocommerce插件的php文件内容 - 单一产品.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' );

    ?>

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

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

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

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

谢谢


答案 1

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

在你的第一个代码片段中,正如你所看到的woocommerce_single_product_summary钩子,你有顺序,所有不同的模板都在这个钩子位置@hookeddo_action()WordPress函数:

do_action( 'woocommerce_single_product_summary' ); 

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

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

有关模板中使用的钩子,请参阅此有用的WooCommerce视觉钩子指南


说明(如何操作):

如何 - 具体示例:

您想要在钩子中自定义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

然后,您将需要编辑相应的woocommerce_single_product_summary钩子标题.php位于单个产品(子文件夹)中...最后,一旦我们了解了模板结构文件和该模板中的钩子,就不会那么复杂了。

优先级编号给出了挂钩模板的顺序:首先较小,最后较大...

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


其他方式:

您还可以使用所有现有的模板钩子来定位非常具体的更改或自定义,自定义功能位于活动子主题(或主题)的函数.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 ); 

此函数的优先级号为 15,将显示“这是我的自定义操作函数”字符串文本,介于产品价格产品简短描述之间...

此钩子的此挂钩函数的可选参数
• 模板 slug (字符串)
• 优先级(整型)。


引用:


答案 2

推荐