Ajouter plusieurs champs personnalisés à la page des paramètres généraux

15

Ce que je voudrais faire est d’ajouter quelques champs personnalisés aux paramètres généraux. C'est le code que j'utilise. Cela fonctionne bien, mais je ne vois pas comment ajouter plus de champs.

J'aimerais créer deux champs pour le moment, l'un pour le numéro de téléphone et l'autre pour l'adresse:

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 seule façon pour moi de le faire fonctionner pour plusieurs champs était de tout dupliquer.

Alors, cela ressemblerait à ceci:

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

Mais ce n'est probablement pas la meilleure façon de le faire, j'ai essayé de créer un settings_section mais cela n'a tout simplement pas fonctionné ou n'a pas été sauvegardé, etc. C'est très déroutant.

    
posée Richard Mišenčík 09.01.2014 - 22:18

2 réponses

20

Eh bien, le deuxième bit de code est techniquement la bonne façon de le faire. Cependant, à la fin du add_settings_field() , vous pouvez passer des arguments.

Consultez la référence à la fonction WordPress Add_Settings_Field . Cela vous aidera à mieux comprendre le fonctionnement réel de la fonction add_settings_field() .

Cela dit, vous pouvez utiliser une fonction 'partagée' pour votre rappel. Comme je le fais dans ma page Options lorsque je développe des thèmes.

Voici un exemple de la façon dont je le fais.

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

}

Cela nécessitera un peu de personnalisation pour répondre à vos besoins, mais une fonction partagée pour vos rappels permettra de gagner beaucoup d'espace en termes de code. Sinon, vous le faites correctement tel quel.

- Modifier -

Ok, c'est comme ça que ça devrait être pour vous .. modifiez simplement le code si nécessaire, j'ai écrit ceci à la volée .. Je l'ai testé pour le vérifier, et cela a fonctionné. Il vous suffit de modifier le (s) add_settings_field en fonction de vos besoins. Si vous devez en ajouter d'autres, copiez-les et collez-les puis modifiez-les. Assurez-vous de register_setting sinon cela ne fonctionnera pas.

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 . '" />';
}
    
réponse donnée MrJustin 10.01.2014 - 01:11
0

Mieux vaut utiliser un plugin d'options wordpress. L'un des meilleurs est Advanced Custom Fields.

enlace

Si vous achetez un complément de page d'options, vous pouvez créer une page d'options illimitée comportant de nombreuses fonctionnalités. S'il vous plaît ce que sur une vidéo.

enlace

Plugin et addon très utiles.

    
réponse donnée Foxsk8 10.01.2014 - 00:56

Lire d'autres questions sur les étiquettes