Php wordpress插件:带OOP的设置api

Php wordpress插件:带OOP的设置api,php,oop,wordpress,Php,Oop,Wordpress,我现在使用OOP创建我的wordpress插件,但是设置API有问题,我认为第三个参数(回调函数)应该回显/打印定义函数的返回值,而不是让函数回显输入,有关更多信息,请参见此: 这是您需要查看的代码片段: public function another_function(){ add_settings_field('test', 'test', $this->get_input('test', 'test', 'text'), 'test_settings', 'test_sett

我现在使用OOP创建我的wordpress插件,但是设置API有问题,我认为第三个参数(回调函数)应该回显/打印定义函数的返回值,而不是让函数回显输入,有关更多信息,请参见此:

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

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;
    }
}
公共函数另一个函数(){
添加_设置_字段('test','test',$this->获取_输入('test','test','text'),'test_设置','test_设置');
}
公共函数get_input($id、$name、$type、$size=40、$droparray=NULL){
$options=get_option(“设置组”);
交换机($类型){
案例“文本”:
回声';
打破
}
}
由于get_input函数中的echo,每个页面中的字段都会打印在所有内容之上,但是如果wordpress函数add_settings_字段打印了一个返回值,而不指望函数自己打印它,那么它会工作,那么如何解决这个问题呢


希望我的想法很清楚,请向

表示最良好的祝愿作为回报的值被输入到一个包含所有页面内容的变量中。此页面内容最后从php中回显,因此,如果您最后做的是回显,则回显的任何内容都将显示在其上方或下方。作为返回值的值将输入到包含所有页面内容的变量中。此页面内容最后从php中回显,因此,如果您最后做的是回显,则回显的任何内容都将显示在其上方或所有内容下方。

希望它的第三个参数是a,但实际上您正在调用
get\u input
方法。为了使用
get\u input
方法作为回调,您需要传递一个包含对象和方法名称
array($this'get\u input')
的数组

执行此操作时,不能将参数直接传递给方法,但我认为如果将一个值数组作为第六个参数传递给
add\u settings\u字段
call Wordpress,则调用此数组时,它会将此数组传递给回调。因此,您的
add\u settings\u字段
调用如下所示:

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);
    …
期望它的第三个参数是a,但实际上您正在调用
get\u input
方法。为了使用
get\u input
方法作为回调,您需要传递一个包含对象和方法名称
array($this'get\u input')
的数组

执行此操作时,不能将参数直接传递给方法,但我认为如果将一个值数组作为第六个参数传递给
add\u settings\u字段
call Wordpress,则调用此数组时,它会将此数组传递给回调。因此,您的
add\u settings\u字段
调用如下所示:

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);
    …

由于您没有成功地将回调传递给WordPress函数,因此您得到的结果是这样的。它正在尝试解析“$this->get\u input()”以将结果传递到“add\u settings\u 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');

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

由于没有成功地将回调传递给WordPress函数,因此得到的结果是这样的。它正在尝试解析“$this->get\u input()”以将结果传递到“add\u settings\u 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');


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

是的,这正是我想说的,意思是不能将类函数用作回调函数来添加\u设置\u字段函数,至少我知道,但如何实现这一点呢?我的意思是如何使用类函数作为回调函数…您可以获取内容并返回值。这个函数需要在模板中调用。您可以获取内容并返回值。这个函数需要用do action函数调用。你可以在这里阅读所有关于钩子和wordpress API的内容,我不确定你在说什么,获取什么内容并返回什么值??是的,这就是我想说的,意思是你不能使用类函数作为回调函数来添加设置字段函数,至少我知道,但如何实现这一点呢?我的意思是如何使用类函数作为回调函数…您可以获取内容并返回值。这个函数需要在模板中调用。您可以获取内容并返回值。这个函数需要用do action函数调用。你可以在这里阅读关于钩子和wordpress API的所有内容,我不确定你在说什么,获取什么内容并返回什么值??附加的赏金,真的需要一个解决方案作为填充赏金,真的需要一个解决方案作为对参数如何传递到回调的更新,OP可能需要删除方法参数并使用它。如果使用PHP5.3,匿名函数可能更容易实现implementation@Phil好的,我在查看Wordpress源代码后更新了答案。它不起作用,参数没有传递到get_输入函数,即使使用func_get_args()好的,我做了一些测试,你的方法根本不起作用,没有添加参数,让我们从简单的事情开始:回声“测试”;在get_输入中