WordPress Temaya Özel Bileşen Yapımı

Tema kodluyorsanız, temanız için özel bileşen yapmak isteyebilirsiniz. Mesela sidebarda resimli son haberler kısmı gibi. Bu yapmak çok basit aslında. Sizlere hazır bir kod bloğu paylaşacağım. Bu kod bloğu üzerinde değişiklikler yaparak kullanabilirsiniz. Aşağıdaki kod bloğunu temanızın functions.php dosyasında

<?php

den sonra ekleyiniz.


/**
* Tema Adı : Bileşen Adı
*/

// Widget'ı kaydedin
add_action( 'widgets_init', create_function( '', 'return register_widget("Theme_Name_Widget");'));

// Widget sınıfı
class Theme_Name_Widget extends WP_Widget {

public function __construct() {
$widget_ops = array('classname' => 'blok1_widget', 'description' => esc_html__( "textdomain Sağ Bileşen Alanı için Son Haberler Yayınlar.", 'textdomain') );
parent::__construct('son_haberler_block', esc_html__('Tema Son Haberler', 'textdomain'), $widget_ops);
$this->alt_option_name = 'widget_blok1';

add_action( 'save_post', array($this, 'remove_cache') );
add_action( 'deleted_post', array($this, 'remove_cache') );
add_action( 'switch_theme', array($this, 'remove_cache') );
}

public function widget( $args, $instance ) {
//extract( $args );
$cache = array();
if ( ! $this->is_preview() ) {
$cache = wp_cache_get( 'widget_blok1', 'widget' );
}
if ( ! is_array( $cache ) ) {
$cache = array();
}
if ( ! isset( $args['widget_id'] ) ) {
$args['widget_id'] = $this->id;
}
if ( isset( $cache[ $args['widget_id'] ] ) ) {
echo $cache[ $args['widget_id'] ];
return;
}
ob_start();

// Widget ayarlarından değerleri alın.
$title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : '';
$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
$featured_categories = ( ! empty( $instance['featured_categories'] ) ) ? $instance['featured_categories'] : '';
$ignore_sticky = isset($instance['ignore_sticky']) ? $instance['ignore_sticky'] : 1;
$number_posts = ( ! empty( $instance['number_posts'] ) ) ? absint( $instance['number_posts'] ) : 4;
if ( ! $number_posts ) $number_posts = 4;

$r = new WP_Query( apply_filters( 'widget_blok1_posts_args', array(
'post_type' => 'post',
'posts_per_page' => $number_posts,
'category__in' => $featured_categories,
'post_status' => 'publish',
'ignore_sticky_posts' => $ignore_sticky,
) ) );

if ($r->have_posts()) : ?>
<?php echo $args['before_widget']; ?>

<?php if ( $title ) echo $args['before_title'] . $title . $args['after_title']; ?>

<!-- Bileşen Tema Görünüm Alanı Başla -->

<div class="single__widget recent__post">
<?php while ( $r->have_posts() ) : $r->the_post(); ?>

<ul>
<li>
<?php if ( has_post_thumbnail()) : ?>
<a href="<?php the_permalink(); ?>"><img src="<?php echo get_the_post_thumbnail_url();?>" alt="<?php the_title(); ?>"></a>
<?php else: ?>
<?php endif;?>
<div class="post__content">
<h6><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h6>
<span class="date"><i class="fa fa-calendar"></i><?php the_time('j F, Y'); ?></span>
</div>
</li>

</ul>
<?php endwhile; ?>
</div>

<!-- Bileşen Tema Görünüm Alanı Bitiş -->

<?php echo $args['after_widget']; ?>
<?php
// Global $ the_post değerini bu sorgu üzerinde durduğu için sıfırlayın
wp_reset_postdata();

endif;

if ( ! $this->is_preview() ) {
$cache[ $args['widget_id'] ] = ob_get_flush();
wp_cache_set( 'widget_blok1', $cache, 'widget' );
} else {
ob_end_flush();
}
}

public function update( $new_instance, $old_instance ) {
$instance = $old_instance;

$this->remove_cache();
$alloptions = wp_cache_get( 'alloptions', 'options' );
if ( isset($alloptions['widget_recent_entries']) ) delete_option('widget_recent_entries');

$new_instance = wp_parse_args( $new_instance, array(
'title' => '',
'ignore_sticky' => '',
'featured_categories' => '',
'number_posts' => '',
) );

$instance['title'] = sanitize_text_field( $new_instance['title'] );
$instance['ignore_sticky'] = isset($new_instance['ignore_sticky']) && $new_instance['ignore_sticky'] ? 1 : 0;
$instance['featured_categories'] = isset( $new_instance['featured_categories'] ) ? array_map( 'absint', ( array) $new_instance['featured_categories'] ) : false ;
$instance['number_posts'] = absint( $new_instance['number_posts'] );

return $instance;
}

public function remove_cache() {
wp_cache_delete('widget_blok1', 'widget');
}

public function form( $instance ) {

// Varsayılan değeri ayarla.
$defaults = array(
'title' => '',
'featured_categories' => '',
'ignore_sticky' => 1,
'number_posts' => 4,
);
$instance = wp_parse_args( (array) $instance, $defaults );
$featured_categories = (array)$instance['featured_categories'];
$list_categories = get_categories();
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e('Bileşen Başlığı:', 'textdomain') ?></label>
<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
</p>
<?php $categories = get_categories(); ?>
<p>
<label for="<?php echo $this->get_field_id( 'featured_categories' ); ?>"><?php esc_html_e('Birden Fazla Kategori Seçebilirsiniz (varsayılan olarak tümü seçili):', 'textdomain') ?></label>
<select class="widefat" multiple="multiple" name="<?php echo $this->get_field_name( 'featured_categories' );?>[]" id="<?php echo $this->get_field_id( 'featured_categories' );?>">
<?php foreach ( $categories as $category ) { ?>
<option value="<?php echo $category->term_id; ?>" <?php echo in_array( $category->term_id, $featured_categories ) ? 'selected="selected" ' : '';?>><?php echo $category->name . " (". $category->count . ")"; ?></option>
<?php } ?>
</select>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'number_posts' ); ?>"><?php esc_html_e('Gösterilecek gönderi sayısı:', 'textdomain') ?></label>
<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'number_posts' ); ?>" name="<?php echo $this->get_field_name( 'number_posts' ); ?>" value="<?php echo $instance['number_posts']; ?>" />
</p>
<p>
<input id="<?php echo $this->get_field_id('ignore_sticky'); ?>" name="<?php echo $this->get_field_name('ignore_sticky'); ?>" type="checkbox" value="1" <?php checked('1', $instance['ignore_sticky']); ?>/>
<label for="<?php echo $this->get_field_id('ignore_sticky'); ?>"><?php esc_html_e('Sabit Mesajları Yoksay', 'textdomain') ?></label>
</p>

<?php
}
}

&nbsp;

 

 

Bileşeni kullanmak için Theme_Name ve textdomain yazan yerlere kendi temanızı yazınız.

Alanındaki kısım sizin temanızda görünecek alandır. Bu kısmı kendi temanızdaki ile değiştirip kodlayın. Döngü kodlarını da gösterildiği gibi yazın. Bu kadar. takıldığınız yer olursa yorum alanına yazın lütfen.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

74 + = 79