一般設定画面からラジオボタンの値を印刷すると、常にエラーが発生することがあります。
565行目のF:\ wamp\www\plugin-tester\wp-content\themes\20\13\functions.phpの文字列オフセット 'service'が正しくありません
568行目のF:\ wamp\www\plugin-tester\wp-content\themes\20\13\functions.phpの文字列オフセット 'service'が正しくありません
これがfunctions.php
ファイルに追加したコードです。
add_filter('admin_init', 'myservice_register_function');
function myservice_register_function(){
register_setting('general', 'my_service', 'esc_attr');
add_settings_field('my_service', '<label for="service_need">'.__('Do You need My Service' , 'my_service' ).'</label>' , 'service_function', 'general');
}
function service_function(){
$options = get_option( 'my_service', '');
// $options = get_settings( 'my_service');
if($options['service'] == 'YES') { //line number 565
echo 'Yes, Service Need';
}
if($options['service'] == 'NO') { // line number 568
echo 'No Need Service';
}
$html = '<input type="radio" name="my_service[service]" value="YES"/>';
$html .= '<label> NEED </label>';
$html .= '<input type="radio" name="my_service[service]" value="NO"/>';
$html .= '<label > NO NEED </label>';
echo $html;
}
間違いは何ですか?
Rarstが指摘した isset
の問題とは別に、サニタイズ関数にエラーがあります。 esc_attr
はラジオボタンでは動作しないようです。esc_sql
を使うとうまくいきます。
ボタンのchecked
状態もありません。
add_filter( 'admin_init', 'myservice_register_function' );
function myservice_register_function()
{
register_setting( 'general', 'my_service', 'esc_sql' );
add_settings_field(
'my_service',
'<label for="service_need">'.__('Do You need My Service' , 'my_service' ).'</label>' ,
'service_function',
'general'
);
}
function service_function()
{
$options = get_option( 'my_service', '');
$yes = $no = '';
if( isset( $options['service'] ) )
{
if( $options['service'] == 'YES')
{
echo 'Yes, Service Need<br />';
$yes = ' checked="checked"';
}
if( $options['service'] == 'NO')
{
echo 'No Need Service<br />';
$no = ' checked="checked"';
}
}
?>
<input type="radio" name="my_service[service]" value="YES"<?php echo $yes; ?> />
<label> NEED </label>
<input type="radio" name="my_service[service]" value="NO"<?php echo $no; ?> />
<label> NO NEED </label>
<?php
}