Bisher haben wir gesehen, wie einfach es ist, Theme-Optionen mit Theme Customizer Boilerplate und seinen Hooks zu handhaben. Wie Sie sich wahrscheinlich erinnern, war der wichtigste Schritt das Einhaken in ‚thsp_cbp_options_array‘ Filter-Hook und übergeben Sie ihm eine Reihe von Optionen, die Sie in Ihrem Design verwenden möchten.
Ich bin sicher, Sie sind bereits mit WordPress-Aktions- und Filter-Hooks – Plugin-API – und ihrer Funktionsweise vertraut, aber für alle Fälle hier eine kurze Zusammenfassung (am Beispiel von Filter-Hooks). Sie können Ihre benutzerdefinierte Funktion definieren und mit der Funktion add_filter in einen vorhandenen Filter einbinden:
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Konzentrieren wir uns auf das vorrangige Argument. Der Standardwert ist 10. Wenn Sie also keine andere Zahl verwenden, hat dies die Ausführungspriorität Ihrer Funktion. Verringern Sie die Zahl, früher wird Ihre Funktion ausgeführt. Wenn Sie also so etwas tun:
// Adding first message
function my_theme_add_first_message( $content ) {
$content .= '<p>First Message</p>';
return $content;
}
add_filter( 'the_content', 'my_theme_add_first_message', 1 );
// Adding second message
function my_theme_add_second_message( $content ) {
$content .= '<p>Second Message</p>';
return $content;
}
add_filter( 'the_content', 'my_theme_add_second_message', 2 );
Wenn Sie die Funktion_content in single.php oder einer anderen Vorlage aufrufen, wird der Beitragsinhalt angezeigt, gefolgt von der ersten Nachricht, gefolgt von der zweiten Nachricht. Nicht, weil dies in diesem Codeausschnitt ihre Reihenfolge ist, sondern wegen des Parameters für die Ausführungspriorität. Stellen Sie sich Haken wie Schneebälle vor, die den Hügel hinunterrollen und auf ihrem Weg alle möglichen Dinge aufpicken.
Wie trifft dies auf Theme Customizer Boilerplate zu?
Du kannst dich einklinken ‚thsp_cbp_options_array‘ aus der Datei function.php Ihres Themes, indem Sie eine benutzerdefinierte Funktion (zB my_theme_options_array) mit dem Prioritätswert 1 verwenden. Das bedeutet jede andere Funktion, die sich einklinkt ‚thsp_cbp_options_array‘ Der Filter-Hook wird es NACH der Funktion my_theme_options_array tun, die Sie bereits definiert haben. Schauen Sie sich dieses Beispiel an:
function my_theme_options_array() {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
$options = array(
// Section ID
'my_theme_new_section' => array(
'existing_section' => false,
'args' => array(
'title' => __( 'New Section', 'my_theme_textdomain' ),
'priority' => 10
),
'fields' => array(
/*
* Radio field
*/
'my_radio_button' => array(
'setting_args' => array(
'default' => 'option-2',
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Radio Button', 'my_theme_textdomain' ),
'type' => 'radio', // Radio control
'choices' => array(
'option-1' => array(
'label' => __( 'Option 1', 'my_theme_textdomain' )
),
'option-2' => array(
'label' => __( 'Option 2', 'my_theme_textdomain' )
),
'option-3' => array(
'label' => __( 'Option 3', 'my_theme_textdomain' )
)
),
'priority' => 3
)
)
)
)
);
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_theme_options_array', 1 );
Dadurch wird dem Theme Customizer ein neuer Abschnitt mit einem Feld namens My Radio Button hinzugefügt. Dann entwickeln Sie oder jemand anderes ein untergeordnetes Thema für Ihr Thema und beschließt, den neuen Abschnitt beizubehalten, aber anstelle von Mein Optionsfeld ist es möglicherweise besser, Mein Kontrollkästchen zu verwenden. Einfach:
function my_child_theme_options_array( $options ) {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
/*
* This time, we're only editing fields in my_theme_new_section in the $options array
*/
$options['my_theme_new_section']['fields'] = array(
'my_checkbox_field' => array(
'setting_args' => array(
'default' => true,
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Checkbox', 'my_theme_textdomain' ),
'type' => 'checkbox', // Checkbox field control
'priority' => 2
)
)
);
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_child_theme_options_array', 2 );
Ist mir aufgefallen, dass ich den Parameter $options nicht an my_theme_options_array übergeben habe und dies in der Funktion my_child_theme_options_array getan habe? Das liegt daran, als ich zum ersten Mal eingehakt habe ‚thsp_cbp_options_array‘ Hook Ich wollte Theme Customizer Boilerplate-Beispieloptionen überschreiben. Als ich dann wieder von meinem Child-Theme eingehakt habe, wollte ich die Optionen des Parent-Themes nicht vollständig löschen, sondern nur leicht bearbeiten. Deshalb spiele ich nur mit $options[‘my_theme_new_section’][‘fields’], nicht das gesamte $options-Array.
Natürlich kannst du auch einhaken ‚thsp_cbp_options_array‘ filtern Sie Hooks mehr als einmal aus Ihrem Parent-Theme. Nehmen wir an, Sie haben sich entschieden, Ihrem Theme keine Plugin-Gebietsfunktionen hinzuzufügen und Plugins tun zu lassen, was sie sollen. Jetzt möchten Sie einige Theme Customizer-Optionen nur dann anzeigen, wenn ein bestimmtes Plugin aktiv ist. Nochmal ganz einfach:
function my_plugin_dependency_options_array( $options ) {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
/*
* Only adding my_plugin_dependency_section if 'test-plugin.php' is active
*/
if ( is_plugin_active( 'test-plugin/test-plugin.php' ) ) {
$options['my_plugin_dependency_section'] = array(
'existing_section' => false,
'args' => array(
'title' => __( 'Plugin Dependency', 'my_theme_textdomain' ),
'priority' => 10
),
'fields' => array(
/*
* Text field
*/
// Field ID
'new_text_field' => array(
'setting_args' => array(
'default' => __( '', 'my_theme_textdomain' ),
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'Only shows if', 'my_theme_textdomain' ),
'type' => 'text', // Text field control
'priority' => 5
)
),
)
);
}
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_plugin_dependency_options_array', 3 );
Willst du entwickeln Kernfunktions-Plugin mit Ihrem Thema verwendet werden (wie Sie sollten)? Du kannst dich einklinken ‚thsp_cbp_options_array‘ auch aus einer der Dateien deines Plugins, genauso wie du es aus der Datei function.php eines Themes machen würdest.
Mach dich nicht verrückt
Jedes Mal, wenn du einem Theme, das du entwickelst, Optionen hinzufügst, musst du eines der Kernprinzipien von WordPress beibehalten — Entscheidung nicht Optionen – im Sinn. Es ist leicht, sich mitreißen zu lassen und Benutzeroptionen für jedes kleine Detail Ihres Themas hinzuzufügen, aber das tut niemandem einen Gefallen. Ich hoffe, dass diese paar Tricks, insbesondere das Hinzufügen von Plugin-abhängigen Optionen, dazu beitragen, die Anzahl der Optionen Ihres Themes so gering wie möglich zu halten.
Wenn Ihr Thema Optionen für Dinge wie jeden Randradius jedes einzelnen Elements hat, ist es schließlich kein Thema, sondern ein WYSIWYG-Editor und wahrscheinlich kein großartiger.
Sie kaufen kein weißes Hemd, weil Sie es mit etwas mehr Aufwand in eine Tischdecke verwandeln können, Sie kaufen es, weil Sie die „Weißhemdigkeit“ mögen. WordPress-Themes sollten auch so sein, sie sollten Inhalte auf eine bestimmte Weise präsentieren und nicht versuchen, alles auf jede erdenkliche Weise zu tun. Wenn Sie ein Theme-Entwickler sind, ist es Ihre Aufgabe, sicherzustellen, dass die Erwartungen der Benutzer so sind, wie sie sein sollten.