Comment modifier le résultat par défaut du widget WordPress?

11

Je ne souhaite pas attribuer un style au widget par défaut uniquement avec CSS. Je souhaite afficher le contenu du widget "Catégories" par défaut avec ma propre structure HTML.

Y a-t-il un filtre ou un crochet disponible pour le faire?

    
posée Eh Jewel 15.06.2016 - 08:23

3 réponses

10

Pour développer la réponse de Mark, il n’ya pas beaucoup (généralement) de filtres dans les widgets WordPress par défaut (sauf peut-être widget_text ).

Mais ajouter votre propre widget personnalisé est facile - mettez ceci dans votre 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");
}

Ensuite, vous souhaitez simplement copier le widget de catégories existant de wp-includes/widgets/class-wp-widget-categories.php vers my_widget.php dans votre thème, puis modifier le nom de la classe sur le même nom que celui utilisé dans l'appel à register_widget() ci-dessus.

Ensuite, apportez les modifications souhaitées! Je suggère également de modifier le titre afin que vous puissiez le distinguer du widget Catégories par défaut.

    
réponse donnée Tim Malone 15.06.2016 - 10:23
8

Vous pouvez remplacer les widgets WordPress par défaut en les étendant. Le code du widget Catégories par défaut est disponible à l'adresse suivante: enlace

et ci-dessous est un exemple de code permettant de remplacer la sortie du 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' );
    
réponse donnée Boris Kuzmanov 15.06.2016 - 10:35
7

Vous n'avez pas besoin de créer un nouveau widget complet pour faire ce que vous devez faire. En lisant votre question, vous ne souhaitez que changer la façon dont les catégories sont affichées au début. Il y a deux fonctions qui affichent les catégories sur le front-end

Tout dépend de quelle option a été sélectionnée dans le backend

Chacune de ces deux fonctions possède désormais un filtre spécifique aux widgets ( widget_categories_args et widget_categories_dropdown_args ) que vous pouvez utiliser pour modifier les arguments devant être transmis à ces fonctions. Vous pouvez l'utiliser pour modifier le comportement de la liste / du menu déroulant. Cependant, cela peut ne pas suffire pour faire ce que vous voulez.

Chaque fonction dispose également de son propre filtre pour modifier complètement le mode d'affichage de la sortie de ces fonctions.

Ils sont respectivement

Nous pouvons utiliser le filtre widget_title pour cibler spécifiquement le widget et non les autres instances de ces fonctions.

En résumé, vous pouvez essayer les solutions suivantes: ( TOTALEMENT INATTENDU )

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 );
    
réponse donnée Pieter Goosen 15.06.2016 - 13:36

Lire d'autres questions sur les étiquettes