web-dev-qa-db-fra.com

Remplacer les fonctions enfichables dans un plugin?

WordPress a un fichier appelé pluggable.php qui contient une liste de fonctions que vous pouvez remplacer dans votre plugin.

Le problème auquel je suis confronté (je remplace wp_authenticate) est que pour chaque blog de mon réseau, j'essaie d'activer ce plugin, je reçois:

échec, impossible de re-déclarer wp_authenticate qui a été précédemment déclaré dans pluggable.php

Cela réduit quelque peu la facilité d'utilisation, je dois commenter la fonction dans le fichier du plugin, activer le plugin, annuler la mise en commentaire de la fonction pour que cela fonctionne correctement.

Quelle est la bonne façon de le faire?
On ne peut pas s'attendre à ce que les utilisateurs qui téléchargent le plugin fassent tout cela.

J'utilise une configuration multi-site 3.5 +

1

Enveloppez votre fonction dans if( ! function_exists( 'wp_authenticate' ) ) pour éliminer l’erreur et activer avec succès votre plugin:

if( ! function_exists( 'wp_authenticate' ) ){
    function wp_authenticate(){}
}

Cela est nécessaire car dans le contexte de l'activation d'un plugin, la fonction existe déjà , ce n'est qu'après son activation que votre plugin sera chargé en premier et remplacera l'original. dans pluggable.php. Les plug-ins sont activés dans un sandbox pour capturer les erreurs fatales susceptibles d'empêcher l'activation et la récupération réussie.

5
Milo

Mais si votre plugin a besoin d’une fonction dans pluggables.php (comme wp_safe_redirect), vous devez alors inclure manuellement ce fichier. Sinon, vous obtenez une erreur "appel à une fonction non définie" pour une fonction figurant dans le fichier pluggables.php.

Je l'ai fait de cette façon

    if ( !function_exists('wp_safe_redirect')) {
        require_once (ABSPATH . WPINC . '/pluggable.php');
     }

Remplacez le nom de la fonction (dans ce cas, "wp_safe_redirect") par la fonction dont vous avez besoin.

Cela permettra peut-être à quelqu'un d'économiser les nombreuses heures que j'ai passées à essayer de comprendre cette erreur.

0
Rick Hellewell