我现在正在使用OOP来创建我的wordpress插件,但是我遇到了Settings API的问题,我认为第三个参数(回调函数)应该ECHO / PRINT从定义的函数返回值,而不是make函数回显输入,查看更多信息:
这是您需要查看的代码段:
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打印了一个返回值并且没有计入一个函数来自行打印它,那么它就会工作,那怎么出来呢?
希望我明白我的想法,最好的问候
答案 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');
引用类成员函数时,不能直接传递回调参数。