wordpress WooCommerce动作钩子和覆盖模板

wr98u20j  于 2023-06-29  发布在  WordPress
关注(0)|答案(1)|浏览(168)

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

你能告诉我为什么这不起作用吗?
怎样才是正确的编辑方式呢?
谢谢

atmip9wb

atmip9wb1#

首先在参考下面你会发现如何override properly woocommerce templates via a theme(避免编辑插件模板).
在你的第一段代码中,你可以看到**woocommerce_single_product_summary hook**,你已经在这个hook location中使用**do_action()WordPress函数按顺序排列了所有不同的模板@hooked**:

do_action( 'woocommerce_single_product_summary' );

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

后果:如果用模板slug替换hook,注解列表代码中其他所有hooked模板(以 @hooked 开头)都将丢失
有关模板中使用的钩子,请参阅此有用的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位于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**之间显示 “This is my custom action function” 字符串文本...

此钩子函数的可选参数

·模板slug (string)
·优先级 (int)
参考文献:

相关问题