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


22

私がやりたいのは、いくつかのカスタムフィールドを一般設定に追加することです。これは私が使用しているコードです。それはうまく機能しますが、フィールドを追加する方法がわかりません。

ここでは、電話番号用と住所用の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はありません。

回答:


26

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

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

これで、コールバックに「共有」関数を使用できるようになりました。テーマを開発するときにオプションページで行うように。

ここに私がそれをする方法の例があります。

// 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 . '" />';
}

私が理解していないのは、add_settings_field()の4番目と5番目のパラメーターです。最初のものはID、2番目は名前、3番目はそれを表示するためのコールバックですが、次の目的は何ですか?両方にch_essentials_front_page_optionがあります。同じ場所に 'general'があり、次は空で、最後はargs配列です。そのため、コールバックにはその値を持つget_optionがありますが、私の場合に何を置くべきかわかりません。
リチャードミシェンチク14年

2
編集が行われたので、100%進行します。問題や質問がある場合はお知らせください。かなりコメントしました。
ミスタージャスティン14年

@MrJustingどうもありがとう。実際に、あなたのプロフィールを見て、あなたが答えた「カスタムメニューページにタブを実装する」という質問をチェックすることで、それを機能させました。非常によくコメントされていたので、コードを比較し、最終的にどのように機能するかを理解しました。私にとって、ページとセクションのパラメーターは混乱しましたが、設定のセクションではなく、ページのセクションのようでした。今、私は両方を一緒に合わせて、$引数に別の値を追加し、第1フィールドIDであり、第二は、説明され、その後、引数[1] :)で説明エコーするコールバック関数への別のラインを追加
リチャードMišenčík

すばらしい、ご質問がありましたら教えてください。
ミスタージャスティン14年

私は今、別のメニューページを作成し、そこにオプションを追加しようとすると思うと思います。なぜなら、一般的に、そして一番下ではその種類が失われているからです。私はあなたが行ったのか知ってもらおう
リチャードMišenčík

0

より良い方法は、ワードプレスオプションプラグインを使用することです。最も優れているのは、高度なカスタムフィールドです。

http://www.advancedcustomfields.com/

オプションページアドオンを購入すると、多くの機能を備えた無制限のオプションページを作成できます。動画をご覧ください。

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

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


3
いくつかのフィールドを追加したいだけなので、このためのプラグインは私にとってはやり過ぎですが、ありがとうございます。
リチャードミシェンチク14年

8
これは言うまでもありませんが、OPが望んでいたこと、つまり一般設定にフィールドを追加することを解決しません。知る限り、ACFでは一般設定にフィールドを追加できません。
NWテック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.