web-dev-qa-db-fra.com

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

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 peux pas comprendre comment ajouter plus de champs.

Je voudrais créer deux champs pour le moment, un pour le numéro de téléphone et le second 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 la 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 économisé, etc. C'est tout simplement très déroutant.

21

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

S'il vous plaît voir le WordPress Add_Settings_Field référence de la fonction. Cela vous aidera à mieux comprendre le fonctionnement réel de la fonction add_settings_field().

Cela dit, vous pourriez utiliser une fonction'partagée'pour votre rappel. Comme je le fais dans la page des 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 économisera beaucoup d'espace en termes de code. En dehors de cela, vous le faites correctement tel quel.

--Modifier--

Ok, c’est ce que cela devrait être pour vous .. modifiez simplement le code si nécessaire, j’ai écrit ceci à la volée .. je l’ai testé pour vérifier, et cela a fonctionné. Il vous suffit de modifier le add_settings_field (s) 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 . '" />';
}
25
MrJustin

Une meilleure façon est d'utiliser un plugin d'options wordpress. L'un des meilleurs est Advanced Custom Fields.

http://www.advancedcustomfields.com/

Si vous achetez une extension de page d'option, vous pouvez créer une page d'option illimitée avec de nombreuses fonctionnalités. S'il vous plaît ce que sur une vidéo.

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

Très utile plugin et addon.

0
Foxsk8