我正在写一个小插件。
如果有某些类别的商品被删除,我会删除付款方式。
我有一些功能,并过滤:
function filter_gateways($gateways){
$payment_NAME = 'paypal'; // <-- some payment method
$category_ID_1 = '6'; // <-- some category of products
global $woocommerce;
foreach ($woocommerce->cart->cart_contents as $key => $values ) {
// Get the terms, i.e. category list using the ID of the product
$terms = get_the_terms( $values['product_id'], 'product_cat' );
// List of the products category for a match
foreach ($terms as $term) {
// $category_ID_1 is the ID of the category for which i want to remove the payment gateway
if($term->term_id == $category_ID_1){
unset($gateways[$payment_NAME]);
break;
}
break;
}
}
return $gateways;
}
add_filter('woocommerce_available_payment_gateways','filter_gateways');
此过滤器适用于文件夹主题文件functions.php。
但如果我在我的插件文件中使用它 - 过滤器不起作用。
我做错了什么?如何让它发挥作用?
因为,我在这个过滤器中传递了一些变量。
答案 0 :(得分:1)
你的问题是时间问题。可能你的插件在Woocommerce有机会设置过滤器之前加载,因此它无法做任何事情。尝试将过滤器调用包装在操作中以延迟其激活。我认为after_setup_theme
是一个不错的选择,但你可能需要使用另一个。您可以在此处查看所有默认的可用操作https://codex.wordpress.org/Plugin_API/Action_Reference。
add_action( 'after_setup_theme', 'do_filter_gateways' );
function do_filter_gateways()
{
add_filter('woocommerce_available_payment_gateways','filter_gateways');
}