web-dev-qa-db-fra.com

plugin_action_links _ {$ plugin_file} pas dans le fichier de plugin principal

Je développe un plugin et j'ai organisé son code dans des fichiers séparés. Le fichier de fonctions admin se trouve dans un sous-dossier /admin. Dans ce fichier, je mets en file d'attente les scripts et les styles, ajoute des boîtes de méta, etc.

J'aimerais ajouter des liens d'action à l'écran des plugins installés à l'aide du hook plugin_action_links_{$plugin_file}, mais je ne parviens pas à le faire fonctionner.

Comme ce hook est ajouté en dehors du fichier de plugin principal, cela ne fonctionne pas:

add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ),  array( $this, 'add_action_links' ) );

Ma question est, comment puis-je obtenir la plugin_basename() du fichier de plugin principal à partir d'un fichier différent dans un sous-dossier? C'est possible?

Merci d'avance

1
leemon

Vous pouvez simplement stocker le nom de base dans une variable du fichier principal et référencer cette variable dans le fichier admin.

Si vous utilisez des classes, que je détermine à partir de votre exemple de code, vous pouvez simplement créer une propriété statique dans votre classe principale et la référencer dans la classe admin:

class My_Plugin {
    static $basename = null;

    public function __construct {
        $this->basename = plugin_basename(__FILE__);
    }
}

class My_Plugin_Admin {
    public function change_action_links() {
        add_filter( 'plugin_action_links_' . My_Plugin::$basename,  array( $this, 'add_action_links' ) );
    }
}
1
AncientRo