web-dev-qa-db-ja.com

一般設定ページに複数のカスタムフィールドを追加する

私がやりたいことは、一般設定にいくつかのカスタムフィールドを追加することです。これが私が使っているコードです。それは大丈夫ですが、私はフィールドを追加する方法を理解することはできません。

今のところ、電話番号用と住所用の2つのフィールドを作成します。

function register_fields()
{
    register_setting('general', 'my_first_field', 'esc_attr');
    add_settings_field('my_first_field', '<label for="my_first_field">'.__('My Field' , 'my_first_field' ).'</label>' , 'print_custom_field', 'general');
}

function print_custom_field()
{
    $value = get_option( 'my_first_field', '' );
    echo '<input type="text" id="my_first_field" name="my_first_field" value="' . $value . '" />';
}

add_filter('admin_init', 'register_fields');

私がどうにかしてそれを複数のフィールドで機能させることができた唯一の方法は、すべてを複製することでした。

それで、それはこのようになります:

function register_fields()
{
    register_setting('general', 'my_first_field', 'esc_attr');
    add_settings_field('my_first_field', '<label for="my_first_field">'.__('My Field' , 'my_first_field' ).'</label>' , 'print_first_field', 'general');

    register_setting('general', 'my_second_field', 'esc_attr');
    add_settings_field('my_second_field', '<label for="my_second_field">'.__('My Field' , 'my_second_field' ).'</label>' , 'print_second_field', 'general');
}

function print_first_field()
{
    $value = get_option( 'my_first_field', '' );
    echo '<input type="text" id="my_first_field" name="my_first_field" value="' . $value . '" />';
}

function print_second_field()
{
    $value = get_option( 'my_second_field', '' );
    echo '<input type="text" id="my_second_field" name="my_second_field" value="' . $value . '" />';
}

add_filter('admin_init', 'register_fields');

しかし、これはおそらく最善の方法ではありません。私はsettings_sectionを作成しようとしましたが、うまくいかなかったり、保存されなかったりしました。

21

コードの2番目のビットは、技術的には正しい方法です。ただし、add_settings_field()の最後に引数を渡すことができます。

WordPress Add_Settings_Field 関数リファレンスをご覧ください。これは、add_settings_field()関数が実際にどのように機能するかを最もよく理解するのに役立ちます。

さて、それで、コールバックに 'shared'関数を使用できます。テーマを開発するときにオプションページで行うように。

ここに私がそれを行う方法の例を示します。

// My Example Fields
add_settings_field(  
    'tutorial_display_count',                      
    'Tutorial Display Count',               
    'ch_essentials_textbox_callback',   
    'ch_essentials_front_page_option',                     
    'ch_essentials_front_page',
    array(
        'tutorial_display_count' // $args for callback
    ) 
);
add_settings_field(  
    'blog_display_count',                      
    'Blog Display Count',               
    'ch_essentials_textbox_callback',   
    'ch_essentials_front_page_option',                     
    'ch_essentials_front_page',
    array(
        'blog_display_count'  // $args for callback
    ) 
);

// My Shared Callback
function ch_essentials_textbox_callback($args) { 

$options = get_option('ch_essentials_front_page_option'); 

echo '<input type="text" id="'  . $args[0] . '" name="ch_essentials_front_page_option['  . $args[0] . ']" value="' . $options[''  . $args[0] . ''] . '"></input>';

}

ニーズに合わせて少しカスタマイズする必要がありますが、コールバックの共有関数を使用すると、コードの面で多くのスペースを節約できます。 それ以外は、あなたはそれをそのまま正しくやっています。

-編集-

わかりました、これはあなたにとってどのようなものでしょう。必要に応じてコードを修正するだけです。私はその場でこれを書きました。必要に応じてadd_settings_field(s)を変更するだけです。さらに追加する必要がある場合は、コピーして貼り付けて編集します。 register_settingを確認してください。そうしないと機能しません。

add_action('admin_init', 'my_general_section');  
function my_general_section() {  
    add_settings_section(  
        'my_settings_section', // Section ID 
        'My Options Title', // Section Title
        'my_section_options_callback', // Callback
        'general' // What Page?  This makes the section show up on the General Settings Page
    );

    add_settings_field( // Option 1
        'option_1', // Option ID
        'Option 1', // Label
        'my_textbox_callback', // !important - This is where the args go!
        'general', // Page it will be displayed (General Settings)
        'my_settings_section', // Name of our section
        array( // The $args
            'option_1' // Should match Option ID
        )  
    ); 

    add_settings_field( // Option 2
        'option_2', // Option ID
        'Option 2', // Label
        'my_textbox_callback', // !important - This is where the args go!
        'general', // Page it will be displayed
        'my_settings_section', // Name of our section (General Settings)
        array( // The $args
            'option_2' // Should match Option ID
        )  
    ); 

    register_setting('general','option_1', 'esc_attr');
    register_setting('general','option_2', 'esc_attr');
}

function my_section_options_callback() { // Section Callback
    echo '<p>A little message on editing info</p>';  
}

function my_textbox_callback($args) {  // Textbox Callback
    $option = get_option($args[0]);
    echo '<input type="text" id="'. $args[0] .'" name="'. $args[0] .'" value="' . $option . '" />';
}
25
MrJustin

もっと良い方法はワードプレスのオプションプラグインを使うことです。最も優れた機能の1つは高度なカスタムフィールドです。

http://www.advancedcustomfields.com/ /

あなたがオプションページアドオンを購入するなら、あなたは多くの機能を持つ無制限オプションページを作成することができます。ビデオをどうぞ。

http://www.advancedcustomfields.com/add-ons/options-page/ /

非常に便利なプラグインとアドオン。

0
Foxsk8