it-swarm.com.de

Wie kann ich die Ausgabe des WordPress-Standardwidgets ändern?

Ich möchte das Standard-Widget nicht nur mit CSS gestalten. Ich möchte den Standardinhalt des Widgets "Kategorien" mit meiner eigenen HTML-Struktur anzeigen.

Gibt es dafür Filter oder Haken?

14
Eh Jewel

Um Marks Antwort zu erweitern, stehen in den Standard-WordPress-Widgets (im Allgemeinen) nicht viele Filter zur Verfügung (außer vielleicht widget_text).

Das Hinzufügen eines eigenen benutzerdefinierten Widgets ist jedoch einfach - fügen Sie dies in Ihren functions.php ein:

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öchten Sie einfach das vorhandene Kategorien-Widget von wp-includes/widgets/class-wp-widget-categories.php nach my_widget.php in Ihrem Design kopieren und den Klassennamen in den Namen ändern, der im Aufruf von register_widget() oben verwendet wurde.

Nehmen Sie dann die gewünschten Änderungen vor! Ich schlage vor, auch den Titel zu ändern, damit Sie ihn vom Standardwidget für Kategorien unterscheiden können.

13
Tim Malone

Sie können die Standard-WordPress-Widgets überschreiben, indem Sie sie erweitern. 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 Beispielcode, 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' );
9
Boris Kuzmanov

Sie müssen kein komplett neues Widget erstellen, um das zu tun, was Sie tun müssen. Während ich Ihre Frage lese, möchten Sie nur ändern, wie die Kategorien im Frontend angezeigt werden. Es gibt zwei Funktionen, die die Kategorien am Frontend anzeigen

Dies hängt alles davon ab, welche Option im Backend ausgewählt wurde

Jetzt hat jede dieser beiden Funktionen einen Widget-spezifischen Filter (widget_categories_args BZW. widget_categories_dropdown_args), mit dem Sie die Argumente ändern können, die an diese Funktionen übergeben werden sollen. Hiermit können Sie das Verhalten der Liste/Dropdown-Liste ändern. Dies reicht jedoch möglicherweise nicht aus, um das zu tun, was Sie möchten.

Alternativ hat jede Funktion einen eigenen Filter, um die Art und Weise, wie diese Funktionen ihre Ausgabe anzeigen sollen, vollständig zu ändern.

Sie sind jeweils

Mit dem widget_title-Filter können wir nur das Widget gezielt ansprechen und nicht andere Instanzen dieser Funktionen.

Kurz gesagt, Sie können 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 );
7
Pieter Goosen