Wie kann ich die Wordpress-Widget Standardausgabe ändern?

16

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?

Eh Juwel
quelle
2
Schreiben Sie Ihr eigenes Widget, das macht, was Sie wollen. Starten Sie durch Kopieren des Codes der Kategorien Widget und tun Modifikationen.
Mark Kaplun
Danke, ich folge in der Regel diesen Trick meine Widget Änderungen zu tun. Das scheint mir die einfachere Methode zu sein.
Eh Jewel

Antworten:

13

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.phpum my_widget.phpin 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.

Tim Malone
quelle
10

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' );
Boris Kuzmanov
quelle
1
Und der Grund, warum ich das nicht als Option angeboten habe, ist, dass Sie vielleicht irgendwann das ursprüngliche Verhalten wollen und mit Ihrer Lösung die Fähigkeit verlieren, es zu bekommen.
Mark Kaplun
Ja, wenn Sie das Standard-Widget so haben möchten, wie es ist, ist es besser, ein völlig neues Widget zu registrieren. codex.wordpress.org/Function_Reference/register_widget
Boris Kuzmanov
7

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

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_argsund widget_categories_dropdown_argsjeweils ) , 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_titleFilter , 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 );
Pieter Goosen
quelle