WordPress varsayılan widget çıktısını nasıl değiştirebilirim?


17

Varsayılan widget'ı yalnızca CSS ile biçimlendirmek istemiyorum. Varsayılan 'Kategoriler' widget içeriğini kendi HTML yapımla görüntülemek istiyorum.

Bunu yapmak için herhangi bir filtre veya kanca var mı?


2
İstediğinizi yapan kendi widget'ınızı yazın. Kategoriler widget'ının kodunu kopyalayarak başlayın ve değişiklikler yapın.
Mark Kaplun

Teşekkürler, widget modifikasyonlarımı yapmak için genellikle bu numarayı takip ederim. Bana göre daha kolay bir yöntem.
Eh Jewel

Yanıtlar:


13

Mark'ın cevabını genişletmek için, varsayılan WordPress widget'larındaki (belki de hariç widget_text) filtrelerde çok fazla (genellikle ) yoktur.

Ancak kendi özel widget'ınızı eklemek kolaydır - bunu aşağıdakilere ekleyin 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");
}

Sonra sadece mevcut kategoriler arasından widget'ı kopyalamak istediğiniz wp-includes/widgets/class-wp-widget-categories.phpiçin my_widget.phpsizin tema ve yapılan çağrıda kullanılan aynı isme sınıf adını değiştirmek register_widget()üzerindedir.

O zaman istediğiniz değişiklikleri yapın! Başlığı da varsayılan Kategoriler widget'ından ayırt edebilmeniz için değiştirmenizi öneririm.


10

Varsayılan WordPress widget'larını genişleterek geçersiz kılabilirsiniz. Varsayılan Kategoriler widget'ının kodu aşağıdaki bağlantıda bulunabilir: https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/

ve aşağıda widget'ın çıktısını nasıl geçersiz kılacağınıza dair bir örnek kod verilmiştir.

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
Bunu bir seçenek olarak sunmamamın nedeni, orijinal davranışı bir noktada isteyebilmeniz ve çözümünüzle bunu elde etme yeteneğinizi kaybetmenizdir.
Mark Kaplun

Evet, varsayılan widget'ı olduğu gibi kullanmak istiyorsanız, tamamen yeni bir widget kaydetmek daha iyidir. codex.wordpress.org/Function_Reference/register_widget
Boris Kuzmanov

8

Yapmanız gerekeni yapmak için tamamen yeni bir widget oluşturmanız gerekmez. Sorunuzu okurken, kategorilerin ön uçta nasıl görüntüleneceğini değiştirmekle ilgileniyorsunuz. Ön uçta kategorileri görüntüleyen iki işlev vardır

Bu, arka uçta hangi seçeneğin seçildiğine bağlıdır

Şimdi, bu iki işlevin her birinde, bu işlevlere geçirilmesi gereken bağımsız değişkenleri değiştirmek için kullanabileceğiniz widget'a özel bir filtre ( widget_categories_argsve widget_categories_dropdown_argssırasıyla ) vardır. Listenin / açılır listenin davranışını değiştirmek için bunu kullanabilirsiniz. Ancak, bu istediğinizi yapmak için yeterli olmayabilir.

Alternatif olarak, her bir fonksiyonun, bu fonksiyonların çıktılarını görüntüleme biçimini tamamen değiştirmek için kendi filtresi vardır.

Sırasıyla

widget_titleFiltreyi, bu işlevlerin diğer örneklerini değil, yalnızca widget'ı özel olarak hedeflemek için kullanabiliriz .

Kısacası, aşağıdakileri deneyebilirsiniz: ( TAMAMEN SINIRSIZ )

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 );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.