在类中添加操作并在主题中使用(_A)

时间:2012-08-24 作者:mat0r

我正在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中最聪明的方式,我愿意接受建议:)

谢谢你的帮助

2 个回复
最合适的回答,由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 );

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $