Adicione vários campos personalizados à página de configurações gerais

15

O que eu gostaria de fazer é adicionar alguns campos personalizados às configurações gerais. Este é o código que estou usando. Ele funciona bem, mas eu não consigo entender como adicionar mais campos.

Eu gostaria de criar dois campos por enquanto, um para o número de telefone e o segundo para o endereço:

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

A única maneira que consegui fazer com que funcionasse para vários campos era duplicar tudo.

Então, ficaria assim:

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

Mas esta provavelmente não é a melhor maneira de fazer isso, eu tentei criar um settings_section , mas ele simplesmente não funcionou ou não salvou, etc. É muito confuso.

    
por Richard Mišenčík 09.01.2014 / 22:18

2 respostas

20

Bem, o segundo bit de código é tecnicamente a maneira correta de fazer isso. No entanto, no final do add_settings_field() você pode passar argumentos.

Consulte a referência de função Add_Settings_Field do WordPress. Isso ajudará você a entender melhor como funciona a função add_settings_field() .

Agora, com isso dito, você pode usar uma função 'compartilhada' para seu retorno de chamada. Tal como faço na minha página de opções quando desenvolvo temas.

Aqui está um exemplo de como faço isso.

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

}

Será preciso um pouco de personalização para atender às suas necessidades, mas fazer uma função compartilhada para seus retornos de chamada economizará muito espaço em termos de código. Fora isso, você está fazendo corretamente como está.

- Editar -

Ok, isso é o que deveria ser para você ... apenas modifique o código conforme necessário, eu escrevi isso rapidamente. Eu testei para verificar, e funcionou. Você só precisa modificar o add_settings_field (s) para atender às suas necessidades. Se você precisar adicionar mais, basta copiar e colar um e editá-lo. Certifique-se de register_setting ou não funcionará.

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 . '" />';
}
    
por MrJustin 10.01.2014 / 01:11
0

Melhor maneira é usar um plugins de opções do wordpress. Um dos melhores é Advanced Custom Fields.

enlace

Se você comprar um addon de página de opção, poderá criar uma página de opções ilimitada com muitos recursos. Por favor, o que sai um vídeo.

enlace

Plugin e addon muito úteis.

    
por Foxsk8 10.01.2014 / 00:56