Bonus: Menggunakan WP_Query

Sering kali kita membutuhkan plugin sederhana untuk memenuhi kebutuhan wordpress site yang sedang dikembangkan. Pada kasus skillplus.web.id, ada kebutuhan menampilkan list blog pada halaman utama, atau halaman TOC tutorial. Dan menampilkan related post, pada halaman modul tutorial.

Untuk keperluan itu, digunakan WP_Query untuk melakukan custom query. Agar bisa digunakan sebagai shortcode, registrasi plugin dengan hook add_shortcode( ‘sp_getpost_bytag’, ‘sp_getpost_by_tag_shortcode’ );

Dengan shortcode, memudahkan penggunan plugin. Untuk memanggilnya cukup menggunakan perintah [‘sp_getpost_bytag] pada block shortcode.

Berikut code plugin untuk menampilkan list post.

<?php
/*
Plugin Name: SkillPlus Custom Query
Description: Get list of post based on current post tag
Plugin URI:  https://skillplus.web.id/
Author:      SkillPlus
Version:     1.0
*/

if(!defined('ABSPATH')){
	exit;
}

function sp_getpost_by_tag_shortcode( $atts ) {
	extract( shortcode_atts( array( 
		
		'posts_per_page' => -1,
		'orderby' => 'date',
		
	), $atts ) );
	
    $post_tag = get_the_tags ( $post->ID );
    
	if ( $post_tag ) {
		$ids = wp_list_pluck( $post_tag, 'term_id' );
    }
	
	if($ids[0]==''){
		$args = array(
			'posts_per_page' => 5, 
			'orderby' => $orderby, 
			'post_type' => 'post',
			'cat'   => 4,
			'order' => 'DES'
		);
		$output = '<h3>Latest Blog</h3>';
	}else{
		$args = array(
			'posts_per_page' => $posts_per_page, 
			'orderby' => $orderby, 
			'post_type' => 'post',
			'tag_id'   => $ids[0],
			'order' => 'ASC',
			'post__not_in' => array(get_the_ID())
		);
		$output = '<h3>Related Post</h3>';
	}
	
	$posts = new WP_Query( $args );
	if ( $posts->have_posts() ) {
		$output .= '<ul>';
		while ( $posts->have_posts() ) {
			
			$posts->the_post();
			
			$output .= '<li><a href="'. get_permalink() .'">'. get_the_title() .'</a></li>';
			
		}
		$output .= '</ul>';
		wp_reset_postdata();			
	} else {
		$output = '';			
	}

	return $output;
}
add_shortcode( 'sp_getpost_bytag', 'sp_getpost_by_tag_shortcode' );

Penjelasan Code

Extract parameter shortcode, bila kosong, set default value.

extract( shortcode_atts( array( 
		
	'posts_per_page' => -1,
	'orderby' => 'date',
	), $atts ) );

Ambil tag current post dengan perintah get_the_tags, kemudian ambil tag id.

$post_tag = get_the_tags ( $post->ID );
    
if ( $post_tag ) {
    $ids = wp_list_pluck( $post_tag, 'term_id' );
}

Periksa isi dari $ids, jika kosong, maka isi $args untuk retrive blog list (pada kasus kami, categori blog id adalah 4).

JIka $ids tidak kosong, berarti sedang dihalaman modul tutorial, isi $args untuk retrive related post dengan tag_id yang sama.

if($ids[0]==''){
    $args = array(
        'posts_per_page' => 5, 
        'orderby' => $orderby, 
        'post_type' => 'post',
        'cat'   => 4,
        'order' => 'DES'
    );
    $output = '<h3>Latest Blog</h3>';
}else{
    $args = array(
        'posts_per_page' => $posts_per_page, 
        'orderby' => $orderby, 
        'post_type' => 'post',
        'tag_id'   => $ids[0],
        'order' => 'ASC',
        'post__not_in' => array(get_the_ID())
    );
    $output = '<h3>Related Post</h3>';
}

Berikutnya tinggal memangil WP_Query berdasarkan parameter yang telah dibuat diatas.

$posts = new WP_Query( $args );
if ( $posts->have_posts() ) {
    $output .= '<ul>';
    while ( $posts->have_posts() ) {
        
        $posts->the_post();
        
        $output .= '<li><a href="'. get_permalink() .'">'. get_the_title() .'</a></li>';
        
    }
    $output .= '</ul>';
    wp_reset_postdata();			
} else {
    $output = '';			
}

return $output;
Sharing is caring:

Leave a Comment