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?
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?
Risposte:
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.php
a my_widget.php
nel 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.
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' );
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
wp_list_categories()
che visualizza le categorie in un elenco
wp_dropdown_categories()
che visualizza le categorie in un elenco a discesa
Tutto dipende da quale opzione è stata selezionata nel backend
Ora, ognuna di queste due funzioni ha un filtro specifico per widget ( widget_categories_args
e widget_categories_dropdown_args
rispettivamente ) 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_title
filtro 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 );