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ı?
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ı?
Yanıtlar:
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.php
için my_widget.php
sizin 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.
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' );
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
wp_list_categories()
kategorileri bir listede görüntüleyen
wp_dropdown_categories()
kategorileri açılır listede görüntüleyen
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_args
ve widget_categories_dropdown_args
sı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_title
Filtreyi, 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 );