2009-10-23 4 views
8

J'essaie d'ajouter quelques fonctionnalités à partir d'un plugin que j'ai fait dans un thème Wordpress mais j'ai peu de joie. La documentation ne m'aide pas vraiment à résoudre le problème alors peut-être que quelqu'un ici peut vous aider.Wordpress: Accéder à la fonction d'un plugin à partir d'un thème

J'ai un plugin dans Wordpress qui est activé et fonctionne bien. La classe pour ce plugin a une fonction appelée generateHtml à laquelle je voudrais accéder à partir d'un thème Wordpress. Mais peu importe ce que j'essaie, je n'arrive pas à accéder au code de mon plugin.

pouvez soit me donner un résumé de ce que je dois faire pour obtenir un code d'Accès à thème à partir d'un plug-in et/ou signaler là, je me trompe dans mon code:

Plugin:

<?php 
/** Usual comments here **/ 

if (!class_exists("ImageRotator")) { 
    class ImageRotator { 
    private $uploadPath = ''; 
    private $pluginPath = ''; 
    private $options; 

    function __construct() { 
     $this->uploadPath = dirname(__file__).'\\uploads\\'; 
     // add_shortcode('imagerotator', array(&$this, 'generateHtml')); 
    } 

    // Various functions for plugin 

    function generateHtml() { 
     echo '<p>Hello World</p>'; 
    } 
    } 
} 

/** 
* Create instance of image rotator 
*/ 
$imageRotator = new ImageRotator(); 

/** 
* Create actions & filters for Wordpress 
*/ 
if (isset($imageRotator)) { 
    // Actions 
    add_action('admin_menu', array(&$imageRotator, 'createMenu')); 
    add_action('admin_init', array(&$imageRotator, 'registerSettings')); 
    add_action('imagerotator_show', array(&$imageRotator, 'generateHtml')); 
} 

portion de la page d'en-tête du thème:

<?php if (isset($imageRotator)) { 
     $imageRotator->generateHtml(); 
    } else if (isset($ImageRotator)) { 
     print_r($ImageRotator); 
    } else { 
     echo '<p>Nope!</p>'; 
    } 

    if (function_exists("imagerotator_show")) { 
     echo 'Function found'; 
    } else { 
     echo 'Function NOT found'; 
    } 
?> 

Actuellement je ne vois jamais est "Non" et "Fonction not found". Merci pour toute contribution.

Lee,

+0

En note, cela devrait être utile à tous les concepteurs de thèmes wordpress: http://devideas.blogetery.com/testing-wordpress-themes-easily/ – Sarfraz

Répondre

6

Pour commencer, "imagerotator_show" est pas une fonction; c'est le nom d'un type d'action. Lorsque vous utilisez la fonction add_action(), Wordpress ajoute simplement votre méthode à la liste des fonctions/méthodes à appeler lorsqu'une action particulière est déclenchée. Ainsi votre deuxième test répondra toujours avec 'Fonction NON trouvée'.

La cause la plus probable du premier problème est de ne pas déclarer la méthode que vous souhaitez appeler en tant que méthode publique. Vous rendez également le code plus difficile que nécessaire.

La meilleure pratique que je l'ai vu pour la déclaration des méthodes et l'enregistrement des crochets d'une classe ressemble à quelque chose comme ceci:

if (! class_exists('Foo')): 
    class Foo { 
    function __construct() { 
     add_action('hook_name', array(&$this, 'my_hook_implementation')); 
    } 

    function my_hook_implementation() { 
     // does something 
    } 

    public function my_special_method() { 
     // does something else 
    } 
    } 

if (class_exists('Foo')): 
    $MyFoo = new Foo(); 

Cela permet à votre classe de garder toutes sa mise en œuvre détails privés. Lorsque vous avez besoin d'appeler my_special_method(), vous le faites comme suit:

$MyFoo->my_special_method(); 
+0

Merci pour l'entrée. Je vais tenter le coup –

+0

Je suis curieux de savoir pourquoi vous avez passé '$ this' par référence sur la ligne 4. Je suis nouveau à l'aide du formulaire OO pour les plugins WordPress. – Andrew

1

puisque je ne @ Andrew peux commenter, je pensais que je répondrais à votre question accessoire. Voir:

http://net.tutsplus.com/tutorials/wordpress/create-wordpress-plugins-with-oop-techniques/

où il est expliqué que lors de la définition d'une fonction de rappel d'un objet, vous devez utiliser la fonction de tableau. Il s'agit essentiellement de dire d'obtenir la fonction 'my_hook_implementation' de l'objet $ this et de l'utiliser comme paramètre de rappel pour le hook d'action add. C'est parce que vous avez défini la fonction dans la portée de l'objet et vous devez définir la portée pour que PHP sache de quelle fonction vous parlez. La portée étant l'objet référencé par la variable $ this.

Questions connexes