web-dev-qa-db-fra.com

En essayant de remplacer la fonction du thème par plugin, mon filtre s'exécute deux fois, je veux qu'il ne s'exécute qu'une seule fois

Voici la fonction du plugin:

function dokan_get_admin_commission_by($order, $seller_id)
{
    $saved_admin_fee = get_post_meta(dokan_get_prop($order, 'id') , '_dokan_admin_fee', true);
    if ($saved_admin_fee != '')
    {
        return apply_filters('dokan_order_admin_commission', $saved_admin_fee, $order);
    }
    $admin_commission = 10;
    return apply_filters('dokan_order_admin_commission', $admin_commission, $order);
}

J'ai écrasé cette fonction à partir du fichier functions.php du thème:

function dokan_get_admin_commission_by_overwrite( $admin_commission, $order) {
    return $admin_commission+1;
}
add_filter( 'dokan_order_admin_commission', 'dokan_get_admin_commission_by_overwrite', 10, 2 );

Le filtre de thème fonctionne bien, mais il s'exécute deux fois. Donc, il incrémente la valeur deux fois. Il s'exécute deux fois parce que, dans le plug-in, la fonction dokan_get_admin_commission_by est appelée deux fois. Je ne sais pas comment l'exécuter une seule fois avec le fichier functions.php du thème.

1
Debuggin Code

Cause probable du double incrément:

La fonction du plugin dokan_get_admin_commission_by() exécute apply_filters('dokan_order_admin_commission' ... ) deux fois, mais utilise return à chaque fois, de sorte que le filtre est pas s'exécute deux fois.

La cause probable de l’incrément double est que, dans le code suivant:

if ($saved_admin_fee != '')
{
    return apply_filters('dokan_order_admin_commission', $saved_admin_fee, $order);
}

le plugin donne votre filtre de thème $saved_admin_fee comme $admin_commission, d'autre part, dans le code suivant:

$admin_commission = 10;
return apply_filters('dokan_order_admin_commission', $admin_commission, $order);

le plugin est donne toujours 10 en tant que $admin_commission valeur au filtre de thème.

Ainsi, vous devrez peut-être gérer cette même condition dans votre fonction de thème.

De plus, si le filtre s'exécute deux fois, il doit alors provenir d'un autre endroit. Dans ce cas, vous devrez supprimer le filtre une fois la fonction thème exécutée.

Exemple de correctif CODE pour functions.php:

Votre thème final CODE sera donc le suivant:

function dokan_get_admin_commission_by_overwrite( $admin_commission, $order) {
    remove_filter( 'dokan_order_admin_commission', 'dokan_get_admin_commission_by_overwrite', 10, 2 );
    if ( $admin_commission === 10 ) {
        return $admin_commission + 1;
    }

    return $admin_commission;
}
add_filter( 'dokan_order_admin_commission', 'dokan_get_admin_commission_by_overwrite', 10, 2 );

Maintenant, cette fonction ne devrait être exécutée qu’une seule fois et être incrémentée avec la condition vérifiée.

Remarque: si vous êtes toujours confus ou si vous avez besoin d'une assistance supplémentaire, je vous suggère de contacter l'équipe de support de ce plugin.

1
Fayaz