it-swarm-eu.dev

Jak mohu upravit výchozí výstup widgetu WordPress?

Nechci styl výchozí widget s pouze CSS. Chci zobrazit výchozí obsah widgetu 'Kategorie' s vlastní strukturou HTML.

Je k dispozici nějaký filtr nebo háček?

14
Eh Jewel

Chcete-li rozšířit na Mark odpověď, není mnoho (obecně) k dispozici ve způsobu filtrů ve výchozím WordPress widgety (s výjimkou snad widget_text).

Přidání vlastního vlastního widgetu je však snadné - vložte to do souboru 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");
}

Pak jednoduše chcete zkopírovat existující widget kategorií z wp-includes/widgets/class-wp-widget-categories.php do my_widget.php ve vašem motivu a změnit název třídy na stejný název, jaký byl použit ve volání register_widget() výše.

Pak udělejte jakékoli změny, které se vám líbí! Doporučuji také změnit název, abyste jej mohli odlišit od výchozího widgetu Kategorie.

13
Tim Malone

Výchozí widgety WordPress můžete přepsat rozšířením. Kód pro výchozí widget widget lze nalézt na následujícím odkazu: https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/

a níže je příklad kódu, jak můžete přepsat výstup widgetu.

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' );
9
Boris Kuzmanov

Nemusíte vytvářet kompletní nový widget, abyste mohli dělat to, co musíte udělat. Jak jsem četl vaši otázku, máte zájem pouze o změnu způsobu zobrazení kategorií na přední straně. Existují dvě funkce, které zobrazují kategorie na přední straně

To vše závisí na tom, která možnost byla v backendu vybrána

Každá z těchto dvou funkcí má nyní filtr specifický pro widget (widget_categories_args a widget_categories_dropdown_args respektive ), který můžete použít ke změně argumentů, které by měly být předány těmto funkcím. Můžete to změnit chování seznamu/rozevíracího seznamu. To však nemusí být dostačující k tomu, co chcete.

Alternativně má každá funkce svůj vlastní filtr, aby zcela změnila způsob, jakým by tyto funkce měly zobrazovat svůj výstup.

Ty jsou resp

Filtr widget_title můžeme použít k cílení pouze na widget a ne na jiné instance těchto funkcí.

Stručně řečeno, můžete vyzkoušet následující: ( 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 );
7
Pieter Goosen