2009-10-23 9 views
8

Sto cercando di aggiungere alcune funzionalità da un plug-in che ho trasformato in un tema Wordpress ma ho poca gioia. La documentazione in realtà non mi aiuta a risolvere il problema, quindi forse qualcuno qui può aiutarti.Wordpress: accesso a una funzione del plug-in da un tema

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 provi, non riesco ad accedere al codice del mio plugin.

possibile darmi una sintesi di ciò che devo fare per ottenere un codice tema Accesso da un plugin e/o segnalare ci sto andando male nel mio codice:

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

Porzione di intestazione pagina 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 tutti che io abbia mai visto è "No" e "funzione non trovato". Grazie per qualsiasi input.

Lee,

+0

Come nota a margine, questo dovrebbe essere utile a tutti i progettisti di temi wordpress: http://devideas.blogetery.com/testing-wordpress-themes-easily/ – Sarfraz

risposta

6

Per cominciare, "imagerotator_show" non è una funzione; è il nome di un tipo di azione. Quando si utilizza la funzione add_action(), Wordpress aggiunge semplicemente il proprio metodo all'elenco delle funzioni/metodi da chiamare quando viene attivata una determinata azione. Quindi il tuo 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 di quanto debba essere.

La pratica migliore che ho visto per dichiarare i metodi e la registrazione di ganci da una classe sembra qualcosa di simile:

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

In questo modo la classe di mantenere tutta la sua implementazione dettagli privati. Quando è necessario chiamare my_special_method(), lo si fa nel modo seguente:

$MyFoo->my_special_method(); 
+0

Grazie per l'input. Lo farò un tentativo –

+0

Sono curioso del perché hai passato '$ this' per riferimento sulla linea 4. Sono nuovo ad usare il modulo OO per i plugin WordPress. – Andrew

1

@andrew dal momento che non posso commentare Ho pensato di rispondere alla tua domanda accessoria. Vedere:

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

dove è spiegato che quando si definisce una funzione di callback da un oggetto è necessario utilizzare la funzione di matrice. In pratica stai dicendo di ottenere la funzione 'my_hook_implementation' dall'oggetto $ this e usarla come parametro di callback sul hook di azione di aggiunta. È perché hai definito la funzione nell'ambito dell'oggetto e devi definire lo scope in modo che PHP sappia di quale funzione stai parlando. L'ambito è l'oggetto a cui fa riferimento la variabile $ this.