WooCommerce 挂钩和重写模板

问题描述 投票:0回答:1

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

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

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

谢谢

php wordpress templates woocommerce hook-woocommerce
1个回答
89
投票

起始说明:始终尝试使用第一个可用的挂钩,然后如果您没有其他选择,您可以通过子主题覆盖可用模板。

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

在您的第一个代码片段中,正如您在

woocommerce_single_product_summary
钩子中看到的那样,您已将所有不同的模板按顺序排列在该
@hooked
中,并使用do_action()
WordPress功能:
do_action( 'woocommerce_single_product_summary' );

因此,在您的自定义代码(第二个代码片段)中,您刚刚将 
hook

替换为 hook 模板 slug (即 NOT 钩子) 并且将 NOT 作为入口点 动作挂钩。请参阅本答案底部的参考资料,了解 WooCommerce 操作和过滤器列表现有挂钩

后果:

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

有关模板中使用的挂钩

,请参阅此有用的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钩子

title.php
位于
single-product
(子文件夹)
...最后没那么复杂,一旦我们了解了模板结构文件和该模板中的挂钩。

优先级数字

,给出了挂钩模板的顺序:首先较小,最后较大...... 另请参阅:

Wordpress 和 Woocommerce 中的 Hook 及其挂钩函数执行队列

其他方式:

您还可以使用所有现有模板挂钩

来针对非常具体的更改或自定义,自定义函数也位于活动子主题(或主题)的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 price
product short description
之间 此挂钩的此挂钩函数的

可选参数

• 模板段(字符串)
• 优先级(int)

参考资料:

    模板结构和通过主题覆盖模板
  • WooCommerce 挂钩:操作和过滤器
  • WooCommerce 代码 - 操作和过滤器挂钩参考
  • WooCommerce Visual Hook 指南(适用于所有 WooCommerce 页面)
© www.soinside.com 2019 - 2024. All rights reserved.