wordpress插件:使用OOP设置api

时间:2011-08-16 16:01:27

标签: php oop wordpress

我现在正在使用OOP来创建我的wordpress插件,但是我遇到了Settings API的问题,我认为第三个参数(回调函数)应该ECHO / PRINT从定义的函数返回值,而不是make函数回显输入,查看更多信息:enter image description here

这是您需要查看的代码段:

public function another_function(){
    add_settings_field('test', 'test', $this->get_input('test', 'test', 'text'), 'test_settings', 'test_settings');
}

public function get_input($id, $name, $type, $size=40, $droparray = NULL){
    $options = get_option('brutal_settings_group');
    switch ($type) {
        case 'text':
            echo '<input id="'. $id .'" name="test['. $name .']" size="'. $size .'" type="text" value="'. $options[$name] .'" />';
            break;
    }
}

由于get_input函数中的回显,字段会打印在每个页面的所有内容之上,但是如果wordpress函数add_settings_field打印了一个返回值并且没有计入一个函数来自行打印它,那么它就会工作,那怎么出来呢?

希望我明白我的想法,最好的问候

3 个答案:

答案 0 :(得分:4)

add_settings_field预计第三个参数是callback,但实际上是在调用get_input方法。要使用get_input方法作为回调,您需要传递包含对象和方法名称array($this, 'get_input')的数组。

在执行此操作时,您无法将参数直接传递给方法,但我认为如果您将值数组作为第六个参数传递给add_settings_field调用,Wordpress将依次将此数组传递给您的回调什么时候叫它。因此,您的add_settings_field电话会看起来像这样:

add_settings_field(
    'test', 
    'test', 
    array($this, 'get_input'),
    'test_settings',
    'test_settings',
    array(
        'id' => 'test',
        'name' => 'test',
        'type' => 'text'
    )
);

然后,您需要修改回调函数以从数组中提取值,如下所示。

public function get_input($args) {
    $size = 40;
    $droparray = NULL;
    extract($args);
    …

答案 1 :(得分:1)

将作为返回值的值提供给包含所有页面内容的变量。这个页面内容最后是用php回显的,因此,如果你做的最后一件事是回应它,那么任何被回显的东西都会出现在它上面或者所有内容之下。

答案 2 :(得分:1)

由于您没有成功将回调传递给WordPress函数,因此您将获得结果。它试图解析'$ this-&gt; get_input()'将结果传递给'add_settings_field'。

为了将类成员函数作为回调传递,您需要传递一个数组,其中$ this作为引用,函数名称作为字符串。

add_settings_field('test', 'test', $this->get_input('test', 'test', 'text'), 'test_settings', 'test_settings');

会变成

add_settings_field('test', 'test', array(&$this, 'get_input'), 'test_settings', 'test_settings');

引用类成员函数时,不能直接传递回调参数。