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.

<!– Bileşen Tema Görünüm Alanı Başla–> 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.


Bunlar da İlginizi Çekebilir
WordPress Tema Kodlama Eğitimi Ücretsiz

Bu sayfada ücretsiz tema Kodlama eğitimini paylaşacağız. Bunun için html bir şablonu kullanacağız. Sırayla eğitimler tek tek eklenecektir.   Ders 1: WordPress Temasını Tanıyalım  

WordPress The requested URL was not found on this server Hatasının Çözümü

WordPress 404 not found hatası karşılaşabileceğiniz en yaygın hatalardan biridir. Bu hatanın çözümü için farklı yollar var. Yollardan hangisi size uyarsa onu kullanabilirsiniz.

WordPress Yönetim Paneli Footer Alanındaki Versiyon Bilgisini Kaldırmak

WordPress sitenizdeki footer kısmında yer alan versiyon bilgisini gizlemek isteyebilirsiniz. Bunun için iki kod paylaşacağım. Birinci kod Yönetici dahil tüm kullanıcılardan kaldırıyor. İkinci kod ise yönetici hariç diğer kullanıcılardan kaldırıyor. 1. Kod: Yönetici dahil tüm kullanıcılardan kaldırır. function my_footer_shh() { remove_filter( ‘update_footer’, ‘core_update_footer’ ); } add_action( ‘admin_menu’, ‘my_footer_shh’ ); 2. Kod: Yönetici hariç diğer kullanıcılardan […]

Yorum Yok
Yazımız ile ilgili fikirlerinizi paylaşırsanız mutlu oluruz.

59 + = 67