删除子主题中的父主题操作

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勾.