Membuat Custom Widget Recent Post

August 19, 2018 Artikel,Snippets Kholis net

Waktu bikin custom theme kadang saya kurang puasa sama tampilan Widget Recent Post bawaan punya WordPress, nah untungnya WordPress menyediakan widget2 yang bisa kita rubah. Asyiknya lagi, kalo ada WordPress update custom widget kita engga berubah. Pada tutorial ini kita akan meng custome Widget Recent Post, kita harus me rename class agar engga bentrok sama widget bawaan WordPress. Gimana caranya? Ikuti step by step nya ya!

Langkah Pertama

1. Copy script Widget Recent Post yang terletak di wp-includes/widget/class-wp-widget-recent-posts.php  ke functions.php

2. Kemudian rubah class , title widget dan deskripsinya. Perhatikan gambar di bawah ini, ganti kata “kholisnet” dengan kata pilihan anda.

3. Setelah itu daftarkan widget nya dengan copy paste script di bawah ini tepat di bawah script Widget Recent Post anda.


function Kholisnet_register_custom_widgets() {
register_widget( 'Kholisnet_WP_Widget_Recent_Posts' );
}
add_action( 'widgets_init', 'kholisnet_register_custom_widgets' );

Full Script Custom Widget Recent Post

Setelah kita membuat custom Widget, berikut full script nya. Script ini kita Copy paste ke functions.php


/**
* Kholisnet_Recent_Posts widget class
*
* @since 2.8.0
*/
class Kholisnet_WP_Widget_Recent_Posts extends WP_Widget {

function __construct() {
$widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "Widget Artikel Terbaru by Kholis.net") );
parent::__construct('kholisnet_recent-posts', __('Widget Artikel Terbaru'), $widget_ops);
$this->alt_option_name = 'widget_recent_entries';

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

function widget($args, $instance) {
$cache = wp_cache_get('widget_recent_posts', '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();
extract($args);

$title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' );
$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
$number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 10;
if ( ! $number )
$number = 10;
$show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false;

$r = new WP_Query( apply_filters( 'widget_posts_args', array( 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true ) ) );
if ($r->have_posts()) :
?>
<?php echo $before_widget; ?>
<?php if ( $title ) echo $before_title . $title . $after_title; ?>
<ul>
<?php while ( $r->have_posts() ) : $r->the_post(); ?>
<li>
<a href="<?php the_permalink() ?>" title="<?php echo esc_attr( get_the_title() ? get_the_title() : get_the_ID() ); ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?></a>
<?php if ( $show_date ) : ?>
<span class="post-date"><?php echo get_the_date(); ?></span>
<?php endif; ?>
</li>
<?php endwhile; ?>
</ul>
<?php echo $after_widget; ?>
<?php
// Reset the global $the_post as this query will have stomped on it
wp_reset_postdata();

endif;

$cache[$args['widget_id']] = ob_get_flush();
wp_cache_set('widget_recent_posts', $cache, 'widget');
}

function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['number'] = (int) $new_instance['number'];
$instance['show_date'] = (bool) $new_instance['show_date'];
$this->flush_widget_cache();

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

return $instance;
}

function flush_widget_cache() {
wp_cache_delete('widget_recent_posts', 'widget');
}

function form( $instance ) {
$title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
$number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5;
$show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false;
?>
<p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" /></p>

<p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of posts to show:' ); ?></label>
<input id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="text" value="<?php echo $number; ?>" size="3" /></p>

<p><input class="checkbox" type="checkbox" <?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" />
<label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Display post date?' ); ?></label></p>
<?php
}
}
function Kholisnet_register_custom_widgets() {
register_widget( 'Kholisnet_WP_Widget_Recent_Posts' );
}
add_action( 'widgets_init', 'kholisnet_register_custom_widgets' );

Gimana? Mudah bukan? Jika ada pertanyaan jangan lupa komen ya.

62 total views, 2 views today

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Yes No