我正在尝试在插件中创建一个主题选项页面。我已将整个代码粘贴到下面。但它给出了一个错误:
call_user_func_array() expects parameter 1 to be a valid callback, array must have exactly two members
class KD_Options {
public function __construct(){
$this->register_settings_and_fields();
}
public function add_menu_page(){
add_options_page(\'Theme Options\',\'Theme Options\',\'administrator\',__FILE__, array(\'KD_Options\'),\'display_options_page\');
}
public function display_options_page(){
?>
<div class="wrap">
<h2>My theme Options</h2>
<form method="post" action="options.php" enctype="multipart/form-data">
<?php settings_fields(\'kd_plugin_options\');//includes all the hidden fields for security ?>
<?php do_settings_sections(__FILE__); ?>
</form>
</div>
<?php
}
public function register_settings_and_fields(){
register_setting(\'kd_plugin_options\',\'kd_plugin_options\');//3rd parameter = optional cb
//get_option(\'kd_plugin_options\');
add_settings_section(\'kd_main_section\', \'Main Settings\', array($this, \'kd_main_section_cb\'), __FILE__);//id, title of section, cb, which page?
add_settings_field(\'kd_banner_heading\',\'Banner Heading\', array($this, \'kd_banner_heading_setting\'), __FILE__, \'kd_main_section\');
add_settings_field(\'kd_logo\',\'Your Logo: \', array($this, \'kd_logo_setting\'), __FILE__, \'kd_main_section\');
}
/*
*
* Inputs
*
*/
// Banner Heading
public function kd_banner_heading_setting() {
echo \'<input>\';
}
// Logo
public function kd_logo_setting() {
echo \'<input type="file">\';
}
//Function for validation and sanitization
public function kd_main_section_cb(){
//optional
}
}
add_action(\'admin_menu\', function(){
KD_Options::add_menu_page();
});
add_action(\'admin_init\', function(){
new KD_Options();
});
我想这有点问题
add_settings_section
其中
kd_main_section_cb
没有接到电话什么的。我在调试脚本时遇到了一些问题。所以,如果有人能帮助我,让我知道问题所在。
最合适的回答,由SO网友:Andy Macaulay-Brook 整理而成
这里的参数相当错误:
add_options_page(
\'Theme Options\',
\'Theme Options\',
\'administrator\',
__FILE__,
array(\'KD_Options\'),
\'display_options_page\'
);
因为您在一个类中,所以回调需要
array( $this, \'display_options_page\' )
而不仅仅是函数名。对于类内的WP回调,可以使用该数组格式,以便正确引用它们。
然而add_options_page
取5个参数,而不是6个,它们应该是:
add_options_page(
$page_title,
$menu_title,
$capability,
$menu_slug,
$function
);
因此,类似这样的方法应该有效:
add_options_page(
\'Theme Options\',
\'Theme Options\',
\'administrator\',
\'wpse_233388_slug\',
array( $this, \'display_options_page\' )
);
您最好使用真正的功能,而不是为您的功能指定角色名称。这样,可以允许其他角色使用该功能,而无需让用户关注管理员。