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

时间:2017-01-22 17:46:27

标签: php wordpress woocommerce product hook-woocommerce

我已经从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函数仍在执行。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:4)

您应该尝试使用 '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文件或任何插件文件。

此代码已经过测试并正常运行 (见下文)

  

与您的评论相关的更新:

我已在测试服务器中上传了您的主题 Shophistic Lite ,并创建了一个子主题。

我暂时更改 woocommerce_support.php 文件中主题上的功能,使其显示内容,而不显示任何内容特殊设置需要(并保存)这种方式:

/**
 * 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 );

它显示在商店页面上:

enter image description here

然后我在儿童主题 function.php 文件中添加了上面第一个代码段的代码(与您尝试使用&#39; init&#39相同) ;钩子)它只是完美地运作,删除了&#34; BLA BLA&#34;。

所以你可能想要删除一些不是由这个钩子生成的东西......

答案 1 :(得分:0)

就我而言,我试图从单个产品页面中删除相关产品部分。这不是默认的相关产品部分,它特定于我的主题(因此我不得不从父主题中删除操作)。

使用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钩子。