web-dev-qa-db-ja.com

一般設定ページにラジオボタンの値が表示されないというエラーが表示される

一般設定画面からラジオボタンの値を印刷すると、常にエラーが発生することがあります。

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;
}

間違いは何ですか?

1
mehedi doha

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
}
0
brasofilo