Aggiungere più campi personalizzati alla pagina delle impostazioni generali

9 gen 2014, 23:18:46
Visualizzazioni: 59.1K
Voti: 32

Quello che vorrei fare è aggiungere alcuni campi personalizzati alle impostazioni generali. Questo è il codice che sto utilizzando. Funziona bene ma non riesco a capire come aggiungere più campi.

Vorrei creare due campi per ora, uno per il numero di telefono e il secondo per l'indirizzo:

function register_fields()
{
    register_setting('general', 'my_first_field', 'esc_attr');
    add_settings_field('my_first_field', '<label for="my_first_field">'.__('Il Mio Campo' , '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');

L'unico modo in cui sono riuscito a farlo funzionare per più campi è stato duplicare tutto.

Quindi apparirebbe così:

function register_fields()
{
    register_setting('general', 'my_first_field', 'esc_attr');
    add_settings_field('my_first_field', '<label for="my_first_field">'.__('Il Mio Campo' , '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">'.__('Il Mio Campo' , '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');

Ma questo probabilmente non è il modo migliore per farlo, ho provato a creare una settings_section ma semplicemente non funzionava o non salvava ecc. È molto confuso.

0
Tutte le risposte alla domanda 2
9
46

Bene, il secondo frammento di codice è tecnicamente il modo corretto per farlo. Tuttavia, alla fine della funzione add_settings_field() puoi passare degli argomenti.

Consulta il riferimento alla funzione WordPress Add_Settings_Field. Questo ti aiuterà a comprendere meglio come funziona realmente la funzione add_settings_field().

Detto questo, potresti utilizzare una funzione 'condivisa' per il tuo callback. Come faccio io nella pagina delle opzioni quando sviluppo temi.

Ecco un esempio di come lo faccio.

// I miei campi di esempio
add_settings_field(  
    'tutorial_display_count',                      
    'Conteggio Visualizzazione Tutorial',               
    'ch_essentials_textbox_callback',   
    'ch_essentials_front_page_option',                     
    'ch_essentials_front_page',
    array(
        'tutorial_display_count' // $args per il callback
    ) 
);
add_settings_field(  
    'blog_display_count',                      
    'Conteggio Visualizzazione Blog',               
    'ch_essentials_textbox_callback',   
    'ch_essentials_front_page_option',                     
    'ch_essentials_front_page',
    array(
        'blog_display_count'  // $args per il callback
    ) 
);

// Il mio Callback Condiviso
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] . ''] . '">';
 
}

Richiederà un po' di personalizzazione per adattarsi alle tue esigenze, ma utilizzare una funzione condivisa per i callback ti farà risparmiare molto spazio in termini di codice. A parte questo, lo stai facendo correttamente così come è.

--Modifica--

Ok, ecco come dovrebbe essere per te... basta modificare il codice come necessario, l'ho scritto al volo... l'ho testato per verificare e funziona. Devi solo modificare le add_settings_field per adattarle alle tue esigenze. Se hai bisogno di aggiungerne altre, basta copiare e incollarne una e modificarla. Assicurati di usare register_setting altrimenti non funzionerà.

add_action('admin_init', 'my_general_section');  
function my_general_section() {  
    add_settings_section(  
        'my_settings_section', // ID Sezione 
        'Titolo delle mie Opzioni', // Titolo Sezione
        'my_section_options_callback', // Callback
        'general' // Su quale Pagina? Fa apparire la sezione nella pagina delle Impostazioni Generali
    );
    
    add_settings_field( // Opzione 1
        'option_1', // ID Opzione
        'Opzione 1', // Etichetta
        'my_textbox_callback', // !importante - Qui vanno gli args!
        'general', // Pagina in cui verrà visualizzata (Impostazioni Generali)
        'my_settings_section', // Nome della nostra sezione
        array( // Gli $args
            'option_1' // Deve corrispondere all'ID Opzione
        )  
    ); 
    
    add_settings_field( // Opzione 2
        'option_2', // ID Opzione
        'Opzione 2', // Etichetta
        'my_textbox_callback', // !importante - Qui vanno gli args!
        'general', // Pagina in cui verrà visualizzata
        'my_settings_section', // Nome della nostra sezione (Impostazioni Generali)
        array( // Gli $args
            'option_2' // Deve corrispondere all'ID Opzione
        )  
    ); 
    
    register_setting('general','option_1', 'esc_attr');
    register_setting('general','option_2', 'esc_attr');
}

function my_section_options_callback() { // Callback Sezione
    echo '<p>Un piccolo messaggio sulla modifica delle informazioni</p>';  
}

function my_textbox_callback($args) {  // Callback Textbox
    $option = get_option($args[0]);
    echo '<input type="text" id="'. $args[0] .'" name="'. $args[0] .'" value="' . $option . '" />';
}
10 gen 2014 02:11:21
Commenti

Quindi quello che non capisco sono il 4° e 5° parametro in add_settings_field(). So che il primo è l'ID, il secondo è il nome, il terzo è il callback per visualizzarlo, ma a cosa servono i successivi?

Tu hai ch_essentials_front_page_option per entrambi, io ho solo 'general' nello stesso posto, il prossimo è vuoto e l'ultimo è ora l'array args.

Quindi ora nel callback hai get_option con quel valore, ma non so cosa metterci nel mio caso.

Richard Mišenčík Richard Mišenčík
10 gen 2014 13:30:18

Ho fatto una modifica, ora dovresti essere al 100% operativo. Fammi sapere se hai problemi o domande. L'ho commentato abbondantemente.

MrJustin MrJustin
11 gen 2014 02:31:26

@MrJusting Grazie mille. In realtà sono riuscito a farlo funzionare guardando il tuo profilo e controllando una domanda a cui avevi risposto, "Implementing-tabs-on-custom-menu-page". Era molto ben commentata, quindi ho confrontato il mio codice e alla fine ho capito come funziona. Per me i parametri page e section erano confusi, pensavo fosse come una sezione della pagina e non la sezione delle impostazioni. Quindi ora li ho combinati insieme e ho aggiunto un altro valore a $args, quindi il primo è l'ID del campo e il secondo è la descrizione, e poi ho aggiunto un'altra riga alla funzione callback per visualizzare la descrizione con args[1] :)

Richard Mišenčík Richard Mišenčík
12 gen 2014 23:04:32

Ottimo, sono contento che tu abbia risolto. Se hai domande fammelo sapere.

MrJustin MrJustin
13 gen 2014 17:38:52

Penso che proverò ora a creare una pagina di menu separata e aggiungere le opzioni lì, perché in generale e in fondo si perde un po'. Ti farò sapere come è andata.

Richard Mišenčík Richard Mišenčík
13 gen 2014 18:20:45

Grazie @MrJustin. Solo un appunto, su qualcosa che non ho visto nella risposta...per visualizzare l'opzione nel tuo tema, usa semplicemente la funzione get_option(). Esempio: <?php echo get_option('option_1') ;?>

NW Tech NW Tech
14 gen 2014 20:54:23

Per me ha funzionato perfettamente.

Jake Jake
13 gen 2016 01:14:35

Eccolo. La migliore risposta su internet! Ho cercato per ore una soluzione. Solo per far notare a tutti coloro che leggono questo articolo, usate il commento modificato e aggiungete ciò che vi serve!

Mo Alsaedi Mo Alsaedi
23 set 2016 19:54:11
Mostra i restanti 4 commenti
2
-2

Un modo migliore è utilizzare un plugin per le opzioni di WordPress. Uno dei migliori è Advanced Custom Fields.

http://www.advancedcustomfields.com/

Se acquisti l'addon per la pagina delle opzioni, potrai creare una pagina di opzioni illimitata con molte funzionalità. Guarda questo video.

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

Plugin e addon molto utili.

10 gen 2014 01:56:11
Commenti

Voglio solo aggiungere qualche campo, quindi un plugin apposito sarebbe eccessivo per me, ma grazie.

Richard Mišenčík Richard Mišenčík
10 gen 2014 13:28:25

Per non parlare del fatto che questo non risolve ciò che voleva l'OP, ovvero aggiungere campi alle Impostazioni Generali. Per quanto ne so, ACF non consente di aggiungere campi alle Impostazioni Generali.

NW Tech NW Tech
14 gen 2014 20:30:27