32

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

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

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

谢谢

4

1 回答 1

82

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

在您的第一个代码片段中,您可以看到woocommerce_single_product_summaryhook ,您可以使用WordPress 函数@hooked对该钩子位置中的所有不同模板进行排序:do_action()

do_action( 'woocommerce_single_product_summary' ); 

因此,在您的自定义代码(第二个代码片段)中,您刚刚将hook替换为钩子模板 slug (这不是钩子),并且不会用作入口点操作钩子有关 WooCommerce 操作和过滤器现有钩子的列表,请参阅此答案底部的参考资料……</p>

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

对于模板中使用的钩子,请参阅这个有用的WooCommerce 视觉钩子指南


说明(如何)

如何 - 具体示例:

您想在hook中自定义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.phpsingle-product

优先级数字,给出了挂钩模板的顺序:先小,后大……</p >

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


其他方式:

您还可以使用所有现有模板挂钩来定位非常具体的更改或自定义,自定义函数也位于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 显示 “这是我的自定义操作函数”字符串文本。</p> product priceproduct short description

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


参考:

于 2016-08-21T12:34:12.203 回答