Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plugins Wordpress:访问插件';主题的功能_Plugins_Wordpress_Themes - Fatal编程技术网

Plugins Wordpress:访问插件';主题的功能

Plugins Wordpress:访问插件';主题的功能,plugins,wordpress,themes,Plugins,Wordpress,Themes,我正在尝试从我制作的插件中添加一些功能到Wordpress主题中,但我没有什么乐趣。文档并不能真正帮助我解决这个问题,所以这里可能有人可以帮助我 我在Wordpress中有一个插件,它被激活并且工作正常。这个插件的类有一个名为generateHtml的函数,我想从Wordpress主题访问它。但无论我尝试什么,我似乎都无法访问插件的代码 可以给我一个总结,我需要做什么才能从插件中获得一个主题访问代码和/或指出我的代码出了问题: 插件: <?php /** Usual comments he

我正在尝试从我制作的插件中添加一些功能到Wordpress主题中,但我没有什么乐趣。文档并不能真正帮助我解决这个问题,所以这里可能有人可以帮助我

我在Wordpress中有一个插件,它被激活并且工作正常。这个插件的类有一个名为generateHtml的函数,我想从Wordpress主题访问它。但无论我尝试什么,我似乎都无法访问插件的代码

可以给我一个总结,我需要做什么才能从插件中获得一个主题访问代码和/或指出我的代码出了问题:

插件:

<?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'));
}
对于初学者来说,“imagerotator\u show”不是一个函数;它是一种动作的名称。当您使用add_action()函数时,Wordpress只会将您的方法添加到触发特定操作时要调用的函数/方法列表中。因此,您的第二个测试将始终以“未找到函数”进行响应

第一个问题最可能的原因是未能将要调用的方法声明为公共方法。您还使代码变得比需要的更难

我见过的从类声明方法和注册挂钩的最佳实践如下:

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();
这允许类将其所有实现细节保持为私有。当您需要调用my_special_method()时,可以按如下方式执行:

$MyFoo->my_special_method();

@安德鲁,因为我不能发表评论,我想我会回答你的辅助问题。见:


其中解释了当从对象定义回调函数时,必须使用数组函数。它基本上是说从对象$this获取函数'my_hook_implementation',并将其用作add action hook的回调参数。这是因为您在对象的作用域内定义了函数,并且必须定义作用域才能让PHP知道您在谈论什么函数。范围是变量$this引用的对象。

您只需要在主题内使用
do\u action()
函数


如果希望函数
generateHtml
出现在header.php中,只需打开header.php文件并将
粘贴到需要的位置,然后将在那里调用函数。

感谢您的输入。我来试一试我很好奇你为什么在第4行通过引用传递
$this
。我对WordPress插件使用OO表单还不熟悉。作为补充说明,这应该对所有WordPress主题设计师都有帮助:
$MyFoo->my_special_method();