Pergunta

Eu estou tentando adicionar alguma funcionalidade de um plugin que eu fiz em um tema Wordpress, mas estou tendo pouca alegria. A documentação realmente não me ajudar a resolver o problema de modo talvez alguém aqui pode ajudar.

Eu tenho um plugin no Wordpress que é ativada e funcionando bem. A classe para este plugin tem uma função chamada generateHtml que eu gostaria de acesso a partir de um Wordpress tema. Mas o que quer que eu tente, não consigo acessar o código do meu plugin.

pode me dar um resumo do que eu preciso fazer para obter um tema acessando código de um plugin e / ou ponto lá fora, estou indo errado no meu 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'));
}

Parcela de página de cabeçalho 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 tudo o que eu vejo é "Não" e "Function não encontrado". Obrigado por qualquer entrada.

Lee,

Foi útil?

Solução

Para começar, "imagerotator_show" não é uma função; é o nome de um tipo de ação. Quando você usa a função add_action (), Wordpress apenas adiciona seu método para a lista de funções / métodos para chamar quando uma determinada ação é acionado. Assim, seu segundo teste sempre responderá com 'função não encontrado'.

A causa mais provável do primeiro problema é não declarar o método que deseja chamar como um método público. Você também está fazendo o código mais difícil do que precisa ser.

A melhor prática que eu vi para declarar métodos e registrar ganchos de uma classe é algo como isto:

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

Isso permite que sua classe para manter todos os seus detalhes de implementação privado. Quando você precisa my_special_method call (), você fazê-lo da seguinte forma:

$MyFoo->my_special_method();

Outras dicas

@ Andrew desde que eu não posso comentar que eu pensei que eu iria responder a sua pergunta complementar. Veja:

http://net.tutsplus.com / tutoriais / wordpress / criar-wordpress-plugins-com-oop-técnicas /

Onde é explicado que ao definir uma função de retorno de um objeto que você tem que usar a função matriz. É basicamente dizendo obter o 'my_hook_implementation' função do objeto $ this e usá-lo como o parâmetro de retorno de chamada para o gancho ação add. É porque você definiu a função dentro do escopo do objeto e você tem que definir o escopo, a fim de PHP para saber o que função que você está falando. O escopo de ser o objeto referido pela variável $ this.

Você só precisa use a função do_action(), dentro do seu tema.

Se você quiser que a função generateHtml a aparecer dentro do seu header.php você só precisa abrir o arquivo header.php e cole <?php do_action('imagerotator_show'); ?> onde quiser e, em seguida, sua função será chamada lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top