删除操作无法删除默认的 WooCommerce 挂钩功能

Edw*_*ein 2 php wordpress tabs product woocommerce

我正在尝试将产品标签从 woocommerce_after_single_product_summary 移动到 woocommerce_before_single_product_summary。从本质上讲,我想用具有图片库的选项卡替换单个产品上的产品图像,但所有其他选项卡都显示在同一个容器中。我在尝试让标签周围的容器像图像周围的容器一样时遇到问题,但让我感到困惑的是如何从 woocommerce_after_single_product_summary 部分中删除标签。我可以从同一部分删除“相关产品”没问题,但我所做的一切都没有改变标签。

这可以很好地删除图像:

remove_action ('woocommerce_before_single_product_summary', 
'woocommerce_show_product_images',20);
Run Code Online (Sandbox Code Playgroud)

这可以很好地在其位置添加选项卡(容器问题除外):

add_action( 'woocommerce_before_single_product_summary', 
'woocommerce_output_product_data_tabs', 20 );
Run Code Online (Sandbox Code Playgroud)

但这似乎永远不会摆脱标签:

remove_action( 'woocommerce_after_single_product_summary', 
'woocommerce_output_product_data_tabs', 10 );
Run Code Online (Sandbox Code Playgroud)

我已经检查过 10 是正确的数字(我发现确实有所不同),但它是正确的。我将 add_action 追踪到 woocommerce/includes/wc-template-hooks.php:

/**
 * After Single Products Summary Div.
 *
 * @see woocommerce_output_product_data_tabs()
 * @see woocommerce_upsell_display()
 * @see woocommerce_output_related_products()
 */
add_action( 'woocommerce_after_single_product_summary', 
'woocommerce_output_product_data_tabs', 10 );
add_action( 'woocommerce_after_single_product_summary', 
'woocommerce_upsell_display', 15 );
add_action( 'woocommerce_after_single_product_summary', 
'woocommerce_output_related_products', 20 );
Run Code Online (Sandbox Code Playgroud)

我可以删除相关产品: remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );

我已经尝试过(在另一个主题中)钩子可能需要“模板重定向”的建议,但这也不起作用。我尝试的是:

    // Trying template redirect
    function esb_product_category_filter_changes()
   {remove_action('woocommerce_after_single_product_summary', 
    'woocommerce_output_product_data_tabs', 10); 
    }
    do_action('template_redirect','esb_product_category_filter_changes');
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我已经搜索了所有可能相关的插件,关闭了一堆,但仍然是相同的行为。我可以将标签放在任何我想要的地方,但我无法摆脱它们。

Loi*_*tec 5

我已经在 Storefront 主题上进行了测试:

remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
Run Code Online (Sandbox Code Playgroud)

它有效。因此,您的问题可能是由于您的主题或某些插件对此进行了一些自定义。

如何检查:
使用以下挂钩函数,您将获得woocommerce_after_single_product_summary挂钩的原始数据输出(所有回调,具有优先级和参数)。通过这种方式,您将能够看到是否woocommerce_output_related_products被吸引以及优先级是什么。

此测试功能将仅在档案和产品页面中为管理员输出数据:

add_action( 'woocommerce_before_main_content', function(){
    // Only for admin user role
    if( ! current_user_can('edit_products')) return;

    global $wp_filter;
    echo '<pre>';
    print_r( $wp_filter['woocommerce_after_single_product_summary'] );
    echo '</pre>';
}, 50 );
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。

现在您可以获得正确的优先级设置remove_action() (并删除此测试代码)。


您也可以尝试以下代码(没有任何保证)

add_action( 'woocommerce_after_single_product_summary', 'removing_product_tabs', 2 );
function removing_product_tabs(){
    remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。