提问者:小点点

WooCommerce操作挂钩和覆盖模板


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

    ?>

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

执行行动(“WOOMerce\u single\u product\u 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钩子,您将所有不同的模板按顺序排列,这些模板都在这个钩子位置与do_action()WordPress函数一起:

do_action( 'woocommerce_single_product_summary' ); 

因此,在您的定制代码(第二个代码段)中,您刚刚用钩子模板slug(不是钩子)替换了钩子,并且不能作为入口点操作钩子使用。有关WooCommerce操作和过滤器现有挂钩的列表,请参阅此答案底部的参考资料…

后果:如果您用模板段塞替换一个钩子,注释列表代码中所有其他钩子模板(以@钩子开头)都将丢失。

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

如何-具体的例子:

您要在woocommerce\u single\u product\u summaryhook中自定义woocommerce\u template\u single\u titlehook模板。

 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位于单品(子文件夹)...最后并不复杂,一旦我们了解了模板结构文件和模板中的钩子。

优先级数字,给出了挂接模板的顺序:先小,后大...

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

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

使用add\u 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(字符串)
•优先级(int)。

参考文献:

  • 模板结构通过主题覆盖模板
  • 钩子:操作和筛选器引用
  • 操作和过滤器列表(挂钩参考)
  • 模板结构通过主题覆盖模板
  • WooCommerce视觉挂钩指南:单一产品页面