Wordpress 使用钩子和操作来实现可扩展性。插件可能看起来像这样:
class myLightbox
{
function __construct()
{
add_action('wp_footer',array($this,'my_footer'));
}
function my_footer()
{
echo '<script src="http://external-site.com/lightbox.js" ></script>';
}
}
如果我在 Wordpress 之外运行该代码,我希望它add_action
能够工作——即使它只是立即调用该函数。
我读了这些:
第二个与我想做的非常接近,但我认为它不是为使用作为类的一部分的函数而设计的。
我尝试使用call_user_function
,但我不知道如何给它的array($this,'my_footer')
东西:
function add_action($whenToCall,$contextAndFunction=array())
{
call_user_func($contextAndFunction);
}
我也试过这个,但你可以说我的 OOP 不是很好,所以我很挣扎:
function add_action($whenToCall,$contextAndFunction=array())
{
$function = array_pop($contextAndFunction);
$context = array_pop($contextAndFunction);
$context->$function();
}
minitech
使用的建议测试失败:
class myLightbox
{
function __construct()
{
add_action('wp_footer',array($this,'my_footer'));
}
function my_footer()
{
echo '<script src="http://external-site.com/lightbox.js" ></script>';
}
}
function add_action($whenToCall,$contextAndFunction=array())
{
$contextAndFunction();
}
$myLightbox = new myLightbox();
产生:
Fatal error: Function name must be a string