web-dev-qa-db-fra.com

register_activation_hook avec le fichier include

Je tire mes cheveux avec le code suivant, s'il vous plaît aider. J'ai 3 fichiers.

File1.php:

Class File1 {
    public function file1_register() {
        //register some short codes;
    }
    public function file1_unregister() {
        //unregister previous short codes;
    }
}
Class File2 {
    public function file2_register() {
        //create some database tables.
    }
    public function file1_unregister() {
        //delete previous tables.
    }
}
function MyActivation() {
    include_once (dirname(FILE).'/file1.php');
    $File1 = new File1;
    $File1::file1_register();
}
register_activation_hook(FILE, 'MyActivation');

La fonction file1_register refuse tout simplement de fonctionner. Finalement, j'aimerais également exécuter file2_register, mais à ce stade, je ne peux pas voir l'erreur ou le problème lié à mon code, aidez-moi s'il vous plaît.

1
user31108

Vous avez deux options: définissez vos méthodes d’enregistrement en tant que méthodes statiques et évitez d’instancier vos classes, voire appelez la fonction MyActivation ex:

File1.php:

Class File1 {
    static function file1_register() {
        //register some short codes;
    }
    static function file1_unregister() {
        //unregister previous short codes;
    }
}

File2.php:

Class File2 {
    static function file2_register() {
        //create some database tables.
    }
    static function file1_unregister() {
        //delete previous tables.
    }
}

MyPlugin.php:

include_once dirname( __FILE__ ).'/File1.php';
register_activation_hook( __FILE__, array( 'File1', 'file1_register' ) );
include_once dirname( __FILE__ ).'/File2.php';
register_activation_hook( __FILE__, array( 'File2', 'file2_register' ) );

OU change simplement le "Paamayim Nekudotayim" (: :) en l'opérateur de flèche (->) dans votre fonction MyActivation actuelle qui signifie remplacer cette ligne :

$File1::file1_register();

avec ça:

$File1->file1_register();
2
Bainternet