web-dev-qa-db-ja.com

フィルタを使用して既存のプラグイン関数を変更する(プラグインを直接変更しないで)

私は既存のプラグインの中に次の機能があります。

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ファイルでフィルタリングすることによってそれを行うことができますか?

5
fightstarr20

$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;
}
5
Fayaz

はい、$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 );
0
nmr