WooCommerce 操作挂钩和覆盖模板

WooCommerce action hooks and overriding templates

我已经开始学习如何使用 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' );

    ?>

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

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

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

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

谢谢

首先在下面的 参考资料中 您将找到如何 override properly woocommerce templates via a theme (避免编辑插件模板).

在您的第一个代码片段中,正如您在 woocommerce_single_product_summary 钩子 中看到的那样,您已将所有不同的模板排序为 @hooked 在此 挂钩位置 do_action() WordPress 函数:

do_action( 'woocommerce_single_product_summary' ); 

因此,在您的自定义代码(第二个代码片段)中,您刚刚将 hook 替换为 hooked template slug (即 NOT 一个钩子) 并且 NOT 将作为入口点 action hook 。请参阅此答案底部的参考资料,了解 list of WooCommerce actions and filters existing hooks

Consequences: All other hooked templates in the commented list code (beginning with @hooked) will be missing if you replace a hook by a template slug.

对于模板中使用的钩子 看到这个很有帮助WooCommerce Visual Hook Guide


说明(方法)

操作方法 - 具体示例:

您希望woocommerce_single_product_summary挂钩.

中自定义woocommerce_template_single_title挂钩模板
 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挂钩title.php located in single-product (sub folder)... 终于没那么复杂了,一旦我们了解了模板结构文件和该模板中的挂钩。

优先级数给出了挂钩模板的顺序:先小后大…

另请参阅:


其他方式:

You can also use all that existing templates hooks to target very specific changes or customizations, with custom functions located in the function.php file of your active child theme (or theme) or any plugin file too.

使用 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,将显示 "This is my custom action function"字符串文本,在product priceproduct short description之间

此钩子的此钩子函数的可选参数
• 模板 slug (string).
• 优先级 (int).


参考文献: