Agregue múltiples campos personalizados a la página de configuración general

15

Lo que me gustaría hacer es agregar algunos campos personalizados a la configuración general. Este es el código que estoy usando. Funciona bien, pero no puedo imaginar cómo agregar más campos.

Me gustaría crear dos campos por ahora, uno para el número de teléfono y el segundo para la dirección:

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

La única forma en que logré que funcionara para múltiples campos era duplicar todo.

Entonces, se vería así:

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

Pero probablemente esta no sea la mejor manera de hacerlo, intenté crear un settings_section pero simplemente no funcionó o no se guardó, etc. Es muy confuso.

    
pregunta Richard Mišenčík 09.01.2014 - 22:18

2 respuestas

20

Bueno, el segundo bit de código es técnicamente la forma correcta de hacerlo. Sin embargo, al final de add_settings_field() puede pasar argumentos.

Consulte la función WordPress Add_Settings_Field . Esto le ayudará a comprender mejor cómo funciona realmente la función add_settings_field() .

Ahora, dicho esto, podría usar una función 'shared' para su devolución de llamada. Como hago en mi página de opciones cuando desarrollo temas.

Aquí hay un ejemplo de cómo lo hago.

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

}

Tomará un poco de personalización para satisfacer sus necesidades, pero hacer una función compartida para sus devoluciones de llamada ahorrará mucho espacio en términos de código. Aparte de eso, lo estás haciendo correctamente tal como está.

--Editar--

Ok, esto es lo que debería ser para usted ... solo modifique el código según sea necesario, lo escribí sobre la marcha ... Lo probé para verificar, y funcionó. Solo necesita modificar el add_settings_field (s) para satisfacer sus necesidades. Si necesita agregar más, simplemente copie y pegue uno y edítelo. Asegúrate de que register_setting o no 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 . '" />';
}
    
respondido por el MrJustin 10.01.2014 - 01:11
0

Una mejor manera es usar un plugin de opciones de wordpress. Uno de los mejores es Advanced Custom Fields.

enlace

Si compra un complemento de página de opción, puede crear una página de opción ilimitada con muchas características. Por favor, qué fuera un video.

enlace

Complemento y complemento muy útil.

    
respondido por el Foxsk8 10.01.2014 - 00:56

Lea otras preguntas en las etiquetas