如何在其他地方启动某些功能但不在文件function.php Wordpress

时间:2016-10-03 14:24:42

标签: php wordpress plugins

我正在写一个小插件。

如果有某些类别的商品被删除,我会删除付款方式。

我有一些功能,并过滤:

    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 个答案:

答案 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');
}