Додайте кілька спеціальних полів на сторінку загальних налаштувань


22

Що я хотів би зробити, це додати кілька загальних полів до загальних налаштувань. Це код, який я використовую. Це працює добре, але я просто не можу зрозуміти, як додати більше полів.

Я хотів би створити зараз два поля, одне для номера телефону, а друге для адреси:

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

Ну а другий біт коду - це технічно правильний спосіб зробити це. Однак наприкінці 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>';

}

Знадобиться трохи налаштувати під свої потреби, але виконання спільної функції для зворотних викликів заощадить багато місця з точки зору коду. Крім цього, ви робите це правильно, як є.

--Edit--

Добре, це має бути, як для вас .. просто змініть код за потребою, я написав це на льоту .. Я зробив тест, щоб перевірити, і він спрацював. Вам просто потрібно змінити add_settings_field(-и) відповідно до ваших потреб. Якщо вам потрібно додати більше, просто скопіюйте та вставте його та відредагуйте. Переконайтесь, що 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 (). Я знаю, що перший - це ідентифікатор, другий - ім'я, третій - зворотний дзвінок для його відображення, але для чого наступні? Ви маєте ch_essentials_front_page_option для обох, я просто "загальний" на тому самому місці, наступний - порожній, а останній - це масив args. Тож тепер у зворотному дзвінку у вас є get_option з таким значенням, але я не знаю, що вкласти в моєму випадку.
Річард Мішенчик

2
Внесення змін було здійснено, і це на 100% призведе до вас. Повідомте мене, якщо у вас є якісь проблеми або питання. Я це сильно коментував.
Містер Юстін

@MrJusting Дякую велике Насправді я працював, переглядаючи ваш профіль і перевіряючи питання, на яке ви відповіли: "Реалізація-вкладки-на-користувальницьке меню-сторінку". Це було дуже добре прокоментовано, тому я порівняв свій код і нарешті зрозумів, як він працює. Для мене параметри сторінки та розділу були заплутаними, я хоч і був як розділ сторінки, а не розділ налаштувань. Тож тепер я об'єднав обох разом і додав ще значення $ args, тож перше - це поле id, а друге - опис, а потім додав ще один рядок до функції зворотного виклику, щоб повторити опис з аргументами [1] :)
Річард Мішенчик

Чудово, я радий, що ви це зрозуміли, якщо у вас виникли запитання, дайте мені знати.
Містер Юстін

Думаю, я спробую зараз створити окрему сторінку меню і додати там параметри, адже загалом і внизу її вид втратив. Я дам вам знати, як це пішло
Річард Мішенчик

0

Кращим способом є використання плагінів Wordpress. Одним з найкращих є розширені спеціальні поля.

http://www.advancedcustomfields.com/

Якщо ви купуєте додаток на сторінці опціону, ви можете створити необмежену сторінку з опціями з безліччю функцій. Будь ласка, яке відео.

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

Дуже корисний плагін і аддон.


3
Я просто хочу додати кілька полів, тому плагін для цього був би надмірним для мене, але дякую.
Річард Мішенчик

8
Не кажучи вже про це, це не вирішує те, що хотіла ОП, а саме додати поля до Загальних налаштувань. AFAIK, ACF не дозволяє додавати поля до загальних налаштувань.
NW Tech
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.