Fügen Sie der Seite mit den allgemeinen Einstellungen mehrere benutzerdefinierte Felder hinzu


22

Ich würde gerne ein paar benutzerdefinierte Felder zu den allgemeinen Einstellungen hinzufügen. Dies ist der Code, den ich verwende. Es funktioniert in Ordnung, aber ich kann nicht herausfinden, wie ich weitere Felder hinzufügen kann.

Ich möchte vorerst zwei Felder erstellen, eines für die Telefonnummer und das zweite für die 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');

Ich habe es nur geschafft, dass es für mehrere Felder funktioniert, indem ich alles dupliziert habe.

Dann würde es so aussehen:

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

Aber dies ist wahrscheinlich nicht der beste Weg, ich habe versucht, ein zu erstellen, settings_sectionaber es hat einfach nicht funktioniert oder nicht gespeichert usw. Es ist einfach sehr verwirrend.

Antworten:


26

Nun, das zweite Stück Code ist technisch die richtige Methode, um dies zu tun. Am Ende der können add_settings_field()Sie jedoch Argumente übergeben.

Bitte sehen Sie sich die Funktionsreferenz zu WordPress Add_Settings_Field an . Auf diese Weise können Sie besser verstehen, wie die add_settings_field()Funktion tatsächlich funktioniert.

Nachdem dies gesagt wurde, können Sie eine "gemeinsame" Funktion für Ihren Rückruf verwenden. So wie ich es auf meiner Optionsseite mache, wenn ich Themen entwickle.

Hier ist ein Beispiel, wie ich es mache.

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

}

Das Anpassen an Ihre Bedürfnisse wird ein wenig dauern, aber eine gemeinsame Funktion für Ihre Rückrufe spart viel Platz in Bezug auf Code. Ansonsten machst du es so, wie es ist.

--Bearbeiten--

Ok, so sollte es für dich sein ... ändere einfach den Code nach Bedarf, ich habe dies im laufenden Betrieb geschrieben. Ich habe es getestet, um es zu überprüfen, und es hat funktioniert. Sie müssen nur die add_settings_field(n) an Ihre Bedürfnisse anpassen. Wenn Sie weitere hinzufügen müssen, kopieren Sie diese, fügen Sie sie ein und bearbeiten Sie sie. Stellen Sie sicher, register_settingoder es wird nicht funktionieren.

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 . '" />';
}

Was ich nicht verstehe, ist der 4. und 5. Parameter im add_settings_field (). Ich weiß, der erste ist die ID, der zweite ist der Name, der dritte ist der Rückruf, um ihn anzuzeigen, aber wofür sind die nächsten? Sie haben ch_essentials_front_page_option für beide, ich habe nur 'general' an der gleichen Stelle, der nächste ist leer und der letzte ist jetzt das args-Array. Im Rückruf haben Sie also get_option mit diesem Wert, aber ich weiß nicht, was ich dort in meinen Fall schreiben soll.
Richard Mišenčík

2
Es wurden Änderungen vorgenommen, die Sie zu 100% in Schwung bringen sollten. Lassen Sie mich wissen, wenn Sie Probleme oder Fragen haben. Ich habe es heftig kommentiert.
MrJustin

@ MrJusting Vielen Dank. Ich habe es tatsächlich zum Laufen gebracht, indem ich mir dein Profil angesehen und eine Frage überprüft habe, die du beantwortet hast: "Tabs auf einer benutzerdefinierten Menüseite implementieren". Es wurde sehr gut kommentiert, also habe ich meinen Code verglichen und endlich verstanden, wie es funktioniert. Für mich waren die Seiten- und Abschnittsparameter verwirrend, ich dachte, es war wie ein Abschnitt der Seite und nicht der Abschnitt der Einstellungen. Jetzt habe ich beide zusammengefügt und $ args um einen weiteren Wert erweitert. Das erste ist die Feld-ID und das zweite die Beschreibung. Anschließend habe ich die Rückruffunktion um eine weitere Zeile erweitert, um die Beschreibung mit args [1] zu
wiederholen

Toll, ich bin froh, dass du es herausgefunden hast, wenn du irgendwelche Fragen hast, lass es mich wissen.
MrJustin

Ich denke, ich versuche jetzt, eine separate Menüseite zu erstellen und die Optionen dort hinzuzufügen, da sie im Allgemeinen und im Grunde verloren gehen. Ich werde Sie wissen lassen, wie das
gelaufen ist

0

Besser ist es, ein WordPress-Options-Plugin zu verwenden. Eines der besten ist Advanced Custom Fields.

http://www.advancedcustomfields.com/

Wenn Sie ein Optionsseiten-Addon kaufen, können Sie eine unbegrenzte Optionsseite mit vielen Funktionen erstellen. Bitte was raus ein Video.

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

Sehr nützliches Plugin und Addon.


3
Ich möchte nur ein paar Felder hinzufügen, also wäre ein Plugin nur dafür ein Overkill für mich, aber danke.
Richard Mišenčík

8
Ganz zu schweigen davon, dass dies nicht das löst, was das OP wollte, nämlich Felder zu den allgemeinen Einstellungen hinzuzufügen. AFAIK, ACF erlaubt Ihnen nicht, Felder an die allgemeinen Einstellungen anzuhängen.
NW Tech
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.