wake-up-neo.com

Ändern Sie die vorhandene Plug-in-Funktion mithilfe des Filters (ohne das Plug-in direkt zu ändern).

Ich habe die folgende Funktion in einem vorhandenen Plugin:

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;
}

Ich versuche, dies zu ändern, damit ich dem $actions-Array etwas hinzufügen kann. Ist dies möglich, ohne das Plugin direkt zu ändern? Kann ich dies durch Filtern in der functions.php-Datei tun?

5
fightstarr20

Sie können einfach denselben Filter mit einem Parameter mit niedrigerer oder höherer Priorität verwenden, um die entsprechenden Änderungen am $actions-Array vorzunehmen. Auf diese Weise können Sie ein kleines benutzerdefiniertes Plugin erstellen (oder die functions.php-Datei des Themas ändern), ohne das vorhandene Plugin direkt ändern zu müssen.

Beispiel: Wenn Ihr benutzerdefinierter Code nach der Funktion add_edit_address_subscription_action ausgeführt werden soll, verwenden Sie ein Argument mit höherer Priorität (niedrigere Priorität) für den Filter wcs_view_subscription_actions.

Beispiel-CODE (verwenden Sie diesen Code als Teil eines benutzerdefinierten Plugins oder in der functions.php-Datei Ihres Themas):

// 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;
}

Wenn Sie andererseits möchten, dass Ihr benutzerdefinierter Code vor der Funktion add_edit_address_subscription_action ausgeführt wird, verwenden Sie ein Argument mit geringerer Priorität (höhere Priorität).

Beispiel-CODE (verwenden Sie diesen Code als Teil eines benutzerdefinierten Plugins oder in der functions.php-Datei Ihres Themas):

// 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

Ja, Sie können das $actions-Array in functions.php mit Ihrer eigenen Funktion ändern.

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