首页 文章

WooCommerce动作挂钩和覆盖模板

提问于
浏览
11

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

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

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

谢谢

1 回答

  • 33

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

    在您的第一个代码段中,正如您在 woocommerce_single_product_summary hook 中看到的那样,您在 hook location 中使用 do_action() WordPress函数的所有不同模板 @hooked

    do_action( 'woocommerce_single_product_summary' );
    

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

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


    Explanations (How to):

    如何 - 具体示例:您想在woocommerce_single_product_summary hook中自定义woocommerce_template_single_title钩子模板 . HOOK NAME:woocommerce_single_product_summary hook .

    隐藏的模板(优先顺序号)=>相应的模板文件名:

    • 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)=>单品/添加到购物车/(6个文件,具体取决于产品类型)
    • woocommerce_template_single_meta(40)=> single-product / review-meta.php
    • woocommerce_template_single_sharing - (50)=> single-product / share.php
      然后你需要编辑位于单一产品(子文件夹)中的相应的woocommerce_single_product_summary hook title.php ...一旦我们理解了模板结构文件和模板中的钩子,最后就不那么复杂了 . 优先级编号,给出了钩子模板的顺序:首先小,最后大......

    另见:Hooks and their hooked functions execution queue in Wordpress and Woocommerce


    Others ways:

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

    Example using add_action() WordPress function:

    // 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) .


    参考文献:

相关问题