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