Belajar WordPress: Membuat Plugin Data Kerjasama Universitas

Plugin WordPress adalah salah satu point penting dari yang ditawarkan WordPress dibanding dengan framework yang lain. Kemampuan ekstensibilitasnya lewat Plugin ini telah membawa WordPress dari sebuah framework yang standar sebagai blog-ware, menjadi berbagai aplikasi berbasis web seperti SocialNetworking,Forum,e-Learning,Gallery dan lain-lain.

Membuat Plugin WP-Kerjasama

Plugin sederhana yang saya maksud disini, adalah sebuah plugin yang akan mengolah data kerjasama antar lembaga, menambahkan data kerja sama dan menampilkannya. Plugin ini sendiri didesain dalam satu file wp-kerjasama.php. Plugin ini sekaligus mendemonstrasikan kemampuan plugin untuk membuat meta box dan custom meta value untuk sebuah Post, membuat sub menu pada dashboard WordPress, membuat halaman penginputan data master dan menyimpan data-data ke dalam basis data.

Berikut langkahnya secara sederhana:
1. Buat tag inisialisasi Plugin:

<?php
/*
Plugin Name: WP-Kerjasama
Plugin URI: https://emka.web.idsourcecode/wp-kerjasama
Description: Institutional Agreements Custom Post and Searching. Developed for Universitas Negeri Semarang
Version: 1.0
Author: Luthfi Emka
Author URI: https://emka.web.id
/* ----------------------------------------------*/

2. Membuat meta box Kerjasama dan custom field untuk Post Kerjasama

– Bagian interface meta box Kerjasama dan custom field

// metabox Kerjasama
$metabox_kerjasama = array(
					"image" => array(
					"name" => "kerjasama",
					"std" => "",
					"title" => "Kerjasama Lembaga",
					"description" => "Tulis nama Unit/Bagian/Jurusan/Departemen, Lembaga serta tipe Kerjasama")
				   );
				   
function metabox_kerjasama() {
	global $post, $metabox_kerjasama, $wpdb;
	 
	foreach($metabox_kerjasama as $meta_box) {
		$nama_unit = get_post_meta($post->ID, $meta_box['name'].'_namaunit_value', true);
		$nama_lembaga = get_post_meta($post->ID, $meta_box['name'].'_namainstitusi_value', true);
		$tipe_mou = get_post_meta($post->ID, $meta_box['name'].'_tipemou_value', true);
		$nama_negara = get_post_meta($post->ID, $meta_box['name'].'_negara_value', true);
		 
		if($nama_unit == "")
		$nama_unit = $meta_box['std'];
		
		if($nama_lembaga == "")
		$nama_lembaga = $meta_box['std'];
		
		if($tipe_mou == "")
		$tipe_mou = $meta_box['std'];
		
		if($nama_negara == "")
		$nama_negara = $meta_box['std'];
		 
		echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
		
		//============
		echo'<p><label>Tuliskan nama Unit/Bagian/Jurusan/Departemen penandatangan MoU:</label><br />';
		echo'<input type="text" name="'.$meta_box['name'].'_namaunit_value" value="'.$nama_unit.'" size="75" /></p>';
		
		//============
		echo '<p><label>Tuliskan nama Institusi/Universitas/Lembaga:</label><br />';
		echo '<input type="text" name="'.$meta_box['name'].'_namainstitusi_value" value="'.$nama_lembaga.'" size="75" /></p>';
		
		//============
		echo '<p><label>Pilih tipe Kerjasama/MoU:</label><br />';
		echo '<select name="'.$meta_box['name'].'_tipemou_value">';
		
		$namatable_tipe = $wpdb->prefix.'kerjasama_tipe';
		$get_tipemou = $wpdb->get_results("select * from $namatable_tipe order by nama_tipe ASC");
		foreach($get_tipemou as $tipemou){
			if($tipemou->id == $tipe_mou){
				$selected = ' selected="selected" ';
			}else{
				$selected = '';
				}
			echo '<option value="'.$tipemou->id.'" '.$selected.'>'.$tipemou->nama_tipe.'</option>';
		}
		echo  '</select></p>';
		
		//=============
		echo '<p><label>Pilih Negara:</label><br />';
		echo '<select name="'.$meta_box['name'].'_negara_value">';
		
		$namatable_negara = $wpdb->prefix.'kerjasama_negara';
		$get_negara = $wpdb->get_results("select * from $namatable_negara order by nama_negara ASC");
		foreach($get_negara as $negara){
			if($negara->id == $nama_negara){
				$selected = ' selected="selected" ';
			}else{
				$selected = '';
				}
			echo '<option value="'.$negara->id.'" '.$selected.'>'.$negara->nama_negara.'</option>';
		}
		echo  '</select></p>';
	}
}

– Fungsi untuk membuat meta box dan custom field, serta penyiapan tabel master

function create_meta_boxkerjasama() {
	global $theme_name,$wpdb;
	if ( function_exists('add_meta_box') ) {
		add_meta_box( 'metabox-kerjasama', 'Keterangan Kerjasama Lembaga', 'metabox_kerjasama', 'kerjasama', 'normal', 'high' );
	}
	//===== set dan siapkan tabel master jika belum ada ====

	//=== tipe kerjasama
	$namatable_tipe = $wpdb->prefix.'kerjasama_tipe';
	if( $wpdb->get_var("SHOW TABLES LIKE '$namatable_tipe'") !=$namatable_tipe ){
		$sql_tipe = "CREATE TABLE IF NOT EXISTS `$namatable_tipe` (
					  `id` int(10) NOT NULL AUTO_INCREMENT,
					  `nama_tipe` varchar(200) NOT NULL,
					  PRIMARY KEY (`id`)
					) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";
		$wpdb->query("$sql_tipe");
	}
	
	//=== nama negara
	$namatable_negara = $wpdb->prefix.'kerjasama_negara';
	if( $wpdb->get_var("SHOW TABLES LIKE '$namatable_negara'") !=$namatable_negara ){
		$sql_negara = "CREATE TABLE IF NOT EXISTS `$namatable_negara` (
					  `id` int(10) NOT NULL AUTO_INCREMENT,
					  `nama_negara` varchar(100) NOT NULL,
					  `regional` enum('Amerika Tengah','Amerika Selatan','Amerika Utara','Eropa','Oceania','Australia','Afrika','Timur Tengah','Asia Timur','Asia Tenggara','Asia Selatan','Asia Barat') NOT NULL,
					  PRIMARY KEY (`id`)
					) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";
		$wpdb->query("$sql_negara");
	}
}

3. Fungsi untuk menyimpan, mengupdate, menghapus Custom Field Kerjasama

function save_postdatakerjasama( $post_id ) {
	global $post, $metabox_kerjasama;
	 
	foreach($metabox_kerjasama as $meta_box) {
	// Verify
	if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
	return $post_id;
	}
	 
	if ( 'kerjasama' == $_POST['post_type'] ) {
	if ( !current_user_can( 'edit_page', $post_id ))
	return $post_id;
	} else {
	if ( !current_user_can( 'edit_post', $post_id ))
	return $post_id;
	}
	
	//======== simpan data nama unit
	$data_namaunit = $_POST[$meta_box['name'].'_namaunit_value'];
	 
	if(get_post_meta($post_id, $meta_box['name'].'_namaunit_value') == "")
		add_post_meta($post_id, $meta_box['name'].'_namaunit_value', $data_namaunit, true);
	elseif($data_namaunit != get_post_meta($post_id, $meta_box['name'].'_namaunit_value', true))
		update_post_meta($post_id, $meta_box['name'].'_namaunit_value', $data_namaunit);
	elseif($data_namaunit == "")
		delete_post_meta($post_id, $meta_box['name'].'_namaunit_value', get_post_meta($post_id, $meta_box['name'].'_namaunit_value', true));
	
	//======== simpan data nama lembaga
	$data_namalembaga = $_POST[$meta_box['name'].'_namainstitusi_value'];
	 
	if(get_post_meta($post_id, $meta_box['name'].'_namainstitusi_value') == "")
		add_post_meta($post_id, $meta_box['name'].'_namainstitusi_value', $data_namalembaga, true);
	elseif($data_namalembaga != get_post_meta($post_id, $meta_box['name'].'_namainstitusi_value', true))
		update_post_meta($post_id, $meta_box['name'].'_namainstitusi_value', $data_namalembaga);
	elseif($data_namalembaga == "")
		delete_post_meta($post_id, $meta_box['name'].'_namainstitusi_value', get_post_meta($post_id, $meta_box['name'].'_namainstitusi_value', true));
		
	//======== simpan data tipe kerjasama
	$data_tipe = $_POST[$meta_box['name'].'_tipemou_value'];
	 
	if(get_post_meta($post_id, $meta_box['name'].'_tipemou_value') == "")
		add_post_meta($post_id, $meta_box['name'].'_tipemou_value', $data_tipe, true);
	elseif($data_tipe != get_post_meta($post_id, $meta_box['name'].'_tipemou_value', true))
		update_post_meta($post_id, $meta_box['name'].'_tipemou_value', $data_tipe);
	elseif($data_tipe == "")
		delete_post_meta($post_id, $meta_box['name'].'_tipemou_value', get_post_meta($post_id, $meta_box['name'].'_tipemou_value', true));
	
	//======== simpan data nama negara
	$data_namanegara = $_POST[$meta_box['name'].'_negara_value'];
	 
	if(get_post_meta($post_id, $meta_box['name'].'_negara_value') == "")
		add_post_meta($post_id, $meta_box['name'].'_negara_value', $data_namanegara, true);
	elseif($data_namanegara != get_post_meta($post_id, $meta_box['name'].'_negara_value', true))
		update_post_meta($post_id, $meta_box['name'].'_negara_value', $data_namanegara);
	elseif($data_namanegara == "")
		delete_post_meta($post_id, $meta_box['name'].'_negara_value', get_post_meta($post_id, $meta_box['name'].'_negara_value', true));
		
	}
}

4. Tambah hook ke fungsi WordPress untuk membuat meta box, custom field dan penyimpanan custom field

add_action('admin_menu', 'create_meta_boxkerjasama');
add_action('save_post', 'save_postdatakerjasama');

5. Membuat halaman setting Kerjasama, berisi form input data negara dan form input data tipe kerjasama serta daftar negara dan tipe kerjasama.

function create_kerjasamasetting_page(){
	global $wpdb;
	
        //=========== bagian interface halaman Setting Kerjasama
	echo '<div class="wrap" >';
	echo '<div id="icon-tools" class="icon32" > </div >';
	echo '<h2 class="page">Setting Kerjasama</h2>';
	echo '</div>';
	
	echo '<div id="dashboard-widgets-wrap" >
		<div id="news-widgets" class="metabox-holder">';
	echo '<div class="postbox-container" style="width: 35%;">
		<div class="postbox">
			<h3 class="hndle"><span>Tambah Data Negara</span></h3>
                <div style="margin-left:10px; margin-right:10px; text-align: justify; text-justify: newspaper" ><p>';
    echo '<form name="post-negara" action="'.$_SERVER['PHP_SELF'].'?post_type=kerjasama&page=wp-kerjasama/wp-kerjasama.php_setting" method="post">';
    echo '<label>Nama Negara</label><br/>';
    echo '<input type="text" name="nama_negara" value="" size="45" /><br/><br/>';
    echo '<label>Kelompok Regional</label><br/>';
    echo '<select name="regional">
			<option value="Asia Tenggara">Asia Tenggara</option>
			<option value="Asia Timur">Asia Timur</option>
			<option value="Asia Selatan">Asia Selatan</option>
			<option value="Asia Barat">Asia Barat</option>
			<option value="Timur Tengah">Timur Tengah</option>
			<option value="Afrika">Afrika</option>
			<option value="Eropa">Eropa</option>
			<option value="Amerika Utara">Amerika Utara</option>
			<option value="Amerika Tengah">Amerika Tengah</option>
			<option value="Amerika Selatan">Amerika Selatan</option>
			<option value="Australia">Australia</option>
			<option value="Oceania">Oceania</option>
    </select><br/><br/>';
    echo '<input type="submit" class="button" value="Simpan" />';
    echo '</form>';            
    echo '</p></div>
			</div>
		</div>';
	echo '<div class="postbox-container" style="width: 35%;">
		<div class="postbox">
			<h3 class="hndle"><span>Tambah Data Tipe Kerjasama</span></h3>
                <div style="margin-left:10px; margin-right:10px; text-align: justify; text-justify: newspaper" ><p>';
    echo '<form name="post-negara" action="'.$_SERVER['PHP_SELF'].'?post_type=kerjasama&page=wp-kerjasama/wp-kerjasama.php_setting" method="post">';
    echo '<label>Nama Tipe Kerjasama</label><br/>';
    echo '<input type="text" name="nama_tipekerjasama" value="" size="45" /><br/><br/>';
    echo '<input type="submit" class="button" value="Simpan" />';
    echo '</form>';            
    echo '</p></div>
			</div>
		</div>';
	
	//========== proses jika ada input data negara dilakukan
	if(isset($_POST['nama_negara']) && isset($_POST['regional'])){
		if(save_datanegara($_POST['nama_negara'],$_POST['regional'])){
			echo '<div id="message" class="updated"> <p>Nama negara '.$_POST['nama_negara'].' sukses disimpan </p></div >';
		}
	}
	
        //========== proses jika ada input data tipe kerja sama
	if(isset($_POST['nama_tipekerjasama'])){
		if(save_datatipe($_POST['nama_tipekerjasama'])){
			echo '<div id="message" class="updated"> <p>Nama tipe kersajama: '.$_POST['nama_tipekerjasama'].' sukses disimpan </p></div >';
		}
	}
	
	echo '<div class="clear"></div>';
	
        //========== daftar negara yang telah terekam pada basisdata
	$namatable_negara = $wpdb->prefix.'kerjasama_negara';
	$get_negara = $wpdb->get_results("select * from $namatable_negara order by nama_negara ASC");
	
	echo '<h3>Daftar Nama Negara</h3>';
	echo '<table class="widefat" style="width: 45%">';
	echo '<thead style="background: #828282;"><tr><th>No</th><th>Nama Negara</th><th>Regional</th></tr></thead>';
	$no=0;$no++;
	foreach($get_negara as $negara){
		echo '<tr><td>'.$no.'.</td><td>'.$negara->nama_negara.'</td><td>'.$negara->regional.'</td></tr>';
		$no++;
	}
	echo '</table><br/>';
	
	//======== daftar tipe kerja sama yang telah terekam pada basis data
	$namatable_tipe = $wpdb->prefix.'kerjasama_tipe';
	$get_tipemou = $wpdb->get_results("select * from $namatable_tipe order by nama_tipe ASC");
	echo '<h3>Daftar Tipe Kerjasama</h3>';
	echo '<table class="widefat" style="width: 45%">';
	echo '<thead style="background: #828282;"><tr><th>No</th><th>Nama Tipe</th></tr></thead>';
	$no=0;$no++;
	foreach($get_tipemou as $mou){
		echo '<tr><td>'.$no.'.</td><td>'.$mou->nama_tipe.'</td></tr>';
		$no++;
	}
	echo '</table>';
	
	echo '</div></div></div>';
}

6. Membuat fungsi penyimpanan data Negara dan data Tipe Kerjasama

function save_datanegara($nama_negara,$kode_region){
	global $wpdb;
	
	$namatable_negara = $wpdb->prefix.'kerjasama_negara';
	$wpdb->insert($namatable_negara, array('nama_negara'=>$nama_negara,'regional'=>$kode_region));
	return true;
}

function save_datatipe($nama_tipe){
	global $wpdb;
	
	$namatable_tipe = $wpdb->prefix.'kerjasama_tipe';
	$wpdb->insert($namatable_tipe, array('nama_tipe'=>$nama_tipe));
	return true;
}

7. Membuat sub menu pada Dasbor WordPress

function create_kerjasamasubmenu(){
	//create sub menu items
	add_submenu_page( 'edit.php?post_type=kerjasama', 'Setting Kerjasama','Setting Kerjasama','manage_options',__FILE__.'_setting', 'create_kerjasamasetting_page' );
}

//========== tambah action saat posting dan simpan posting
add_action('admin_menu','create_kerjasamasubmenu');

Instalasi

Upload file wp-kerjasama.php ke /wp-content/plugins/wp-kerjasama. Aktifkan plugin ini dengan mengklik Activate pada daftar Plugins.

Unduh

Versi lengkap dari WP-Kerjasama ini dapat anda unduh dari sini

Screenshoot






Bagaimana? Membuat plugin WordPress itu mudah kan?

Wagiman Wiryosukiro

Petani Sistem Informasi, tukang las plugin & themes Wordpress. Co-Founder SistemInformasi.biz. Saat ini aktif sebagai Developer & kontributor di OpenMandriva Linux.

You may also like...

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: