WooCommerce 操作挂钩和覆盖模板

Posted

技术标签:

【中文标题】WooCommerce 操作挂钩和覆盖模板【英文标题】:WooCommerce action hooks and overriding templates 【发布时间】:2016-12-28 02:03:14 【问题描述】:

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

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

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

谢谢

【问题讨论】:

@LoicTheAztec 是的!太感谢了!你真是个乐于助人的人!保重! 谢谢……我也试试。开始使用 WooCommerce/WP 时,钩子和模板并不容易。再见……再次感谢。 【参考方案1】:

首先在下面的参考你会发现如何override properly woocommerce templates via a theme(避免编辑插件模板)

在您的第一个代码 sn-p 中,正如您在 woocommerce_single_product_summary hook 中看到的那样,您可以按顺序排列所有不同的模板,即 @hooked 挂钩位置do_action() WordPress 功能:

do_action( 'woocommerce_single_product_summary' ); 

因此,在您的自定义代码(第二个代码 sn-p)中,您刚刚将 hook 替换为 hooked template slug (即 不是钩子),并且将作为入口点动作钩子。请参阅此答案底部的参考资料以获取 list of WooCommerce actions and filters existing hooks...

后果:如果您用模板 slug 替换挂钩。

对于模板中使用的钩子,请参阅有用的WooCommerce Visual Hook Guide


说明(如何)

如何 - 具体示例:

您希望woocommerce_single_product_summary hook中自定义woocommerce_template_single_title hooked 模板

 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位于single-product > (子文件夹)...终于没那么复杂了,一旦我们了解了模板结构文件和模板中的钩子。

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

另见:Hooks and their hooked functions execution queue in Wordpress and 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 ); 

此函数的优先级编号为 15,并将显示 “这是我的自定义操作函数” 字符串文本,位于 product priceproduct short description 之间……

此钩子的此钩子函数的

可选参数: • 模板段(字符串)。 • 优先级(int)


参考资料:

Template Structure + Overriding Templates via a Theme Hooks: Action and Filter reference LIST of WooCommerce Action and Filter (Hook Reference) Template Structure + Overriding Templates via a Theme WooCommerce Visual Hook Guide: Single Product Page

【讨论】:

谢谢先生。这真的很有帮助! 对此我有一个疑问,如何更改优先订单号? 我试过这个函数 action_woocommerce_single_product_review() add_action( 'woocommerce_single_product_summary', 'action_woocommerce_single_product_review', 1, 0 );但它显示在标题下方 @user9437856 请提出一个新问题,包括您的代码和解释。 帖子中的这个链接需要更新list of WooCommerce actions and filters existing hooks…

以上是关于WooCommerce 操作挂钩和覆盖模板的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce 如何从模板重定向挂钩中排除 myaccount 的子页面(端点)?

以编程方式为特定用户角色禁用税收

WooCommerce 插件模板覆盖

带有账户资金支付挂钩的 WooCommerce 订阅

如何从functions.php中的简码挂钩中排除产品类别ID - WooCommerce

覆盖特定的第三方 Woocommerce 插件模板