2009-10-23 11 views
8

Estoy tratando de agregar algunas funcionalidades de un complemento que he hecho en un tema de Wordpress, pero estoy teniendo un poco de alegría. La documentación en realidad no me ayuda a resolver el problema así que quizás alguien aquí pueda ayudar.Wordpress: Accediendo a la función de un complemento de un tema

Tengo un complemento en Wordpress que está activado y funciona bien. La clase para este complemento tiene una función llamada generateHtml a la que me gustaría acceder desde Wordpress Theme. Pero sea lo que sea que intente, parece que no puedo acceder al código de mi complemento.

Puede darme un resumen de lo que tengo que hacer para obtener un código de tema que accedan desde un plugin y/o señalar no voy mal en mi código:

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

Porción de la página de cabecera 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'; 
    } 
?> 

Actualmente todo lo que siempre veo es "No" y "función no encontrado". Gracias por cualquier entrada.

Lee,

+0

Como nota al margen, esto debería ser útil para todos los diseñadores de temas de wordpress: http://devideas.blogetery.com/testing-wordpress-themes-easily/ – Sarfraz

Respuesta

6

Para empezar, "imagerotator_show" no es una función; es el nombre de un tipo de acción. Cuando utiliza la función add_action(), Wordpress simplemente agrega su método a la lista de funciones/métodos para llamar cuando se activa una acción en particular. Por lo tanto, su segunda prueba siempre responderá con la 'Función NO encontrada'.

La causa más probable del primer problema es no declarar el método que desea llamar como método público. También estás haciendo que el código sea más difícil de lo necesario.

La mejor práctica que he visto para declarar métodos y el registro de los ganchos de una clase se ve algo como esto:

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

Esto permite a su clase para mantener la totalidad de su aplicación detalles privados. Cuando tenga que llamar my_special_method(), lo hace de la siguiente manera:

$MyFoo->my_special_method(); 
+0

Gracias por la entrada. Le daré una oportunidad –

+0

Tengo curiosidad por saber por qué pasó '$ this' por referencia en la línea 4. Soy nuevo en el uso del formulario OO para los complementos de WordPress. – Andrew

1

@ Andrew ya que no puedo comentar pensé que iba a responder a su pregunta auxiliares. Ver:

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

donde se explica que cuando se define una función de devolución de llamada desde un objeto que tiene que utilizar la función de matriz. Básicamente se trata de obtener la función 'my_hook_implementation' del objeto $ this y usarla como parámetro de devolución de llamada para agregar el gancho de acción. Es porque definiste la función dentro del alcance del objeto y tienes que definir el alcance para que PHP sepa de qué función estás hablando. El alcance es el objeto al que hace referencia la variable $ this.

Cuestiones relacionadas