Php 添加\u设置\u字段未与验证一起运行-返回字符串

Php 添加\u设置\u字段未与验证一起运行-返回字符串,php,database,wordpress,validation,pdo,Php,Database,Wordpress,Validation,Pdo,插件管理面板工作正常,直到我尝试验证设置 register_setting('jo_plugin_options', 'jo_plugin_options', array($this, 'jo_validate_settings')); add_settings_section('jo_main_section', 'Data Table Settings', array($this, 'jo_main_section_cb'), __FILE__); // id, title, section

插件管理面板工作正常,直到我尝试验证设置

register_setting('jo_plugin_options', 'jo_plugin_options', array($this, 'jo_validate_settings'));
add_settings_section('jo_main_section', 'Data Table Settings', array($this, 'jo_main_section_cb'), __FILE__); // id, title, section, callback, page
add_settings_field('jo_col_1_name', 'Column 1 Name: ', array($this, 'jo_col_1_name_setting'), __FILE__, 'jo_main_section');
add_settings_field('jo_col_2_name', 'Column 2 Name: ', array($this, 'jo_col_2_name_setting'), __FILE__, 'jo_main_section');
add_settings_field('jo_col_3_name', 'Column 3 Name: ', array($this, 'jo_col_3_name_setting'), __FILE__, 'jo_main_section');
add_settings_field('jo_file_upload', 'Upload File: ', array($this, 'jo_file_upload_setting'), __FILE__, 'jo_main_section');
因此,如果我从寄存器设置行删除//数组('jo\u validate\u settings')//我的文本框功能正常。但当我添加验证代码时,它会破坏它们并返回此错误

*警告:第82行的/Applications/MAMP/htdocs/wp content/plugins/plugin-rough.php中的非法字符串偏移量“jo\u col\u 1\u name”*

盒子在这里:

public function jo_col_1_name_setting() {
echo "<input id='jo_col_1_name' name='jo_plugin_options[jo_col_1_name]' type='text' value='{$this->options['jo_col_1_name']}' />"; }

public function jo_col_2_name_setting() {
echo "<input name='jo_plugin_options[jo_col_2_name]' type='text' value='{$this->options['jo_col_2_name']}' />"; }

public function jo_col_3_name_setting() {
echo "<input name='jo_plugin_options[jo_col_3_name]' type='text' value='{$this->options['jo_col_3_name']}' />"; }

试着这样做:

if (!isset($youroptions['somename'])){
$youroptions['somename'] = '';
}  
//or like this
if (!isset($youroptions['somename'])){
 $youroptions['somename']= 'blank';//You can try to use 
}                                  //$youroptions['somename']= 'undefined'; 
完整工作示例(添加在“设置”后端中):



我的选项页


试着这样做:

if (!isset($youroptions['somename'])){
$youroptions['somename'] = '';
}  
//or like this
if (!isset($youroptions['somename'])){
 $youroptions['somename']= 'blank';//You can try to use 
}                                  //$youroptions['somename']= 'undefined'; 
完整工作示例(添加在“设置”后端中):



我的选项页


你的意思是在输入值上使用isset吗?是的,试着这样做。对我有用。我尝试了一下,错误消失了,但数据仍然无法保存。你是对的,尽管这与在发布之前检查值是否设置有关。有没有其他方法可以做到这一点?我已经清理了我的代码一点,所以现在它工作得更好,更容易理解。玩得开心。德乔-谢谢!这很奇怪,但是在添加了//return$plugin_选项之后;//为了验证我的功能,这一切都起了作用。这是典型的,我只是忽略了什么?我的印象是我需要使用isset进行验证,但是wordpress在使用add_setting_字段时默认会这样做?你的意思是在输入值上使用isset吗?是的,尝试这样做。对我有用。我尝试了一下,错误消失了,但数据仍然无法保存。你是对的,尽管这与在发布之前检查值是否设置有关。有没有其他方法可以做到这一点?我已经清理了我的代码一点,所以现在它工作得更好,更容易理解。玩得开心。德乔-谢谢!这很奇怪,但是在添加了//return$plugin_选项之后;//为了验证我的功能,这一切都起了作用。这是典型的,我只是忽略了什么?我的印象是我需要使用isset进行验证,但是wordpress在使用add_setting_字段时默认会这样做吗?
<?php
add_action('admin_menu','create_theme_options_page');
function create_theme_options_page(){
add_options_page('Theme Options','Theme Options','administrator',__FILE__,'build_options_page');
}
function build_options_page(){
?>
<div id="theme-options-wrap">
<div style="float:left;margin-top:19px;position:absolute;" class="icon32" id="icon-tools"><br/></div>
<h2>My options page</h2>
<form method="post" action="options.php">
<?php settings_fields('plugin_options');?>
<?php do_settings_sections(__FILE__); ?>
<p class="submit">
<input name="Submit" type="submit" class="button-primary" value="<?php esc_attr_e('Save changes');?>"/>
</p>
</form>
</div>
<?php
}

add_action('admin_init','register_and_build_fields');
function register_and_build_fields(){
register_setting('plugin_options','plugin_options','validate_setting');
add_settings_section('main_section','<br/><br/>Main Settings','section_cb',__FILE__);
add_settings_field('banner_headings','Banner Heading:','banner_heading_settings',__FILE__,'main_section');

}

//Banner Heading
function banner_heading_settings(){
$options = get_option('plugin_options');
if(isset( $options['banner_headings'])) {
$options = $options['banner_headings'];
} else {
$options='';
}

echo '<input type="text" name="plugin_options[banner_headings]" value="'.$options.'" />';

}
//Return our options back
function validate_setting($plugin_options){ 



return $plugin_options;
}

function section_cb(){
}
?>