Tambahkan beberapa bidang khusus ke halaman pengaturan umum

22

Yang ingin saya lakukan adalah menambahkan beberapa bidang khusus ke pengaturan umum. Ini adalah kode yang saya gunakan. Ini berfungsi dengan baik, tetapi saya tidak tahu cara menambahkan lebih banyak bidang.

Saya ingin membuat dua bidang untuk saat ini, satu untuk nomor telepon dan yang kedua untuk alamat:

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');

Satu-satunya cara saya membuatnya berfungsi untuk beberapa bidang adalah dengan menduplikasi semuanya.

Maka akan terlihat seperti ini:

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');

Tapi ini mungkin bukan cara terbaik untuk melakukannya, saya mencoba membuat settings_sectiontapi itu tidak berhasil atau tidak menyelamatkan dll. Itu hanya sangat membingungkan.

Richard Mišenčík
sumber

Jawaban:

26

Bit kode kedua secara teknis adalah cara yang benar untuk melakukannya. Namun, pada akhirnya add_settings_field()Anda bisa menyampaikan argumen.

Silakan lihat referensi fungsi WordPress Add_Settings_Field . Ini akan membantu Anda mendapatkan pemahaman terbaik tentang bagaimana add_settings_field()fungsi itu benar-benar bekerja.

Sekarang, dengan itu, Anda bisa menggunakan fungsi 'dibagikan' untuk panggilan balik Anda. Seperti yang saya lakukan di halaman opsi saya ketika saya mengembangkan tema.

Ini adalah contoh bagaimana saya melakukannya.

// 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>';

}

Dibutuhkan sedikit penyesuaian agar sesuai dengan kebutuhan Anda, tetapi melakukan fungsi bersama untuk panggilan balik Anda akan menghemat banyak ruang dalam hal kode. Selain itu, Anda melakukannya dengan benar apa adanya.

--Edit--

Ok, beginilah seharusnya bagimu .. cukup modifikasi kodenya sesuai kebutuhan, aku menulis ini dengan cepat .. Aku memang mengujinya untuk memeriksa, dan ternyata berhasil. Anda hanya perlu memodifikasi add_settings_fieldagar sesuai dengan kebutuhan Anda. Jika Anda perlu menambahkan lebih banyak, cukup salin dan tempel satu dan edit. Pastikan register_settingatau tidak akan berfungsi.

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 . '" />';
}
Tuan Justin
sumber
Jadi yang tidak saya mengerti adalah parameter ke-4 dan ke-5 di add_settings_field (). Saya tahu yang pertama adalah ID, kedua adalah nama, ketiga adalah panggilan balik untuk menampilkannya, tetapi untuk apa selanjutnya? Anda memiliki ch_essentials_front_page_option untuk keduanya, saya baru saja 'umum' di tempat yang sama, yang berikutnya kosong dan yang terakhir sekarang array args. Jadi sekarang di callback Anda mendapatkan get_option dengan nilai itu, tapi saya tidak tahu harus memasukkan apa ke dalam kasus saya.
Richard Mišenčík
2
Edit telah dilakukan, itu akan membuat Anda 100% berjalan. Beri tahu saya jika Anda memiliki masalah atau pertanyaan. Saya sangat berkomentar.
MrJustin
@ MrJusting Terima kasih banyak. Saya sebenarnya membuatnya bekerja dengan melihat profil Anda dan memeriksa pertanyaan yang Anda jawab, "Menerapkan-tab-pada-menu-kustom-halaman". Itu sangat baik dikomentari, jadi saya membandingkan kode saya dan akhirnya mengerti cara kerjanya. Bagi saya parameter halaman dan bagian membingungkan, saya pikir itu seperti bagian dari halaman dan bukan bagian dari pengaturan. Jadi sekarang saya menggabungkan keduanya bersama-sama dan menambahkan nilai lain ke $ args, jadi pertama adalah id bidang dan yang kedua adalah deskripsi, dan kemudian menambahkan baris lain ke fungsi callback untuk menggemakan deskripsi dengan args [1] :)
Richard Mišenčík
Bagus, saya senang Anda sudah menemukan jawabannya, jika Anda memiliki pertanyaan, beri tahu saya.
MrJustin
Saya pikir saya akan mencoba sekarang untuk membuat halaman menu terpisah dan menambahkan opsi di sana, karena secara umum dan di bagian bawah jenisnya hilang. Saya akan memberi tahu Anda bagaimana
hasilnya
0

Cara yang lebih baik adalah menggunakan plugin opsi wordpress. Salah satu yang terbaik adalah Bidang Kustom Lanjutan.

http://www.advancedcustomfields.com/

Jika Anda membeli addon halaman opsi, maka Anda dapat membuat halaman opsi tanpa batas dengan banyak fitur. Silakan keluar video.

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

Plugin dan addon yang sangat berguna.

Foxsk8
sumber
3
Saya hanya ingin menambahkan beberapa bidang, jadi plugin hanya untuk ini akan menjadi kerja keras bagi saya tapi terima kasih.
Richard Mišenčík
8
Belum lagi ini tidak menyelesaikan apa yang diinginkan OP, yaitu menambahkan bidang ke Pengaturan Umum. AFAIK, ACF tidak memungkinkan Anda untuk menambahkan bidang tanpa Pengaturan Umum.
NW Tech