Ich will nicht das Standard-Widget mit nur CSS-Stil. Ich will das default ‚Kategorien‘ Widget Inhalt mit meiner eigenen HTML-Struktur angezeigt werden soll.
Gibt es verfügbar jeden Filter oder Haken zu tun?
Ich will nicht das Standard-Widget mit nur CSS-Stil. Ich will das default ‚Kategorien‘ Widget Inhalt mit meiner eigenen HTML-Struktur angezeigt werden soll.
Gibt es verfügbar jeden Filter oder Haken zu tun?
Antworten:
So erweitert Antwort auf Mark, gibt es nicht viel ( in der Regel) in der Art und Weise von Filtern in den Standard - Wordpress - Widgets (außer vielleicht widget_text
).
Aber deine eigenen individuell gestaltetes Hinzufügen Widget einfach - diese in deinem functions.php
:
require_once("my_widget.php");
add_action("widgets_init", "my_custom_widgets_init");
function my_custom_widgets_init(){
register_widget("My_Custom_Widget_Class");
}
Dann mögen Sie einfach die bestehenden Kategorien von Widget zu kopieren , wp-includes/widgets/class-wp-widget-categories.php
um my_widget.php
in Ihrem Thema, und die Klassennamen wie im Aufruf verwendet , um den gleichen Namen ändern register_widget()
oben.
Nehmen Sie dann die gewünschten Änderungen vor! Ich schlage vor, die Änderung den Titels zu, so dass Sie es von der Standard-Kategorien Widget unterscheiden können.
Sie können die Standardwordpress - Widgets überschreiben , indem sie erstrecken. Den Code für das Standardwidget "Kategorien" finden Sie unter folgendem Link: https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/
und unten ist ein Beispiel-Code, wie Sie die Ausgabe des Widgets überschreiben können.
Class My_Categories_Widget extends WP_Widget_Categories {
function widget( $args, $instance ) {
// your code here for overriding the output of the widget
}
}
function my_categories_widget_register() {
unregister_widget( 'WP_Widget_Categories' );
register_widget( 'My_Categories_Widget' );
}
add_action( 'widgets_init', 'my_categories_widget_register' );
Sie müssen kein komplett neues Widget erstellen, um das zu tun, was Sie tun müssen. Während ich Ihre Frage lese, sind Sie nur daran interessiert, die Anzeige der Kategorien im Frontend zu ändern. Es gibt zwei Funktionen, die die Kategorien am Frontend anzeigen
wp_list_categories()
das zeigt die Kategorien in einer Liste
wp_dropdown_categories()
die Displays Kategorien in einer Dropdown-Liste
Dies alles hängt davon ab, welche Option wurde im Backend ausgewählt
Nun, jeder dieser beiden Funktionen hat einen Widget spezifischen Filter ( widget_categories_args
und widget_categories_dropdown_args
jeweils ) , die Sie die Argumente zu ändern , verwenden können , die auf diese Funktionen übergeben werden sollen. Damit können Sie das Verhalten der Liste / Drop - Down zu ändern. Dies kann jedoch nicht ausreichen , um zu tun , was Sie wollen.
Alternativ hat jede Funktion einen eigenen Filter vollständig die Art und Weise zu verändern, wie diese Funktionen ihre Ausgabe angezeigt werden sollen.
Sie sind jeweils
Wir können das verwenden widget_title
Filter , um speziell die Widget nur und nicht andere Instanzen dieser Funktionen zu zielen.
Kurz gesagt, können Sie Folgendes versuchen: ( TOTALLY UNTESTED )
add_filter( 'widget_title', function( $title, $instance, $id_base )
{
// Target the categories base
if( 'categories' === $id_base ) // Just make sure the base is correct, I'm not sure here
add_filter( 'wp_list_categories', 'wpse_229772_categories', 11, 2 );
//add_filter( 'wp_dropdown_cats', 'wpse_229772_categories', 11, 2 );
return $title;
}, 10, 3 );
function wpse_229772_categories( $output, $args )
{
// Only run the filter once
remove_filter( current_filter(), __FUNCTION__ );
// Get all the categories
$categories = get_categories( $args );
$output = '';
// Just an example of custom html
$output .= '<div class="some class">';
foreach ( $categories as $category ) {
// Just an example of custom html
$output .= '<div class="' . echo $category->term_id . '">';
// You can add any other info here, like a link to the category
$output .= $category->name;
// etc ect, you get the drift
$output .= '</div>';
}
$output .= '</div>';
return $output;
}, 11, 2 );