Come posso modificare l'output del widget predefinito di WordPress?


17

Non voglio dare uno stile al widget predefinito solo con CSS. Voglio visualizzare il contenuto predefinito del widget "Categorie" con la mia struttura HTML.

Sono disponibili filtri o hook per farlo?


2
Scrivi il tuo widget che fa quello che vuoi. Inizia copiando il codice del widget delle categorie ed esegui le modifiche.
Mark Kaplun,

Grazie, di solito seguo questo trucco per apportare le modifiche al mio widget. È il metodo più semplice mi sembra.
Eh Jewel,

Risposte:


13

Per espandere la risposta di Mark, non c'è molto (generalmente) disponibile come filtri nei widget di WordPress predefiniti (tranne forse widget_text).

Ma aggiungere il tuo widget personalizzato è facile: mettilo nel tuo 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");
}

Quindi vuoi semplicemente copiare il widget delle categorie esistenti da wp-includes/widgets/class-wp-widget-categories.phpa my_widget.phpnel tuo tema e cambiare il nome della classe con lo stesso nome usato nella chiamata in register_widget()alto.

Quindi apporta le modifiche che desideri! Suggerisco di cambiare anche il titolo in modo da poterlo distinguere dal widget Categorie predefinito.


10

Puoi sovrascrivere i widget WordPress predefiniti estendendoli. Il codice per il widget Categorie predefinito è disponibile al seguente link: https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/

e di seguito è riportato un codice di esempio su come sovrascrivere l'output del widget.

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' );

1
E il motivo per cui non l'ho offerto come opzione è che potresti volere il comportamento originale ad un certo punto e con la tua soluzione perdi solo la capacità di ottenerlo.
Mark Kaplun,

Sì, se si desidera avere il widget predefinito così com'è, è meglio registrare un widget completamente nuovo. codex.wordpress.org/Function_Reference/register_widget
Boris Kuzmanov

8

Non è necessario creare un nuovo widget completo per fare ciò che è necessario. Mentre leggo la tua domanda, sei solo interessato a cambiare la modalità di visualizzazione delle categorie sul front-end. Esistono due funzioni che visualizzano le categorie sul front-end

Tutto dipende da quale opzione è stata selezionata nel backend

Ora, ognuna di queste due funzioni ha un filtro specifico per widget ( widget_categories_argse widget_categories_dropdown_argsrispettivamente ) che puoi usare per modificare gli argomenti che dovrebbero essere passati a queste funzioni. Puoi usarlo per modificare il comportamento dell'elenco / menu a discesa. Tuttavia, questo potrebbe non essere sufficiente per fare ciò che desideri.

In alternativa, ogni funzione ha il suo filtro per modificare completamente il modo in cui queste funzioni dovrebbero visualizzare il loro output.

Lo sono rispettivamente

Possiamo usare il widget_titlefiltro per indirizzare in modo specifico solo il widget e non altre istanze di queste funzioni.

In breve, puoi provare quanto segue: ( COMPLETAMENTE NON TESTATO )

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 );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.