Genel ayarlar sayfasına birden çok özel alan ekle


22

Yapmak istediğim, genel ayarlara birkaç özel alan eklemek. Bu kullandığım kod. Tamam çalışıyor ama sadece nasıl daha fazla alan ekleyeceğimi bilemiyorum.

Şimdilik biri telefon numarası diğeri adres adresi olmak üzere iki alan oluşturmak istiyorum:

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

Birden fazla alanda çalışmasını sağlamanın tek yolu her şeyi kopyalamaktı.

Öyleyse şöyle görünürdü:

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

Ama bu muhtemelen bunu yapmanın en iyi yolu değil, bir şeyler yaratmaya çalıştım settings_sectionama İşe yaramadı ya da tasarruf etmedi, vb.

Yanıtlar:


26

İkinci kod biti teknik olarak bunu yapmanın doğru yoludur. Ancak, sonunda sonunda add_settings_field()tartışmaları geçebilirsiniz.

Lütfen WordPress Add_Settings_Field işlevi referansını görüntüleyin. Bu, add_settings_field()işlevin gerçekte nasıl çalıştığını en iyi şekilde anlamanıza yardımcı olacaktır .

Şimdi, bununla birlikte , geri aramalarınız için 'paylaşılan' bir işlev kullanabilirsiniz . Temalar geliştirdiğimde seçenekler sayfamda yaptığım gibi.

İşte nasıl yaptığımın bir örneği.

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

}

Gereksinimlerinize uyacak şekilde özelleştirmeniz biraz zaman alabilir ancak geri aramalarınız için paylaşılan bir işlev yapmak kod açısından çok fazla alan kazandıracaktır. Bunun dışında, doğru şekilde yapıyorsunuz.

--Düzenle--

Tamam, bu senin için nasıl olmalı .. sadece kodu gerektiği gibi değiştirin, bunu anında yazdım .. Kontrol etmek için test ettim ve işe yaradı. Sadece değiştirmek zorundaadd_settings_fieldİhtiyaçlarınıza uyacak (ları) yeterlidir. Daha fazlasını eklemeniz gerekirse, bir tanesini kopyalayıp yapıştırın ve düzenleyin. register_settingİşe ya da işe yaramayacağından emin ol .

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

Yani anlamadığım şey add_settings_field () 'deki 4. ve 5. parametredir. İlki kimlik, ikincisi isim, üncü isim göstermek için geri arama, ama diğeri ne için? İkisi için de ch_essentials_front_page_option var, aynı yerde sadece 'general' var, diğeri boş ve sonuncusu args dizisi. Yani şimdi geri çağırmada bu değerle get_option aldınız, fakat oraya ne koyacağımı bilmiyorum.
Richard Mišenčík

2
Düzenleme yapıldı, bu size% 100 devam etmenizi sağlar. Herhangi bir sorunuz veya sorunuz varsa bana bildirin. Çok yorum yaptım.
Bay Justin

@ MrJusting Çok teşekkürler. Aslında, profiline bakarak ve "Özel menüden sekmelere uygulama" sayfasında yanıtladığın soruları kontrol ederek çalışmasını sağladım. Çok iyi yorumlandı, bu yüzden kodumu karşılaştırdım ve sonunda nasıl çalıştığını anladım. Benim için sayfa ve bölüm parametreleri kafa karıştırıcıydı, ayarların bölümü değil sayfanın bölümü gibiydi. Şimdi ikisini birlikte birleştirip $ args'a başka bir değer ekledim, bu yüzden ilk önce alan kimliği ve ikincisi açıklama, daha sonra da args [1] ile açıklamayı
tekrarlamak

Harika, anladığınıza sevindim, herhangi bir sorunuz varsa bana bildirin.
Justin

Sanırım şimdi ayrı bir menü sayfası oluşturmaya ve oradaki seçenekleri eklemeye çalışıyorum, çünkü genel olarak ve en altta tür kayboldu. Bunun nasıl gittiğini size anlatacağım
Richard Mišenčík

0

Daha iyi bir yol bir wordpress seçenekleri eklentileri kullanmaktır. En iyilerinden biri Gelişmiş Özel Alanlardır.

http://www.advancedcustomfields.com/

Ek bir seçenek sayfası satın alırsanız, o zaman birçok özelliğe sahip sınırsız bir seçenek sayfası oluşturabilirsiniz. Lütfen ne video.

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

Çok yararlı bir eklenti ve addon.


3
Sadece birkaç alan eklemek istiyorum, bu yüzden sadece bunun için bir eklenti benim için bir overkill olurdu ama teşekkürler.
Richard Mišenčík

8
Bunun, Genel Ayarlar’a alan eklemek olan OP’nin istediğini çözmediğinden bahsetmiyorum. AFAIK, ACF, Genel Ayarlar bölümüne alan eklemenize izin vermez.
NW Tech
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.