Domanda

Sto cercando di aggiungere alcune funzionalità da un plugin che ho trasformato in un tema Wordpress, ma ho poca gioia.La documentazione non mi aiuta realmente a risolvere il problema, quindi forse qualcuno qui può aiutarmi.

Ho un plugin in Wordpress che è attivato e funziona bene.La classe per questo plugin ha una funzione chiamata generateHtml a cui vorrei accedere da un tema Wordpress.Ma qualunque cosa provo, non riesco ad accedere al codice del mio plugin.

Puoi darmi un riepilogo di ciò che devo fare per ottenere un codice di accesso al tema da un plugin e/o sottolineare che sto sbagliando nel mio codice:

Collegare:

<?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'));
}

Parte dalla pagina di intestazione del tema:

<?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';
    }
?>

Attualmente tutto ciò che vedo è "No" e "Funzione NON trovata".Grazie per qualsiasi contributo.

Lee,

È stato utile?

Soluzione

Per cominciare, "imagerotator_show" non è una funzione;è il nome di un tipo di azione.Quando usi la funzione add_action(), Wordpress aggiunge semplicemente il tuo metodo all'elenco di funzioni/metodi da chiamare quando viene attivata una particolare azione.Pertanto il secondo test risponderà sempre con "Funzione NON trovata".

La causa più probabile del primo problema è la mancata dichiarazione del metodo che si desidera chiamare come metodo pubblico.Stai anche rendendo il codice più difficile del necessario.

La migliore pratica che ho visto per dichiarare metodi e registrare hook da una classe è simile alla seguente:

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();

Ciò consente alla tua classe di mantenere privati ​​tutti i dettagli di implementazione.Quando devi chiamare my_special_method(), lo fai come segue:

$MyFoo->my_special_method();

Altri suggerimenti

@andrew poiché non posso commentare, ho pensato di rispondere alla tua domanda accessoria. Vedi:

http://net.tutsplus.com / tutorial / wordpress / creare-wordpress-plugins-con-oop-tecniche /

Dove viene spiegato che quando si definisce una funzione di callback da un oggetto è necessario usare la funzione array. In pratica sta dicendo di ottenere la funzione 'my_hook_implementation' dall'oggetto $ this e usarla come parametro callback per l'hook dell'azione add. È perché hai definito la funzione all'interno dell'ambito dell'oggetto e devi definire l'ambito affinché PHP sappia di quale funzione stai parlando. L'ambito è l'oggetto a cui fa riferimento la variabile $ this.

Devi solo usare la funzione do_action(), all'interno del tuo tema.

Se vuoi che la funzione generateHtml appaia nel tuo header.php devi solo aprire il file header.php e incollare <?php do_action('imagerotator_show'); ?> dove vuoi e quindi la tua funzione verrà chiamata lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top