2009-10-16 7 views
1

J'ai développé un plugin avec le lien Paramètres qui fonctionnait bien dans WordPress 2.7. La version 2.8 apporte des fonctionnalités de sécurité supplémentaires qui provoquent l'affichage du lien Paramètres: Vous n'avez pas les permissions suffisantes pour accéder à cette page.plugin_action_links ne fonctionne pas dans WordPress 2.8+

C'est le crochet de l'API que j'utilise pour créer un lien:

function folksr_plugin_action($links, $file) { 
    if (strstr($file, 'folksr/folksr.php')) { 
     $fl = "<a href=\"options-general.php?page=folksr/settings.php\">Settings</a>"; 
     return array_merge(array($fl), $links); 
    } 
    return $links; 
} 

add_filter('plugin_action_links', 'folksr_plugin_action', 10, 2); 

code source complet est disponible à plugin page.

L'écran Paramètres ne contient aucune logique supplémentaire, seules quelques options et le code HTML sont renvoyés à l'écran. Assez étonnamment, Codex ne renvoie rien pour l'expression de recherche "plugin_action_links". Pouvez-vous donner un exemple ou me diriger vers le code de travail pour le lien Paramètres dans le menu Plugins?

Répondre

3

J'ai trouvé la solution à mon propre problème en analysant les sources de certains plugins aléatoires. Je dois dire - quelle expérience désagréable c'était! Mais bon, voici la solution.

Il s'avère que pour créer un lien Paramètres, il doit être enregistré en premier. Le code suivant est un stub qui fait l'affaire:

class MyPlugin { 

    public function __construct() { 
     add_filter('plugin_action_links', array($this, 'renderPluginMenu'), 10, 2); 
     add_action('admin_menu', array($this, 'setupConfigScreen')); 
    } 

    public function renderPluginMenu() { 
     $thisFile = basename(__FILE__); 
     if (basename($file) == $thisFile) { 
      $l = '<a href="' . admin_url("options-general.php?page=MyPlugin.php") . '">Settings</a>'; 
      array_unshift($links, $l); 
     } 
     return $links; 
    } 

    public function setupConfigScreen() { 
     if (function_exists('add_options_page')) { 
      add_options_page('MyPlugin settings', 'MyPlugin', 8, basename(__FILE__), array($this, 'renderConfigScreen')); 
     } 
    } 

    public function renderConfigScreen() { 
     include dirname(__FILE__) . '/MyPluginSettings.php'; 
    } 

} 
+0

Votre fonction renderPluginMenu manque deux arguments, cela devrait être: 'renderPluginMenu ($ links, $ file) {' –

1

J'ai des liens de menu d'administration fonctionnant sur mes plugins fonctionnant dans 2.8+. Ma fonction ressemble à ceci:

function plugin_action_links($links, $file) { 
    if ($file == plugin_basename(__FILE__)) 
     $links[] = '<a href="' . admin_url('options-general.php?page=lj-longtail-seo/lj-longtail-seo.php') . '">Settings</a>'; 

    return $links; 
    } 

Ma add_filter ligne est la plupart du temps identique. Je pense que la première chose à essayer est d'ajouter l'utilisation de la fonction admin_url.

Espérons que ça aide.

+0

Ajout de admin_url n'a pas aidé. Je soupçonne que cela pourrait avoir quelque chose au fait que mon écran de paramètres est dans un fichier séparé. –