2016-10-03 2 views
1

Я пишу небольшой плагин.Как начать какую-либо функцию в другом месте, но не в файле function.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'); 
}