Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Makalah
  • Ke-NU-an
  • Kabar
  • Search
Menu

Belajar WordPress: Membuat Plugin Data Kerjasama Universitas

Posted on October 23, 2012

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:
[sourcecode language=”php”]
<?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
/* ———————————————-*/
[/sourcecode]

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

– Bagian interface meta box Kerjasama dan custom field
[sourcecode language=”php”]
// 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>’;
}
}
[/sourcecode]

– Fungsi untuk membuat meta box dan custom field, serta penyiapan tabel master
[sourcecode language=”php”]
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");
}
}
[/sourcecode]

3. Fungsi untuk menyimpan, mengupdate, menghapus Custom Field Kerjasama
[sourcecode language=”php”]
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));

}
}
[/sourcecode]

4. Tambah hook ke fungsi WordPress untuk membuat meta box, custom field dan penyimpanan custom field
[sourcecode language=”php”]
add_action(‘admin_menu’, ‘create_meta_boxkerjasama’);
add_action(‘save_post’, ‘save_postdatakerjasama’);
[/sourcecode]

5. Membuat halaman setting Kerjasama, berisi form input data negara dan form input data tipe kerjasama serta daftar negara dan tipe kerjasama.
[sourcecode language=”php”]

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>’;
}
[/sourcecode]

6. Membuat fungsi penyimpanan data Negara dan data Tipe Kerjasama
[sourcecode language=”php”]
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;
}
[/sourcecode]

7. Membuat sub menu pada Dasbor WordPress
[sourcecode language=”php”]
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’);
[/sourcecode]

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?

Terbaru

  • Profil Farida Farichah, Wakil Menteri Koperasi Kabinet Merah Putih Reshuffle 17 September 2025
  • Ini Info Terbaru Pencairan BSU BPJS Ketenagakerjaan 2025!
  • Cara Reset Printer Epson L3110 2025
  • WhatsApp Tiba-tiba Keluar dan Meminta Verifikasi: Apa yang Harus Dilakukan?
  • Bisakah Saldo BNI Kamu Nol? Fakta dan Cara Mengatasinya
  • Inilah Tanda-tanda Chat Audio di Grup WhatsApp Sudah Disadap
  • Cara Mengatasi Tidak Bisa Live Instagram Karena Tidak Memenuhi Syarat
  • 7 Spek Laptop yang Ideal untuk Coding & Ngoding Web/App
  • Keuntungan dan Kerugian Menggunakan PayPal: Panduan Lengkap
  • Cara Menggunakan Stellarium Web
  • Cara Menghapus Data KTP Pribadi di Pinjol yang Belum Lunas
  • Cara Mengganti Nomor TikTok yang Tidak Aktif atau Hilang Tanpa Verifikasi
  • Cara Menggunakan BCA PayLater Terbaru 2025
  • Cara Mendapatkan IMPoint Indosat IM3 Ooredoo Gratis via MyIM3
  • Apa Arti TikTok ‘Shared With You’?
  • Cara Menghapus Data KTP di Pinjol: Panduan Lengkap
  • Cara Download WhatsApp GB Terbaru 2025 – Fitur Lengkap & Aman
  • Review WhatsApp Beta: Apakah Aman? Cara Instal dan Cara Keluar
  • Bebong: Makna, Asal Usul, dan Penggunaan dalam Bahasa Indonesia
  • Spinjam dan Spaylater: Apa yang Terjadi Jika Terlambat Membayar dan Bisakah Meminjam Lagi?
  • Cara Download dan Menonton Dood Stream Tanpa Iklan – Doods Pro
  • Cara Menghentikan dan Mengatasi Pinjol Ilegal
  • Kode Bank BRI untuk Transfer ke PayPal
  • Cara Menyadap WhatsApp Tanpa Aplikasi dan Kode QR
  • Apa yang Terjadi Jika Telat Bayar Shopee PayLater?
  • Telat Bayar Listrik 1 Hari: Apa yang Terjadi?
  • Cara Mengunduh Foto Profil WhatsApp Teman di Android, iPhone, dan PC/Mac
  • Rekomendasi Aplikasi Edit Foto Ringan Terbaik untuk PC Windows dan macOS
  • Cara Membeli Diamond Mobile Legends Menggunakan Pulsa Telkomsel
  • Tutorial Menggunakan Aplikasi Dana: Cara Top Up Dana dengan Mudah, Cepat, dan Murah untuk Pemula
  • Profil Farida Farichah, Wakil Menteri Koperasi Kabinet Merah Putih Reshuffle 17 September 2025
  • Ini Info Terbaru Pencairan BSU BPJS Ketenagakerjaan 2025!
  • Cara Reset Printer Epson L3110 2025

©2025 emka.web.id | Design: Newspaperly WordPress Theme