WordPress, kullanıcıların web sitelerini özelleştirmelerine olanak tanıyan esnek bir içerik yönetim sistemidir. Bu özelleştirme seçeneklerinden biri de özel widget’lar oluşturma yeteneğidir. Özel widget’lar, WordPress temalarına ek özellikler kazandırarak kullanıcı deneyimini geliştirebilir. Bu makalede, özel widget’ların nasıl oluşturulacağına dair adım adım bir rehber sunulacaktır.
1. Temel Yapı
Özel bir widget oluşturmak için öncelikle PHP programlama diline hakim olmak gereklidir. WordPress, widget’lar için bir API sağlar ve bu API kullanılarak yeni widget’lar geliştirilebilir. İlk adım, widget sınıfını oluşturarak başlar:
“`php
class My_Custom_Widget extends WP_Widget {
function __construct() {
parent::__construct(
‘my_custom_widget’, // Base ID
__(‘My Custom Widget’, ‘text_domain’), // Name
array( ‘description’ => __( ‘A custom widget for demonstration’, ‘text_domain’ ), ) // Args
);
}
public function widget( $args, $instance ) {
// Widget çıktısı burada oluşturulur
}
public function form( $instance ) {
// Admin panelinde widget ayarları için form
}
public function update( $new_instance, $old_instance ) {
// Widget güncellendiğinde verileri güncelleme
}
}
function register_my_custom_widget() {
register_widget( ‘My_Custom_Widget’ );
}
add_action( ‘widgets_init’, ‘register_my_custom_widget’ );
“`
2. Widget Çıktısı
`widget` fonksiyonu, widget’ın ön uçta nasıl görüneceğini belirler. Bu fonksiyon, widget’ın çıktısını oluşturur:
“`php
public function widget( $args, $instance ) {
echo $args[‘before_widget’];
if ( ! empty( $instance[‘title’] ) ) {
echo $args[‘before_title’] . apply_filters( ‘widget_title’, $instance[‘title’] ) . $args[‘after_title’];
}
// Widget içeriği burada eklenebilir
echo $args[‘after_widget’];
}
“`
3. Admin Panelinde Ayarlar
`form` fonksiyonu, WordPress admin panelinde widget için kullanılacak ayar formunu oluşturur. Bu formda kullanıcılar widget’ın davranışını ve görünümünü özelleştirebilir:
“`php
public function form( $instance ) {
$title = ! empty( $instance[‘title’] ) ? $instance[‘title’] : __( ‘New title’, ‘text_domain’ );
?>