Come modificare l'output predefinito dei widget in WordPress

15 giu 2016, 09:23:27
Visualizzazioni: 18K
Voti: 19

Non voglio solo stilizzare il widget predefinito con il CSS. Voglio visualizzare il contenuto del widget 'Categorie' predefinito con la mia struttura HTML personalizzata.

Esiste qualche filtro o hook disponibile per farlo?

2
Commenti

Crea il tuo widget personalizzato che faccia ciò che desideri. Inizia copiando il codice del widget delle categorie e apporta le modifiche necessarie.

Mark Kaplun Mark Kaplun
15 giu 2016 09:40:38

Grazie, di solito seguo questo trucco per modificare i miei widget. Mi sembra il metodo più semplice.

Eh Jewel Eh Jewel
26 feb 2018 14:56:55
Tutte le risposte alla domanda 3
0
16

Per ampliare la risposta di Mark, non ci sono molti filtri disponibili (in generale) nei widget predefiniti di WordPress (a parte forse widget_text).

Ma aggiungere il proprio widget personalizzato è semplice: inserisci questo 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");
}

Poi devi semplicemente copiare il widget delle categorie esistente da wp-includes/widgets/class-wp-widget-categories.php a my_widget.php nel tuo tema, e cambiare il nome della classe con lo stesso nome usato nella chiamata a register_widget() sopra.

Quindi fai tutte le modifiche che vuoi! Suggerisco di cambiare anche il titolo così da distinguerlo dal widget predefinito delle categorie.

15 giu 2016 11:23:38
2
12

Puoi sovrascrivere i widget predefiniti di WordPress estendendoli. Il codice per il widget predefinito delle Categorie può essere trovato al seguente link: https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/

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

Class My_Categories_Widget extends WP_Widget_Categories {
    function widget( $args, $instance ) {
        // il tuo codice qui per sovrascrivere l'output del widget
    }
}

function my_categories_widget_register() {
    unregister_widget( 'WP_Widget_Categories' );
    register_widget( 'My_Categories_Widget' );
}
add_action( 'widgets_init', 'my_categories_widget_register' );
15 giu 2016 11:35:50
Commenti

E il motivo per cui non l'ho offerto come opzione è che potresti volere il comportamento originale in qualche momento, e con la tua soluzione perderesti semplicemente la possibilità di ottenerlo.

Mark Kaplun Mark Kaplun
15 giu 2016 12:26:05

Sì, se vuoi mantenere il widget predefinito così com'è, è meglio registrare un widget completamente nuovo. https://codex.wordpress.org/Function_Reference/register_widget

Boris Kuzmanov Boris Kuzmanov
15 giu 2016 12:37:17
0

Non è necessario creare un nuovo widget completo per fare ciò che ti serve. Come ho capito dalla tua domanda, sei interessato solo a modificare il modo in cui le categorie vengono visualizzate sul front end. Ci sono due funzioni che mostrano le categorie sul front end:

Tutto dipende dall'opzione selezionata nel backend.

Ora, ciascuna di queste due funzioni ha un filtro specifico per il widget (widget_categories_args e widget_categories_dropdown_args rispettivamente) che puoi utilizzare per modificare gli argomenti che dovrebbero essere passati a queste funzioni. Puoi usarlo per alterare il comportamento dell'elenco/menu a discesa. Tuttavia, questo potrebbe non essere sufficiente per fare ciò che vuoi.

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

Sono rispettivamente:

Possiamo utilizzare il filtro widget_title per indirizzare specificamente solo il widget e non altre istanze di queste funzioni.

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

add_filter( 'widget_title', function( $title, $instance, $id_base )
{
    // Indirizza la base delle categorie
    if( 'categories' === $id_base ) // Assicurati solo che la base sia corretta, non sono sicuro qui
        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 )
{
    // Esegui il filtro solo una volta
    remove_filter( current_filter(), __FUNCTION__ );

    // Ottieni tutte le categorie
    $categories = get_categories( $args );

    $output = '';
    // Solo un esempio di HTML personalizzato
    $output .= '<div class="some class">';
    foreach ( $categories as $category ) {
        // Solo un esempio di HTML personalizzato
        $output .= '<div class="' . $category->term_id . '">';
        // Puoi aggiungere qualsiasi altra informazione qui, come un link alla categoria
        $output .= $category->name;
        // eccetera, hai capito il concetto
        $output .= '</div>';
    }
    $output .= '</div>';

    return $output;
};
    
15 giu 2016 14:36:18