我正在Wordpress中编写一个插件,并希望使用do\\u操作功能访问主题中的一些数据库功能。首先,我只包括$fdb->get\\u finaboo\\u footer(1);例如在我的页面上,但他找不到对象。我增加了全球fdb美元;然后它成功了。但我不想在每个php文件上全球化$fdb。所以我想我用do\\u action功能来实现它。问题是我只是在var转储中得到了“null”。
<?php
/**
* Database Functions
*/
class fdb {
public function __construct() {
global $wpdb;
$this->wpdb = &$wpdb;
add_action(\'finaboo_footer\', array ( &$this, \'get_finaboo_footer\'));
}
public function get_finaboo_footer($footer_id) {
$sql = $this->wpdb->prepare( "SELECT * FROM wp_finaboo_content_footer WHERE footer_id = \'$footer_id\' ORDER BY option_id ASC;" );
$results = $this->wpdb->get_results($sql, ARRAY_A );
return($results);
}
}
$fdb = new fdb();
?>
这将是我在主题php文件中的调用:
<?php $footer1 = do_action(\'finaboo_footer\', \'1\'); ?>
不知道为什么会起作用:(
此外,如果这不是Wordpress中最聪明的方式,我愿意接受建议:)
谢谢你的帮助
最合适的回答,由SO网友:fuxia 整理而成
我建议添加一个静态方法来访问插件实例。
示例,摘自this answer:
class My_Plugin
{
private $var = \'foo\';
protected static $instance = NULL;
public static function get_instance()
{
// create an object
NULL === self::$instance and self::$instance = new self;
return self::$instance; // return the object
}
public function __construct()
{
// set up your variables etc.
}
public function foo()
{
return $this->var;
}
}
// create an instance on wp_loaded
add_action( \'wp_loaded\', array( \'My_Plugin\', \'get_instance\' ) );
在主题中,您可以访问
foo()
现在像这样:
print My_Plugin::get_instance()->foo();
<小时>
do_action()
从不归还任何东西。你需要
apply_filters()
:
$footer1 = apply_filters( \'finaboo_footer\', 1 );
SO网友:Jake
我认为您需要在add\\u操作调用中添加一个参数,告诉它函数接受多少个参数(本例中为1):
add_action(\'finaboo_footer\', array ( &$this, \'get_finaboo_footer\'), 1, 1);
add\\u action($tag,$function\\u to\\u add,$priority,
$accepted_args );