WooCommerce 操作挂钩和覆盖模板
WooCommerce action hooks and overriding templates
我已经开始学习如何使用 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');
?>
你能告诉我为什么这不起作用吗?
这样编辑的正确方法是什么?
谢谢
首先在下面的 参考资料中 您将找到如何 override properly woocommerce templates via a theme (避免编辑插件模板).
在您的第一个代码片段中,正如您在 woocommerce_single_product_summary
钩子 中看到的那样,您已将所有不同的模板排序为 @hooked
在此 挂钩位置 与 do_action()
WordPress 函数:
do_action( 'woocommerce_single_product_summary' );
因此,在您的自定义代码(第二个代码片段)中,您刚刚将 hook 替换为 hooked template slug (即 NOT 一个钩子) 并且 NOT 将作为入口点 action hook 。请参阅此答案底部的参考资料,了解 list of WooCommerce actions and filters existing hooks…
Consequences: All other hooked templates in the commented list code (beginning with @hooked) will be missing if you replace a hook by a template slug.
对于模板中使用的钩子 看到这个很有帮助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
located in single-product
(sub folder)... 终于没那么复杂了,一旦我们了解了模板结构文件和该模板中的挂钩。
优先级数给出了挂钩模板的顺序:先小后大…
另请参阅:
其他方式:
You can also use all that existing templates hooks to target very specific changes or customizations, with custom functions located in the function.php
file of your active child theme (or theme) or any plugin file too.
使用 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
,将显示
"This is my custom action function"字符串文本,在product price
和product short description
之间…
此钩子的此钩子函数的可选参数:
• 模板 slug (string).
• 优先级 (int).
参考文献:
我已经开始学习如何使用 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');
?>
你能告诉我为什么这不起作用吗?
这样编辑的正确方法是什么?
谢谢
首先在下面的 参考资料中 您将找到如何 override properly woocommerce templates via a theme (避免编辑插件模板).
在您的第一个代码片段中,正如您在 woocommerce_single_product_summary
钩子 中看到的那样,您已将所有不同的模板排序为 @hooked
在此 挂钩位置 与 do_action()
WordPress 函数:
do_action( 'woocommerce_single_product_summary' );
因此,在您的自定义代码(第二个代码片段)中,您刚刚将 hook 替换为 hooked template slug (即 NOT 一个钩子) 并且 NOT 将作为入口点 action hook 。请参阅此答案底部的参考资料,了解 list of WooCommerce actions and filters existing hooks…
Consequences: All other hooked templates in the commented list code (beginning with @hooked) will be missing if you replace a hook by a template slug.
对于模板中使用的钩子 看到这个很有帮助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
located in single-product
(sub folder)... 终于没那么复杂了,一旦我们了解了模板结构文件和该模板中的挂钩。
优先级数给出了挂钩模板的顺序:先小后大…
另请参阅:
其他方式:
You can also use all that existing templates hooks to target very specific changes or customizations, with custom functions located in the
function.php
file of your active child theme (or theme) or any plugin file too.
使用 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
,将显示
"This is my custom action function"字符串文本,在product price
和product short description
之间…
此钩子的此钩子函数的可选参数:
• 模板 slug (string).
• 优先级 (int).
参考文献: