【问题标题】:Remove action fails to remove default WooCommerce hooked function删除操作无法删除默认的 WooCommerce 挂钩功能
【发布时间】:2018-01-11 20:54:19
【问题描述】:

我正在尝试将产品标签从 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);

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

add_action( 'woocommerce_before_single_product_summary', 
'woocommerce_output_product_data_tabs', 20 );

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

remove_action( 'woocommerce_after_single_product_summary', 
'woocommerce_output_product_data_tabs', 10 );

我检查了 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 );

我可以通过以下方式删除相关产品: 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');

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

【问题讨论】:

    标签: php wordpress woocommerce tabs product


    【解决方案1】:

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

    remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
    

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

    如何检查:
    使用以下挂钩函数,您将获得 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 );
    

    代码进入活动子主题(或活动主题)的 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 );
    }
    

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

    【讨论】:

    • 谢谢!优秀的诊断。我发现数据选项卡被放入 woocommerce_single_product_summary,而不是 woocommerce_after_single_product_summary。我尝试从那里删除它,来自 $wp_filter['woocommerce_single_product_summary'] 的诊断数据显示它的优先级为 41,但这不起作用。我禁用了我正在使用的额外产品选项插件和额外的选项卡插件。还是行不通。然后我尝试了 remove_all_filters('woocommerce_single_product_summary');它还在那里!总主题,下一次调查。
    • 我想这应该是一个简单的后续问题:在我的子主题的functions.php之后可以添加什么钩子?这不应该是行的结尾吗?
    • @JohnJ 谢谢。您可以在问题的末尾添加一个编辑,告诉您如何调试并找出正确的方法……这对其他人也很有用。
    • 我已经发送了一个问题来支持我正在使用的主题,wpexplorer-themes.com 的“Total”主题。似乎他们对产品页面的各个方面都有自己的机制,这超出了这个问题的范围。谢谢大家的帮助。
    • 我终于找到了 wpexplorer-themes.com** 的**“Total”主题的真正分辨率。标签有条件地由 /wp-content/themes/Total/framework/3rd-party/woocommerce/woo-config.php 中的代码移动代码是:// Move tabs // Add right after meta which is set to 40 if ( 'right' == wpex_get_mod( 'woo_product_tabs_position' ) ) { remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 ); add_action( 'woocommerce_single_product_summary', 'woocommerce_output_product_data_tabs', 41 ); }
    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 2016-03-13
    • 2016-08-02
    • 1970-01-01
    • 2015-07-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多