it-swarm.com.de

Hinzufügen einer Anpassungseinstellung im untergeordneten Design

Ich möchte dem Customizer meines Child-Themas eine Option hinzufügen, habe jedoch einige Probleme bei der Implementierung. Ich bin mir ziemlich sicher, dass mein Problem mit dem Namen der Argumente zusammenhängt, die ich anrufe, aber ich bin mir nicht sicher. Wenn Sie also etwas anderes sehen, zögern Sie nicht, mir Ihre Meinung mitzuteilen.

Was ich vermute, ist falsch:

  1. Ich bin nicht sicher, welche Argumente in meinem functions.php den Namen des untergeordneten Themas (z. B. child_theme_name/tesseract-child) und den Titel des übergeordneten Themas (z. B. parent_theme_name/tesseract) haben sollen. Normalerweise würde ich davon ausgehen, dass ich immer den Namen des untergeordneten Themas verwenden sollte, aber die Deklaration für die Panels in der Datei customizer.php des übergeordneten Themas enthält den Namen (tesseract_footer_options) des übergeordneten Themas, und ich bin mir nicht sicher, ob WordPress diesen Namen ändert, wenn untergeordnete Themen verwendet werden. Sollte beispielsweise das erste Argument in add_section in einem untergeordneten Thema parent_theme_name_footer_options oder child_theme_name_footer_options sein

  2. Wenn ich den Namen eines Kinderthemas verwenden soll, bin ich verwirrt. Wenn ich versuche, die Funktion mit einem Verweis auf den Namen des untergeordneten Themas (z. B. tesseract-child_options) zu benennen, der Bindestriche enthält, wird eine Fehlermeldung angezeigt. Also, ich glaube nicht, dass PHP Funktionen mag, die mit Bindestrichen benannt sind, und tatsächlich habe ich gelesen, dass dieses PHP Bindestriche in Funktionsnamen nicht zulässt. Ein weiterer Hinweis darauf, dass Bindestriche schlecht sind: Die Bindestriche aus dem Namen des untergeordneten Themas haben nicht nur einen Absturz verursacht, sondern mein Editor (erhabener Text) hat den Code seltsam markiert. Um zu testen, ob Bindestriche das Problem waren, habe ich den Namen der Funktion unter Verwendung aller Unterstriche in tesseract_child_options geändert. Dies scheint mir jedoch falsch zu sein, da der Name des Themas technisch tesseract-child mit einem Bindestrich und nicht tesseract_child mit einem Unterstrich ist.

Der Code

Dies ist die Deklaration des Bedienfelds in der Datei customizer.php des übergeordneten Themas:

$wp_customize->add_panel( 'tesseract_footer_options', array(

'priority'       => 5,

'capability'     => 'edit_theme_options',

'title'          => 'Footer Options',

//'description'  => ''

) );

Dies ist der Code, den ich in der function.php-Datei meines untergeordneten Themas verwende, um zu versuchen, diesem Optionsfeld einen Abschnitt hinzuzufügen:

add_action( 'customize_register' , 'tesseract_child_options' );

function tesseract_child_options( $wp_customize ) {

$wp_customize->add_section( 
    'tesseract_footer_options', 
    array(
        'title'       => __( 'Reblog Options', 'tesseract' ),
        'priority'    => 100,
        'capability'  => 'edit_theme_options',
        'description' => __('Change Reblog Options Here.', 'tesseract'), 
    ) 
);


$wp_customize->add_setting( 'number_of_reblogs',
    array(
        'default' => '3'
    )
);  

$wp_customize->add_control( new WP_Customize_Control( 
    $wp_customize, 
    'reblog_number_control',
    array(
        'label'    => __( 'Number of Reblogs', 'tesseract-child' ), 
        'section'  => 'tesseract_footer_options',
        'settings' => 'reblog_number',
        'type'     => 'text',
        'priority' => 10,
    ) 
));

}

Jede Hilfe wäre sehr dankbar! Vielen Dank!

AKTUALISIERUNG DER ANTWORT VON PROSTI:

@Prosti beantwortete die Frage, aber ich möchte nur klären, was für jeden, der versucht, herauszufinden, wie das geht, falsch war:

  1. Der Name der gesamten Funktion, die von der Aktion customize_register aufgerufen wird, ist willkürlich. Sie können ihn beliebig benennen, solange Sie keine Bindestriche einfügen. Beachten Sie, dass sich dieser Funktionsname nicht in irgendeiner Weise auf den Namen des übergeordneten Themas oder des untergeordneten Themas beziehen muss. Um dies zu veranschaulichen, habe ich in meinem Arbeitsbeispiel (siehe unten) den Funktionsnamen, den ich in meiner ersten Frage verwendet habe, von tesseract_child_options in childtheme_customize_register geändert. Bitte beachten Sie, dass Sie in dieser Funktion zwar nicht auf das untergeordnete Thema oder den Namen des übergeordneten Themas verweisen müssen, dies jedoch nur aus Gründen der Lesbarkeit und nicht der Funktionalität sinnvoll ist.

  2. Der Name des Abschnitts, den Sie erstellen (das erste Argument in der Funktion add_section), ist willkürlich. Sie können ihn beliebig benennen. Dies ist ein Tag, das WP für die interne Übergabe der Variablen verwendet. Der Text, den Sie in das zweite Argument von add_section einfügen, bestimmt, welcher Text angezeigt wird, wenn Sie zum ersten Mal im Stammmenü des Customizers landen (dem ersten Menü, das angezeigt wird). Wiederum schreibt die gute Praxis vor, dass aus Gründen der Lesbarkeit ein mit dem Thema verbundener Name verwendet wird.

  3. In den Funktionen add_section und add_control mussten alle zwei von mir verwendeten Argumentanweisungen (z. B. title, description und label) den genauen Namen des untergeordneten Themas als zweites Argument haben. Wenn der Name des untergeordneten Themas Bindestriche enthält (wie dies bei meinem der Fall war, z. B. tesseract-child), sollte auch dieses zweite Argument Bindestriche enthalten.

  4. Die priority des Abschnitts bestimmt, wo (d. H. Wie hoch oder niedrig) der von mir erstellte Abschnitt in die Optionsliste fällt. Die Fußzeile befand sich im vierten Abschnitt des übergeordneten Elements und hatte die Priorität 5. Wenn ich die Priorität innerhalb von add_section festgelegt habe, um eine Priorität von 4 zu erhalten, wurde die Option über dem Optionsfeld für die Fußzeile angezeigt. Wenn ich sie auf 6 festgelegt habe, wurde sie unterschritten.

Beispiel für Arbeitscode

 
 add_action ('custom_register', 'childtheme_customize_register'); // Das zweite Argument ist willkürlich, kann jedoch keine Bindestriche enthalten, da PHP sie in Funktionsnamen nicht zulässt. 
 
 
 
 function childtheme_customize_register ($ wp_customize) {
 
 $ wp_customize-> add_section (
 'tesseract_reblog_options', 
 array (
 'title' => __ ('Reblog Options', 'tesseract- child '), // 2nd arg entspricht dem Namen des untergeordneten Themas 
' priority '=> 6, // setze den Abschnitt unter den Footer-Optionen in die Liste 
' capacity '=>' edit_theme_options ', 
 'description' => __ ('Change Reblog Options Here', 'tesseract-child'), // 2nd arg entspricht dem Namen des untergeordneten Themas 
) 
); 
 
 
 $ wp_customize-> add_setting ('number_of_reblogs', 
 array (
 'default' => '3' 
) 
); 
 
 $ wp_customize-> add_control ('setting_id', array (
 'label' => __ ('Anzahl der Reblogs', 'tesseract-child'), // 2nd arg entspricht dem Namen des untergeordneten Themas 
 'section' => 'tesseract_reblog_options', 
 'settings' => 'number_of_reblogs', 
 'type' => 'text', 
 'Priorität' => 6 
)); 
} 
 
3

OK, lesen Sie das Theme Developer Handbuch .

$wp_customize->add_control( 'reblog_number_control', array(
  'label'    => __( 'Number of Reblogs', 'tesseract-child' ), 
    'section'  => 'tesseract_footer_options',
    'settings' => 'number_of_reblogs',
    'type'     => 'text',
    'priority' => 10
) );

Da bist du im Kinderthema

'title'       => __( 'Reblog Options', 'tesseract' ),

soll sein

'title'       => __( 'Reblog Options', 'tesseract-child' ),

Mit anderen Worten, Ihre Einstellungen, Steuerelemente und Abschnittsnamen müssen in add_control, add_section, add_setting übereinstimmen.

4
prosti