#php #wordpress #plugins
#php #wordpress #Плагины
Вопрос:
Я пишу небольшой плагин.
Я удаляю способ оплаты, если есть отказ от некоторых категорий товаров.
У меня есть какая-то функция и фильтр:
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 по теме папки.
Но если я использую его в своих файлах плагинов — фильтр не работает.
Что я делаю не так?Как заставить это работать?
Для этого я передаю некоторые свои переменные в этот фильтр.
Ответ №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');
}