删除子主题中的父主题操作
Remove parent theme action in child theme
我已经从 Shophistic Lite
主题创建了子主题。
我想删除子主题中的一个动作。
// wp-content\plugins\woocommerce\templates\content-product.php
...
/**
* woocommerce_shop_loop_item_title hook.
*
* @hooked woocommerce_template_loop_product_title - 10
*/
do_action( 'woocommerce_shop_loop_item_title' );
/**
* woocommerce_after_shop_loop_item_title hook.
*
* @hooked woocommerce_template_loop_rating - 5
* @hooked woocommerce_template_loop_price - 10
*/
do_action( 'woocommerce_after_shop_loop_item_title' );
/**
* woocommerce_after_shop_loop_item hook.
*
* @hooked woocommerce_template_loop_product_link_close - 5
* @hooked woocommerce_template_loop_add_to_cart - 10
*/
do_action( 'woocommerce_after_shop_loop_item' );
...
// \wp-content\themes\shophistic-lite\framework\functions\woocommerce_support.php
...
/**
* Adds the Switch View buttons
*/
function shophistic_lite_show_attribute() {
...
}
add_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
...
// \wp-content\themes\shophistic-lite-child\functions.php
...
function remove_functions() {
remove_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
}
add_action('woocommerce_after_shop_loop_item' , 'remove_functions' );
...
我通过这篇文章做到了:https://code.tutsplus.com/tutorials/a-guide-to-overriding-parent-theme-functions-in-your-child-theme--cms-22623
但这对我不起作用。 shophistic_lite_show_attribute
函数仍在执行。
请帮我解决这个问题。
您应该尝试使用 'init'
挂钩来执行删除操作,以便在初始化时将其删除:
function child_custom_actions() {
remove_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
}
add_action( 'init' , 'child_custom_actions' );
此代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
此代码已经过测试并且有效 (见下文).
Update related to your comment:
我已经在测试服务器上传了你的主题Shophistic Lite
,创建了一个子主题。
woocommerce_support.php
[=47=中主旋律中的功能临时改了 ] 文件,让它显示一些东西,没有任何特殊设置需要(并保存)这样:
/**
* Adds the Switch View buttons
*/
function shophistic_lite_show_attribute() {
echo '<p>BLA BLA</p>';
}
add_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
并且它在商店页面上显示为:
然后我在子主题 的 function.php
文件中添加了上面第一个片段的代码(与您尝试过的相同'init' 挂钩),它完美地工作,删除那个 "BLA BLA"。
所以您可能正在尝试删除不是由该挂钩生成的其他内容……
就我而言,我试图从单个产品页面中删除相关产品部分。它不是默认的相关产品部分,它特定于我的主题(因此我不得不从父主题中删除操作)。
使用 wp_loaded
钩子工作正常,而上面提到的 init
钩子不起作用。
最后,我的子主题中的这段代码运行良好:
function child_custom_actions() {
remove_action( 'woocommerce_after_single_product', 'woocommerce_output_related_products', 20 );
}
add_action( 'wp_loaded' , 'child_custom_actions' );
警告: woocommerce_after_single_product
钩子不是 woocommerce 相关产品部分的默认钩子,它特定于我的主题,您可能需要使用 woocommerce_after_single_product_summary
勾.
我已经从 Shophistic Lite
主题创建了子主题。
我想删除子主题中的一个动作。
// wp-content\plugins\woocommerce\templates\content-product.php ...
/**
* woocommerce_shop_loop_item_title hook.
*
* @hooked woocommerce_template_loop_product_title - 10
*/
do_action( 'woocommerce_shop_loop_item_title' );
/**
* woocommerce_after_shop_loop_item_title hook.
*
* @hooked woocommerce_template_loop_rating - 5
* @hooked woocommerce_template_loop_price - 10
*/
do_action( 'woocommerce_after_shop_loop_item_title' );
/**
* woocommerce_after_shop_loop_item hook.
*
* @hooked woocommerce_template_loop_product_link_close - 5
* @hooked woocommerce_template_loop_add_to_cart - 10
*/
do_action( 'woocommerce_after_shop_loop_item' );
...
// \wp-content\themes\shophistic-lite\framework\functions\woocommerce_support.php
...
/**
* Adds the Switch View buttons
*/
function shophistic_lite_show_attribute() {
...
}
add_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
...
// \wp-content\themes\shophistic-lite-child\functions.php
...
function remove_functions() {
remove_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
}
add_action('woocommerce_after_shop_loop_item' , 'remove_functions' );
...
我通过这篇文章做到了:https://code.tutsplus.com/tutorials/a-guide-to-overriding-parent-theme-functions-in-your-child-theme--cms-22623
但这对我不起作用。 shophistic_lite_show_attribute
函数仍在执行。
请帮我解决这个问题。
您应该尝试使用 'init'
挂钩来执行删除操作,以便在初始化时将其删除:
function child_custom_actions() {
remove_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
}
add_action( 'init' , 'child_custom_actions' );
此代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
此代码已经过测试并且有效 (见下文).
Update related to your comment:
我已经在测试服务器上传了你的主题Shophistic Lite
,创建了一个子主题。
woocommerce_support.php
[=47=中主旋律中的功能临时改了 ] 文件,让它显示一些东西,没有任何特殊设置需要(并保存)这样:
/**
* Adds the Switch View buttons
*/
function shophistic_lite_show_attribute() {
echo '<p>BLA BLA</p>';
}
add_action( 'woocommerce_after_shop_loop_item_title', 'shophistic_lite_show_attribute', 15 );
并且它在商店页面上显示为:
然后我在子主题 的 function.php
文件中添加了上面第一个片段的代码(与您尝试过的相同'init' 挂钩),它完美地工作,删除那个 "BLA BLA"。
所以您可能正在尝试删除不是由该挂钩生成的其他内容……
就我而言,我试图从单个产品页面中删除相关产品部分。它不是默认的相关产品部分,它特定于我的主题(因此我不得不从父主题中删除操作)。
使用 wp_loaded
钩子工作正常,而上面提到的 init
钩子不起作用。
最后,我的子主题中的这段代码运行良好:
function child_custom_actions() {
remove_action( 'woocommerce_after_single_product', 'woocommerce_output_related_products', 20 );
}
add_action( 'wp_loaded' , 'child_custom_actions' );
警告: woocommerce_after_single_product
钩子不是 woocommerce 相关产品部分的默认钩子,它特定于我的主题,您可能需要使用 woocommerce_after_single_product_summary
勾.