使用Filter修改已有插件功能(不直接修改插件)

时间:2018-08-14 作者:fightstarr20

我在现有插件中具有以下功能:

public static function init() {

    add_filter( \'wcs_view_subscription_actions\', __CLASS__ . \'::add_edit_address_subscription_action\', 10, 2 );
}

public static function add_edit_address_subscription_action( $actions, $subscription ) {

        if ( $subscription->needs_shipping_address() && $subscription->has_status( array( \'active\', \'on-hold\' ) ) ) {
            $actions[\'change_address\'] = array(
                \'url\'  => add_query_arg( array( \'subscription\' => $subscription->get_id() ), wc_get_endpoint_url( \'edit-address\', \'shipping\' ) ),
                \'name\' => __( \'Change Address\', \'woocommerce-subscriptions\' ),
            );
        }

    return $actions;
}
我正在尝试修改此内容,以便可以向$actions 大堆如果不直接修改插件,是否可以通过在functions.php 文件

2 个回复
最合适的回答,由SO网友:Fayaz 整理而成

您只需将相同的筛选器用于a lower or higher priority parameter$actions 大堆这样,您可以创建一个小型自定义插件(或修改主题的functions.php 文件),而无需直接修改现有插件。

例如:如果希望自定义代码在add_edit_address_subscription_action 函数,然后对wcs_view_subscription_actions 滤器

示例代码(将其用作自定义插件的一部分或主题的functions.php 文件):

// original filter uses priority 10, so priority 11 will make sure that this function executes after the original implementation
add_filter( \'wcs_view_subscription_actions\', \'wpse_custom_action_after\', 11, 2 );

function wpse_custom_action_after( $actions, $subscription ) {
    // your custom changes to $actions array HERE
    // this will be executed after add_edit_address_subscription_action function 
    return $actions;
}
另一方面,如果希望自定义代码在add_edit_address_subscription_action 函数,然后使用较小的优先级参数(优先级较高)。

示例代码(将其用作自定义插件的一部分或主题的functions.php 文件):

// original filter uses priority 10, so priority 9 will make sure that this function executes before the original implementation
add_filter( \'wcs_view_subscription_actions\', \'wpse_custom_action_before\', 9, 2 );    
function wpse_custom_action_before( $actions, $subscription ) {
    // your custom changes to $actions array HERE
    // this will be executed before add_edit_address_subscription_action function 
    return $actions;
}

SO网友:nmr

是的,你可以改变$actions 阵列输入functions.php 具有自己的功能。

function your_function_name( $actions, $subscription ) {
    // here you can modify $actions array
    // 
    return $actions;
}

add_filter( \'wcs_view_subscription_actions\', \'your_function_name\', 15, 2 );

结束

相关推荐

apply_filters() function

我用过apply_filters() 从WordPress帖子中检索内容时,如:$content=$query_val->post_content; $content = apply_filters( \'the_content\', $content ); 当我使用apply_filters() 这个apostrophe( \' ) 在我的文本中显示了一些字符。在我移除后apply_filters() 它显示正确。所以请解释清楚!!它在做什么?我已引用此链接Referal_lin