Extended Related Posts Plugin WordPress

Extended Related Posts adalah plugin untuk blog WordPress yang fungsinya menampilkan pos terkait yang relevan dan lebih baik.

About these ads

Extended Related Posts (EXTRP) adalah plugin untuk blog WordPress yang fungsinya menampilkan pos terkait yang relevan dan lebih baik. Support dengan plugin Relevanssi untuk menampilkan related post sesuai algoritma plugin Relevanssi.

Fitur Plugin

  • Otomatis, tersedia pengaturan untuk tampilan di bawah postingan secara otomatis.
  • Excerpt, bentuk post excerpt/deskripsi tersedia dalam dua pilihan, default dan snippet.
  • Thumbnail, jika fitur ini diaktifkan, maka gambar diambil otomatis berdasarkan feature image, gambar dari pos, gambar pertama, dan jika tidak gambar dalam pos, maka akan tampil gambar default. Anda dapat menggunakan gambar default Anda sendiri, selain yang telah disediakan oleh plugin ini. Tersedia juga pilihan jika ingin mengambil gambar dengan url eksternal yang dalam pos, jika pos tersebut tidak memiliki gambar selain gambar eksternal. Ukuran thumbnail akan berubah secara otomatis sesuai dengan pengaturan ukuran thumbnail Anda dan Anda juga dapat menambahkan dengan ukuran yang baru.
  • Style, tersedia 7 jenis model tampilan related post.
  • Highlight keyword, memberikan sorotan pada kata kunci yang terdapat dalam deskripsi pos, tersedia 7 pilihan.
  • Widgets, tersedia pengaturan dalam widget untuk ditampilkan di sidebar situs Anda.
  • Shortcode Generator, Anda tidak perlu mengetikkan satu persatu parameter yang akan ditambahkan dalam shortcode related post. Dengan Shortcode Generator, Anda hanya memilih parameter dan nilainya untuk membuat shortcode sekaligus Kode PHP untuk dipasang di post area, widget atau di theme.
  • Kode PHP related post, jika theme Anda tidak memungkinkan untuk menampilkan related post secara otomatis, tersedia kode PHP yang dihasilkan dengan menggunakan Shortcode Generator.
  • Algoritma, plugin ini mencari pos yang berkaitan berdasarkan judul atau konten postingan, jika tidak ada, maka secara otomatis akan mencari berdasarkan kategori, tag, dan tiap kata dalam judul pos. Plugin Extended Related Posts dapat didukung oleh plugin Relevanssi untuk menampilkan pos terkait sesuai algoritma plugin Relevanssi.
  • Stopwords Filter, filter kata kunci yang tidak diinginkan untuk menampilkan pos terkait yang lebih relevan.
  • Caching, fitur ini untuk memberikan page load dan performa situs yang lebih baik dalam menampilkan pos terkait. Mekanisme cache sifatnya transient, dan tersimpan di database. Tersedia penjadwalan dan tombol untuk menghapus cache.
  • Multi-language, saat ini masih tersedia 2 bahasa, yaitu bahasa Inggris dan Indonesia.
  • Automatic update, update plugin dilakukan via GitHub. Sekarang tersedia di repositori plugin WordPress.

Screenshot plugin

General Settings
General Settings

Thumbnail Settings
Thumbnail Settings
Additional Settings
Additional Settings
Shortcode Generator
Shortcode Generator
Widget Settings
Widget Settings

Filter Hooks

Plugin EXTRP ( Extended Related Posts ) menyediakan beberapa fungsi filter hook untuk memodifikasi plugin ini.

extrp_capability_filter( $option )
extrp_limit_count_id( $limit )
extrp_wp_query( $args )
extrp_get_the_post_thumbnail( $get_attachment_link, $post_id, $size , $crop , $img_class )
extrp_default_settings( $args )

Update 24 Oktober 2015
Download Extended Related Posts
https://wordpress.org/plugins/extended-related-posts/
Please update your plugin via WordPress.


 Share
About these ads

Bing Search Image API Azure Format Json PHP

Cara membuat parsing format json ke PHP pada Bing Search Image API Windows Azure dengan kode sederhana.

Format xml search image dengan Bing API lawas yang gratis alias free, sudah tidak berlaku. Yang dipakai sekarang Bing API V.2 atau dengan Windows Azure Markerplace, masih ada yang gratis walaupun terbatas (limit) hanya sampai 5000 request. Dengan menggunakan format Bing Windows Azure, kita dapat melakukan parsing PHP yang sederhana untuk Bing Search Image format json dengan cara berikut:

Membuat Form Search Box

<form method="get" action="<?php echo $_SERVER['PHP_SELF'];?>">
	Type in a search:
<input type="text" id="searchText" name="s"
	value="<?php
		if (isset($_GET['s']))
		{
			echo($_GET['s']); 
		}
			else 
		{ 
			echo('superman');
		}
?>"/>
<input type="submit" value="Search" id="searchButton" />
</form>

Menampilkan hasil pencarian gambar berdasarkan kata kunci (keyword) yang ditentukan.

if (isset($_GET['s'])) {
	$accountKey = 'your-account-key-here'; //get it here https://datamarket.azure.com/account
	$ServiceRootURL =  'https://api.datamarket.azure.com/Bing/Search/';
	$count = 2;//total list
        $skip  = 0; //for paged
        $WebSearchURL = $ServiceRootURL . 'Image?$format=json&$top=' . $count . '&$skip=' . $skip . '&Query=';
	$context = stream_context_create(array(
		'http' => array(
		'request_fulluri' => true,
		'header'  => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey)
			)
	));
	$request = $WebSearchURL . urlencode( '\'' . $_GET['s'] . '\'');
	$response = file_get_contents($request, 0, $context);
	$jsonobj = json_decode($response);

	echo('<ul id="result">');
	foreach($jsonobj->d->results as $value)
	{                        
		echo('<li class="resultlistitem">');
		echo('<b>Title</b>: ' . $value->Title .'<br>');
		echo('<b>Url</b>: ' . $value->MediaUrl .'<br>');
		echo('<b>Source</b>: ' . $value->SourceUrl .'<br>');
		echo('<b>Display Url</b>: ' . $value->DisplayUrl .'<br>');
		echo('<b>Width</b>: ' . $value->Width .' px<br>');
		echo('<b>Height</b>: ' . $value->Height .' px<br>');
		echo('<b>File Size</b>: ' . KByteSize($value->FileSize) .'<br>');
		echo('<b>Image Type</b>: ' . $value->ContentType .'<br>');
		echo('<b>Thumbnail Url</b>: ' . $value->Thumbnail->MediaUrl . '<br>');					
		echo('<b>Thumbnail Display</b>:<br><img src="' . $value->Thumbnail->MediaUrl. '"><br>');
		echo('<b>Large Image Display</b>:<br><img src="' . $value->MediaUrl. '">');
		echo('</li>');
	}
	echo("</ul>");
}
	
//function to convert file size image
function KByteSize($bytes) {
    $size = $bytes / 1024;
    if($size < 1024)
        {
        $size = number_format($size, 2);
        $size .= ' KB';
        } 
    else 
        {
        if($size / 1024 < 1024) 
            {
            $size = number_format($size / 1024, 2);
            $size .= ' MB';
            } 
        else if ($size / 1024 / 1024 < 1024)  
            {
            $size = number_format($size / 1024 / 1024, 2);
            $size .= ' GB';
            } 
        }
    return $size;
}

Tampilannya seperti gambar ini

Bing Image Api
Tampilan API Bing Search Image

Pastikan Anda mencantumkan Primary/Account Key Anda dalam kode tersebut, silahkan daftar di Windows Azure https://datamarket.azure.com/account, gratis terbatas. Semoga bermanfaat.

Reference Code
Migrating Bing Search API Applications


 Share

Kode PHP – Search List dan Video YouTube Data API v.3

Kode PHP YouTube Data API 3 yang sederhana untuk menampilkan video hasil pencarian kata kunci dan video id.

Kode API youtube versi 1 tidak dapat digunakan lagi, untuk versi terbarunya yaitu YouTube Data API Version 3. Cara mudah untuk menampilkan daftar video Youtube berdasarkan kata kunci dan id video di situs atau aplikasi Anda, bisa dengan function PHP yang sederhana seperti ini:

Kode untuk menampilkan hasil

Search List
Untuk menampilkan video dari hasil pencarian berdasarkan kata kunci yang Anda tentukan.

jv_youtube('YOUR KEYWORD');

Single Video
Untuk menampilkan single video berdasarkan video id yang ditentukan. Cara mengetahui video id, misalnya pada link video YouTube https://www.youtube.com/watch?v=QqzekYZdBEo,
kode acak dalam link seperti ini QqzekYZdBEo adalah video id-nya.

jv_youtube('VIDEO ID','video');

Kombinasi dengan Form Search Box

$query = $_GET['x'];
echo '<form>
			<select name="type">
				<option value="search">List</option>
				<option value="videos">Video</option>
			</select>
			<input type="text" name="x" class="form-control" placeholder="Type Keywords or Video ID" value="'.$query.'" required>
			<button type="submit">SUBMIT</button>
	  </form>';
if(isset($query)){
	switch($_GET['type']){
		case 'videos';
			jv_youtube($query,'videos');
		break;
		default:
			jv_youtube($query);
		break;
	}
}

Kode function PHP YouTube API V.3

Simpan kode function berikut di bawah salah satu kode di atas atau di file khusus functions theme atau template situs Anda.

/**
 * Simple PHP Youtube Data API V.3
 * Code @jevuska https://www.jevuska.com/
 * Reference https://developers.google.com/youtube/v3/
 ***
 * USAGE
 ***
 * Search list function: jv_youtube('YOUR KEYWORD');
 * Single video function: jv_youtube('VIDEO ID','video');
 ***
 * With form query parameter 'x':
$query = $_GET['x'];
echo '<form>
			<select name="type">
				<option value="search">List</option>
				<option value="videos">Video</option>
			</select>
			<input type="text" name="x" class="form-control" placeholder="Type Keywords or Video ID" value="'.$query.'" required>
			<button type="submit">SUBMIT</button>
	  </form>';
if(isset($query)){
	switch($_GET['type']){
		case 'videos';
			jv_youtube($query,'videos');
		break;
		default:
			jv_youtube($query);
		break;
	}
}
 */

function jv_youtube_setup(){
	//setup Google API Key, create here https://console.developers.google.com/project/
	define('GOOGLE_API_KEY', 'your-google-api-key-here');
	
	//setup PART video api data - allowed values: [snippet,contentDetails,statistics,status]
	define('PART_VIDEO_DATA', 'snippet,contentDetails,statistics,status');
	define('PART_SEARCH_LIST_DATA', 'snippet');

	//setup as 'true' or 'false' to show Video Details and Statistics
	define('VIDEO_DETAILS',true);
	define('VIDEO_STATS', true);
	define('PLAYER', true);

	//setup search list - optional
	define('MAX_RESULT', '5'); //list file per page, min default is 5, max is 50
	define('SEARCH_TYPE', 'video'); //video, channel, playlist
	define('LIST_ORDER', 'date'); //date, rating, relevance, title, videocount, viewcount
	define('SAFE_SEARCH', 'moderate'); //moderate, strict, none

	//setup your text
	define('TOTAL_RESULT', 'Total Results:');
	define('RESULT_PER_PAGE', 'Results Per Page:');
		//write cacheing logic to implement this feature, ie: CACHE LITE PHP
			// define( 'NEXT_PAGE_TOKEN', 'Next Page Token:' ); 
			// define( 'PREVIOUS_PAGE_TOKEN', 'Previous Page Token:' );
	define('VIDEO_TITLE', 'Title:');
	define('VIDEO_DESCRIPTION', 'Description:');
	define('VIDEO_ID', 'Video Id:' );
	define('LINK_VIDEO', 'Link Video:');
	define('CHANNEL_TITLE', 'Channel Title:');
	define('CHANNEL_ID', 'Channel Id:');
	define('LINK_CHANNEL', 'Link Channel:');
	define('VIDEO_THUMBNAIL', 'Thumbnail:');
	define('VIDEO_PLAYER', 'Video Player:');
	define('TIME_PUBLISH', 'Published:');
	define('VIDEO_DURATION', 'Duration:');
	define('VIDEO_DIMENSION', 'Dimension:');
	define('VIDEO_DEFINITION', 'Definition:');
	define('VIDEO_CAPTION', 'Caption:');
	define('VIDEO_LICENSE', 'License:');
	define('COUNT_VIDEO_VIEW', 'View:');
	define('COUNT_VIDEO_LIKE', 'Like:');
	define('COUNT_VIDEO_DISLIKE', 'Dislike:');
	define('COUNT_VIDEO_FAVORITE', 'Favorite:');
	define('COUNT_VIDEO_COMMENT', 'Comment:');
}

function _jv_youtube_data($q,$type=''){
	jv_youtube_setup();
	switch($type){
		case 'videos':
			$data = array(
				'key' => GOOGLE_API_KEY,
				'id' => $q, //video id
				'part' => PART_VIDEO_DATA,
				//MORE OPTION https://developers.google.com/youtube/v3/
			);
		break;
		default:
			$type = 'search';
			$data = array(
				'key' => GOOGLE_API_KEY,
				'q' => urlencode($q), //query search parameter
				'part' => PART_SEARCH_LIST_DATA,

				//START OPTIONAL - comment this rest option if not used (add //)
				'maxResults' => MAX_RESULT,
				'type' => SEARCH_TYPE,
				'order' => LIST_ORDER,
				'safeSearch' => SAFE_SEARCH,
				//END OPTIONAL
				//MORE OPTION https://developers.google.com/youtube/v3/docs/search/list
			);
		break;
	}

	$param = http_build_query($data);
	$json = "https://www.googleapis.com/youtube/v3/$type?$param";
	$str = @file_get_contents($json);
	return $str;
}

function jv_youtube($q, $type = '',$inline = ''){
	$result = '';
	$str = _jv_youtube_data($q, $type);
	if($str === FALSE)	:
		// error handling
		$msg = "Invalid parameter file_get_contents";
		$result .= sprintf('%s', $str);
	else :
		$result .= _jv_search_youtube($str, $type, $inline);
	endif;
	
	if($inline == 'inline')
		return $result;
	else
		print $result;
}

function _jv_search_youtube($str, $type, $inline){
	$doc = json_decode($str, true);
	$respon = array();
	
	$totalresult = (int) $doc['pageInfo']['totalResults'];
	$resultsperpage = (int) $doc['pageInfo']['resultsPerPage'];

	if(empty($inline)){
		if ( defined( 'TOTAL_RESULT' ) )
		$respon[] = sprintf('<b><b>%1$s</b></b> %2$s',TOTAL_RESULT,$totalresult);
		if ( defined( 'RESULT_PER_PAGE' ) )
		$respon[] = sprintf('<b>%1$s</b> %2$s',RESULT_PER_PAGE,$resultsperpage);
	}
	if(empty($type)){
		$nextpage =  $doc['nextPageToken'];
		$prevpage =  $doc['prevPageToken'];
		
		if ( defined( 'NEXT_PAGE_TOKEN' ) )
		$respon[] =  sprintf('<b>%1$s</b> %2$s',NEXT_PAGE_TOKEN,$nextpage);
		if ( defined( 'PREVIOUS_PAGE_TOKEN' ) )
		$respon[] =  sprintf('<b>%1$s</b> %2$s',PREVIOUS_PAGE_TOKEN,$prevpage);
	}
	$i = 0;
	foreach($doc['items'] as $item) {
		$i++;
		if(empty($inline)){
			$title = $item['snippet']['title']; //video title
			$description = $item['snippet']['description']; //video description
			
			$published = $item['snippet'] ['publishedAt']; //published time
			//date format http://php.net/manual/en/datetime.formats.date.php
			$datepublish = date('d-m-Y',strtotime($published));
			
			$videoid = '';
			if(isset($item['id']['videoId']))
				$videoid .= $item['id']['videoId'];
			else
				$videoid .= $item['id'];
			$video_url = "https://www.youtube.com/watch?v=$videoid"; //video url
			$channelid = $item['snippet'] ['channelId']; //channel id
			$thumbnail_url = $item['snippet']['thumbnails']['medium']['url'];//thumbnail option: Allowed values: [default, medium, high]
			$channel_url = "https://www.youtube.com/channel/$channelid"; //channel url
			
			$respon[] = sprintf('<b>%1$s</b> %2$s',VIDEO_TITLE,$title);
			$respon[] = sprintf('<b>%1$s</b> %2$s',VIDEO_DESCRIPTION,$description);
			if ( defined( 'VIDEO_ID' ) )
				$respon[] = sprintf('<b>%1$s</b> %2$s',VIDEO_ID,$videoid);
			if ( defined( 'CHANNEL_ID' ) )
				$respon[] = sprintf('<b>%1$s</b> %2$s',CHANNEL_ID,$channelid);
			if ( defined( 'TIME_PUBLISH' ) )
				$respon[] = sprintf('<b>%1$s</b> %2$s',TIME_PUBLISH,$datepublish);
			if ( defined( 'VIDEO_THUMBNAIL' ) )
				$respon[] = sprintf('<b>%1$s</b><br><img src="%2$s">',VIDEO_THUMBNAIL,$thumbnail_url);
			if ( PLAYER == true )
				$respon[] = sprintf("<b>%s</b><br><div id='player-$i' class='player' data-id='$videoid'></div>",VIDEO_PLAYER);
			if ( defined( 'LINK_VIDEO' ) )
				$respon[] = sprintf('<b>%1$s</b> <a href="%2$s">%2$s</a>',LINK_VIDEO,$video_url);
			if ( defined( 'LINK_CHANNEL' ) )
				$respon[] = sprintf('<b>%1$s</b> <a href="%2$s">%2$s</a>',LINK_CHANNEL,$channel_url);
		}
		
		if($type == 'videos'){
			$channelititle = $item['snippet'] ['channelTitle']; //channel title
			if ( defined( 'CHANNEL_TITLE' ) )
				$respon[] = sprintf('<b>%1$s</b> %2$s',CHANNEL_TITLE,$channelititle);
			$details = $item['contentDetails'];
			$statistics = $item['statistics'];
			if ( VIDEO_DETAILS == true){
				foreach( array($details) as $item ) {
					$duration = covtime($item['duration']);
					$dimension = $item['dimension'];
					$definition = $item['definition'];
					$caption = $item['caption'] != 'false' ? $item['caption']: '-';
					$license = $item['licensedContent'];
					if ( defined( 'VIDEO_DURATION' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',VIDEO_DURATION,$duration);
					if ( defined( 'VIDEO_DIMENSION' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',VIDEO_DIMENSION,$dimension);
					if ( defined( 'VIDEO_DEFINITION' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',VIDEO_DEFINITION,$definition);
					if ( defined( 'VIDEO_CAPTION' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',VIDEO_CAPTION,$caption);
					if ( defined( 'VIDEO_LICENSE' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',VIDEO_LICENSE,$license);
				}
			}
		
			if ( VIDEO_STATS == true ){
				foreach( array($statistics) as $item ) {
					$view = $item['viewCount'];
					$like = $item['likeCount'];
					$dislike = $item['dislikeCount'];
					$favorite = $item['favoriteCount'];
					$comment = $item['commentCount'];
					if ( defined( 'COUNT_VIDEO_VIEW' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',COUNT_VIDEO_VIEW,$view);
					if ( defined( 'COUNT_VIDEO_LIKE' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',COUNT_VIDEO_LIKE,$like);
					if ( defined( 'COUNT_VIDEO_DISLIKE' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',COUNT_VIDEO_DISLIKE,$dislike);
					if ( defined( 'COUNT_VIDEO_FAVORITE' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',COUNT_VIDEO_FAVORITE,$favorite);
					if ( defined( 'COUNT_VIDEO_COMMENT' ) )
						$respon[] = sprintf('<b>%1$s</b> %2$s',COUNT_VIDEO_COMMENT,$comment);
				}
			}
			$respon[] = '<hr>';	
		}
		if(empty($type))
			$respon[] = jv_youtube($videoid,'videos','inline');
	}
	$result = implode('<br>',$respon);
	return $result;
}

function covtime($youtube_time) {
	//function convert youtube time. Source: http://stackoverflow.com/questions/24393230/convert-youtube-api-v3-video-duration-in-php
    preg_match_all('/(\d+)/',$youtube_time,$parts);
    if (count($parts[0]) == 1) {
        array_unshift($parts[0], "0", "0");
    } elseif (count($parts[0]) == 2) {
        array_unshift($parts[0], "0");
    }

    $sec_init = $parts[0][2];
    $seconds = $sec_init%60;
    $seconds_overflow = floor($sec_init/60);

    $min_init = $parts[0][1] + $seconds_overflow;
    $minutes = ($min_init)%60;
    $minutes_overflow = floor(($min_init)/60);

    $hours = $parts[0][0] + $minutes_overflow;

    if($hours != 0)
        return $hours.':'.$minutes.':'.$seconds;
    else
        return $minutes.':'.$seconds;
}

Berikut kode JavaScript jika ingin menampilkan video player secara asyncronous.

<script>
//https://developers.google.com/youtube/iframe_api_reference
//http://stackoverflow.com/a/901144
	var tag = document.createElement('script');

	tag.src = "https://www.youtube.com/iframe_api";
	var firstScriptTag = document.getElementsByTagName('script')[0];
	firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    players = new Array();
	var player = document.getElementsByClassName('player');
	function onYouTubeIframeAPIReady() {
		for (var i = 0; i < player.length; i++) {
			t = new YT.Player(player[i].getAttribute('id'), {
				height: '390',
				width: '640',
				videoId: player[i].getAttribute('data-id'),
				events: {
					//'onReady': onPlayerReady,
					'onStateChange': onPlayerStateChange
				}
			});
			players.push(t);
		}
	}

	function onPlayerReady(event) {
		event.target.playVideo();
	}

	function onPlayerStateChange(event) {
		var temp = event.target.getVideoUrl();
		if (event.data == YT.PlayerState.PLAYING) {
			for (var i = 0; i < players.length; i++) {
              if (players[i].getVideoUrl() != temp) {
				  setTimeout(players[i].stopVideo, 6000);
				  players[i].stopVideo();
			  }
			}
        }
	}

	function getParameterByName(name) {
		name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
		var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
			results = regex.exec(location.search);
		return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
	}
</script>

Set-up Google API Key Anda (ganti your-google-api-key-here pada kode function di atas), petunjuk tambahan lainnya ada dalam kode tersebut.

Youtube API 3 Search List Demo
Tampilan Script PHP Youtube API 3 Search

Kode PHP Video YouTube Data API v.3 ini tidak menggunakan Google Client API PHP library, jadi cukup sederhana untuk Anda terapkan di situs seperti WordPress atau aplikasi Anda. Kode untuk tampilan dan referensi lainnya bisa temukan di Google Developer YouTube Data API. Semoga bermanfaat.


 Share

Cara mudah redirect header PHP query WordPress

Cara mudah redirect halaman blog WordPress bisa diterapkan di htaccess atau dengan function header PHP berikut.

Cara mudah melakukan redirect halaman blog WordPress bisa diterapkan di htaccess atau dengan menggunakan function redirect header PHP berikut. Pasang di file functions.php theme Anda, and save it:

add_action('template_redirect', 'redirect_header_search');

function redirect_header_search(){
	if($_GET['s']){ // letter 's' as default search query parameter WP
		$dir = 'topic'; // 'topic' as var $search_base
		$homeurl = esc_url(home_url( '/' ));
		$query = urlencode_deep(get_search_query());
		$location = "$homeurl$dir/$query";
		$status = '301'; // 301 Moved Permanently, empty/default is 302 for temporary redirect
	wp_redirect( $location, $status );
	}
}

//flush the rules of search base WP default
//rewrite.php line 478 WP ver 4.2.2
//var $search_base = 'search'; 
add_action('init', 'change_search_base_wp');
function change_search_base_wp() {
    global $wp_rewrite;
		$dir = 'topic'; // 'topic' as var $search_base
		$rules = $wp_rewrite->front.'%dir%/%search%';
		$rule = str_replace('%dir%',$dir,$rules);
		$wp_rewrite->search_structure = $rule;
		$wp_rewrite->flush_rules();
    return $wp_rewrite;
}

Kode ini hanya untuk me-redirect url search default, dan khusus function wp_redirect bisa Anda terapkan pada berbagai parameter query atau redirect halaman tertentu. Semoga bermanfaat.


 Share

Exclude admin di recent comments widget WordPress

Cara menghilangkan komentar administrator (exclude admin) di recent comments widget blog WordPress tanpa menggunakan plugin.

Bagaimana cara supaya administrator atau owner yang komentar di blognya sendiri tidak muncul (exclude) di recent comments widget blog WordPress?. Tanpa harus menggunakan plugin tambahan, Anda bisa memasang function berikut di file functions.php theme WordPress Anda.

add_filter('widget_comments_args', '_jv_filter_recent_comments_widget');

function _jv_filter_recent_comments_widget(){
	// get data from database table wp_options with option_name 'widget_recent-comments'
	$instance = array_shift(get_option('widget_recent-comments'));
	$number = absint($instance['number']);
	$args = array(
		'number' => $number,
		'status'  => 'approve',
		'post_status' => 'publish',
		'author__not_in' => 1, // '1' is user id of administrator/owner
        );
	return $args;
}

Save pekerjaan Anda and see the result.

Jadi, kecuali owner blog, para pengunjung lain yang komentar di blog Anda tetap ada di recent comments (komentar terbaru) widget.


 Share

Membuat parameter baru search query WordPress

Cara membuat custome search query atau paramater kueri baru di blog WordPress dengan mudah.

Parameter query search result WordPress basic-nya menggunakan "?s=", tapi bagaimana jika kita ingin membuat parameter baru lainnya berdasarkan hasil pencarian WordPress.

Misalnya, kita ingin membuat parameter query seperti ini (Demo):
https://www.jevuska.com/?p=list&q=injeksi+manual+keyword

Di file functions.php theme WordPress Anda, tambahkan kode function berikut:

function _jv_add_query_vars_filter( $vars ){

//create 'q' as query parameter
	$vars[] = "q";
	return $vars;

}
add_filter( 'query_vars', '_jv_add_query_vars_filter' );

function _jv_custom_search_query( $query ) {

//pre get post loop p and q parameter base on s parameter
    if ($_GET['p'] == "list" && get_query_var('q') != "") {
		$query->set('post_status', 'publish');
		$query->set('post_type', 'post');
		$query->set( 's', $query->query_vars['q']);

//add filter to wp_title base on q parameter
//WP 4.4 use 'document_title_parts'

		add_filter('wp_title',function(){
			$title = ucwords(get_search_query());
			return $title;
		},10,2);
    };
	return $query;
}
add_filter( 'pre_get_posts', '_jv_custom_search_query');

//optional - add custome search form
function _jv_search_form( $form ) {
	$form = '<form role="search" method="get" id="searchform" class="searchform" action="' . home_url( '/' ) . '" >
	<div><label class="screen-reader-text" for="s">' . __( 'Search for:' ) . '</label>
	<input type="hidden" value="list" name="p"/>
	<input type="text" value="' . get_search_query() . '" name="q" id="s" />
	</div>
	</form>';
	return $form;
}

add_filter( 'get_search_form', '_jv_search_form' );

Function ini akan meng-generate post di halaman front page theme WP Anda (index.php atau home.php), jadi hasilnya akan sangat tergantung pada theme yang digunakan, juga plugin tambahan yang menfilter wp_title, contohnya plugin Yoast WordPress SEO.

PS: post ini adalah hasil request sobat blogger.


 Bagikan

Injeksi Manual Keyword: Add-ons/extension plugin SEO SearchTerms Tagging 2

Nama pluginnya STT2 Extension Add Terms, silahkan download di repository github Jevuska, upload, install dan aktifkan.

Meskipun plugin SEO SearchTerms Tagging 2 ini sudah tidak pernah lagi di-update sejak tahun 2011, tetap saja masih banyak blogger yang masih menggunakannya, dengan tujuan untuk melipatgandakan trafik kunjungan ke situs, dan bagi yang hobi coding, tidak sedikit juga yang melakukan oprek kecil-kecilan terhadap plugin ini.

Berbicara tentang oprek, ini ada permintaan sobat blogger untuk ngoprek sedikit plugin ini agar ada fitur untuk injeksi manual keyword ke dalam database. Oprek ini tidak secara langsung saya terapkan ke dalam plugin STT2, akan tetapi melalui plugin tambahan (add-ons/extension) yang harus diinstall. Jadi, core plugin STT2 tidak terganggu sama sekali dan tidak ada yang perlu dioprek.

Nama pluginnya STT2 Extension Add Terms, silahkan download di repository github Jevuska https://github.com/Jevuska/stt2-extension-add-terms, lalu upload di WordPress Anda, install dan aktifkan.

STT2 Extension Add Terms plugin telah tersedia di WordPress.

Screenshot plugin

General Settings
General Settings
Manual Input Tool
Manual Input Tool
Widget STT2EXTAT
Widget STT2EXTAT

Script Feature

  • jQuery
  • jQuery UI
  • Ajax
  • Plugin Search Excerpt by Scott Yang
  • Google Suggest by haochi

STT2EXTAT v1.1

  • Setting admin plugin tersedia
  • Kata kunci bisa didapatkan melalui referrer
  • Kata kunci di tambahkan sebagai postmeta private _stt2extat dalam table database wp
  • Karakter kata kunci yang lebih baik
  • Pada wp_head, menyisipkan rel canonical jika ada pos di halaman pencarian dan meta no robots jika tidak ada
  • Tersedia shortcode
    [stt2extat]

    untuk menampilkan list terms.

  • Tersedia multiple widget untuk menampilkan list terms di sidebar.
  • Tersedia tool untuk migrasi search terms dari plugin STT2 terdahulu.
  • Disyaratkan menggunakan minimal WordPress 4.4 dan PHP 7.0.
  • Tersedia berbagai hook action atau filter untuk memodifikasi plugin ini, jadi core plugin tidak perlu diganggu.

Hook function

Hanya di halaman single post

add_filter( 'stt2extat_is_single', 'is_single' );

Menampilkan post count dengan menggantikan jumlah hits

add_filter( 'stt2extat_term_count', 'stt2extat_count_posts', 1, 2 );

Non aktifkan referer melalui wp_head

add_action( 'wp_head', 'stt2extat_add_meta_origin_referer' );

Khusus referer, terms yang tidak relevan dapat ditambahkan

remove_filter( 'stt2extat_ignore_relevant', '__return_false' );

Filter judul, khusus di halaman pencarian

add_filter( 'document_title_parts', 'stt2extat_search_page_title' );

Filter tanda pemisah antara judul halaman search dan judul situs ( separator)

add_filter( 'document_title_separator', 'stt2extat_search_page_title_separator' );

Filter untuk mengizinkan localhost sebagai referrer (for testing)

add_filter( 'stt2extat_allow_localhost', '__return_true' );

Fitur manual injeksi keyword ini akan tampil di area setting plugin STT2 langsung. Masih versi 1.0, mohon reportnya for any thing such as bugs, security, or vulnerability issue.

For Dev: Filters

stt2exat_excerpt_option( $args )
delete_terms_schedules( $schedules )
stt2extat_email_regexp( $regexp_email_pattern )
stt2extat_data( array $data )
stt2extat_sanitize( $array, $additional )
stt2extat_default_setting( array $data )
stt2extat_interval_hit_time ( $strtotime )
stt2extat_stopwords_filter_method( $func, $stopwords, $term )
stt2extat_sep_terms_list( $sep )
stt2extat_args_search_post_query( $args )
stt2extat_domain_regexp( $regexp_domain_pattern )
stt2extat_convert_case( $term_name )
stt2extat_post_type( array $post_type )
stt2extat_if_no_result( $query )
stt2extat_tag_cloud_args( $args )

Last but not least.. are*****7[at]g****.com thanks for your PP donate, I really appreciate it.

UPDATE: 20-12-2015

Download STT2EXTAT plugin v1.1 via WordPress
https://wordpress.org/plugins/stt2-extension-add-terms/

NOTE:
SEO SearchTerms Tagging 2 plugin not required any more and no longer supported by this plugin. Use the latest WP version (min 4.4), and upgrade your PHP server into PHP 7.0 ( twice as fast as PHP 5 ).

UNDEVELOPMENT VERSION:
STT2EXAT v1.1.5-undev – min PHP 5.4 – WP 4.4. Download via plugin Developers page
stt2-extension-add-terms.1.1.5-undev.zip


 Bagikan