Question

J'essaie d'ajouter des fonctionnalités à partir d'un plugin que j'ai transformé en 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 pourra vous aider.

J'ai un plugin dans Wordpress qui est activé et qui fonctionne bien. La classe de ce plugin a une fonction appelée generateHtml à laquelle j'aimerais accéder depuis un thème Wordpress. Mais quoi que j'essaye, je n'arrive pas à accéder au code de mon plugin.

Pouvez-vous me donner un résumé de ce que je dois faire pour obtenir un thème accédant au code d'un plugin et / ou signaler que 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'));
}

Partie 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, tout ce que je vois est & "Nope &"; et " Fonction NON trouvée " ;. Merci pour votre contribution.

Lee,

Était-ce utile?

La solution

Pour commencer, " imagerotator_show " n'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 la mention "Fonction non trouvée".

La cause la plus probable du premier problème est l’échec de la déclaration de la méthode que vous voulez appeler en tant que méthode publique. Vous rendez également le code plus difficile qu'il ne le faut.

La meilleure pratique que j'ai observée pour la déclaration de méthodes et l'enregistrement de points d'ancrage dans une classe ressemble à 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();

Ceci permet à votre classe de garder tous ses détails d'implémentation privés. Lorsque vous devez appeler my_special_method (), procédez comme suit:

$MyFoo->my_special_method();

Autres conseils

@andrew, étant donné que je ne peux pas en parler, je pensais pouvoir répondre à votre question complémentaire. 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 à partir d'un objet, vous devez utiliser la fonction tableau. En gros, il s'agit de récupérer la fonction 'my_hook_implementation' à partir de l'objet $ this et de l'utiliser comme paramètre de rappel pour le pointeur add action. C'est parce que vous avez défini la fonction dans la portée de l'objet et que vous devez définir la portée afin que PHP sache de quelle fonction vous parlez. La portée étant l'objet référencé par la variable $ this.

Il vous suffit d'utiliser la do_action() fonction, dans votre thème.

Si vous souhaitez que la fonction generateHtml apparaisse dans votre header.php, il vous suffit d'ouvrir le fichier header.php et de coller <?php do_action('imagerotator_show'); ?> où vous voulez, votre fonction y sera appelée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top