我的插件和WooCommerce有问题。
所以我有一个带有选项页面的插件,上面有一个自定义复选框。
如果激活此复选框,我想隐藏/删除默认的WooCommerce相关产品容器。
如果我只是添加此代码,我可以删除此容器:
add_action( 'init', 'add_action_function');
function add_action_function(){
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
}
但问题是我需要从另一个内部调用此函数" add_filter"功能
此刻我有这样的事情:
add_filter( 'woocommerce_after_single_product_summary', 'add_filter_function' );
function add_filter_function () {
// Get the plugin option
$active = get_option( 'prfx_active', 'no');
// If option value is "yes", remove the related products container
if ($active = 'yes') {
// I think this add_action call is wrong
add_action( 'init', 'add_action_function');
function add_action_function(){
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
}
}//END if $active = yes
// Do some other stuff here
}//END add_filter_function
但是当我更改admin-settings中的选项时,没有任何变化。所以我认为" init"钩子不在这里。
我无法找到合适的钩子来完成这项工作。当我希望它在插件选项更新时触发时,我必须使用什么钩子?
先谢谢了, 沫
感谢Danijel和他的回答。
我不知道为什么我没想到这一点。 也许这是很多"行动"在那个深夜对我来说;)
我现在放置了" add_action"在" add_filter"之外功能,只需在那里进行条件检查。
这是有效的:
add_action( 'init', 'hide_related');
function hide_related () {
if ( get_option( 'prfx_active', 'no' ) == 'yes' ) {
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
}
};
add_filter( 'woocommerce_after_single_product_summary', 'add_filter_function' );
function add_filter_function () {
...
答案 0 :(得分:2)
我非常肯定在init
过滤器之前触发了WP woocommerce_after_single_product_summary
操作,并且if ( $active = 'yes' { ...
表达式始终会被评估为true
(使用==
) 。试试这个简单的例子:
add_action( 'init', function() {
if ( get_option( 'prfx_active', 'no' ) == 'yes' )
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
});
答案 1 :(得分:1)
尝试将add_action_funciton
移到add_filter_function
add_filter( 'woocommerce_after_single_product_summary', 'add_filter_function' );
function add_action_function(){
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
}
function add_filter_function () {
// Get the plugin option
$active = get_option( 'prfx_active', 'no');
// If option value is "yes", remove the related products container
if ($active = 'yes') {
// I think this add_action call is wrong
add_action( 'init', 'add_action_function');
}//END if $active = yes
// Do some other stuff here
}//END add_filter_function