Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • 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

  • SEO LinkedIn: Inilah Alasan Kenapa LinkedIn Ads Lebih Efektif Buat Bisnis B2B Dibanding Platform Lain
  • Inilah Alasan Kenapa Kolom Komentar YouTube Kalian Sering Menghilang Secara Misterius!
  • Cara Kelola Auto-Posting Semua Media Sosial Kalian Pakai Metricool
  • Studi Kasus Sukses Instagram Maria Wendt Dapat 12 Juta View Instagram Per Bulan
  • ZenBook S16, Vivobook Pro 15 OLED, ProArt PX13, dan ROG Zephyrus G14, Laptop Bagus dengan Layar OLED!
  • Caranya Ngebangun Website Directory dengan Traffic Tinggi dalam Seminggu!
  • Cara Mengembangkan Channel YouTube Shorts Tanpa Wajah
  • Inilah Cara Menghitung Diskon Baju Lebaran Biar Nggak Bingung Saat Belanja di Mall!
  • Cara Jitu Ngebangun Bisnis SaaS di Era AI Pakai Strategi Agentic Workflow
  • Inilah Rincian Gaji Polri Lulusan Baru 2026, Cek Perbedaan Jalur Akpol, Bintara, dan Tamtama Sebelum Daftar!
  • Inilah 5 Channel YouTube Membosankan yang Diam-diam Menghasilkan Banyak Uang
  • Inilah Cara Pakai Google Maps Offline Biar Mudik Lebaran 2026 Nggak Nyasar Meski Tanpa Sinyal!
  • Inilah Alasan Mahkamah Agung Tolak Kasasi Google, Denda Rp202,5 Miliar Resmi Menanti Akibat Praktik Monopoli
  • Inilah Cara Daftar dan Syarat SPMB SMK Boarding Jawa Tengah 2026, Sekolah Gratis Sampai Lulus!
  • Inilah Daftar Sekolah Kedinasan 2026 untuk Lulusan SMK, Bisa Kuliah Gratis dan Berpeluang Besar Langsung Jadi CPNS!
  • Inilah Pajak TER: Skema Baru PPh 21 yang Nggak Bikin Pusing, Begini Cara Hitungnya!
  • Inilah Jadwal Resmi Jam Buka Tol Jogja-Solo Segmen Prambanan-Purwomartani Saat Mudik Lebaran 2026
  • Inilah Cara Mendapatkan Witherbloom di Fisch Roblox, Rahasia Menangkap Ikan Paling Sulit di Toxic Grove!
  • Kenapa Indomart Point Bisa Kalahkan Bisnis Kafe?
  • Inilah Cara Mendapatkan Rotten Seed di Fisch Roblox, Lokasi Rahasia di Toxic Grove Buat Unlock Toxic Lotus!
  • Inilah Cara Zakat Crypto Kalian Bisa Jadi Pengurang Pajak Berdasarkan Aturan Resmi Pemerintah!
  • Inilah Perbandingan Airwallex vs Payoneer 2026: Jangan Sampai Profit Kalian Ludes Gara-Gara Biaya Admin!
  • Inilah Roadmap 7 Tahap Bangun Bisnis Digital dari Nol Biar Nggak Cuma Putar-Putar di Tempat!
  • Inilah Cara Tetap Gajian dari YouTube Meski View Masih Ratusan, Penasaran?
  • Inilah Alasan Akun TikTok Affiliate GMV 270 Juta Kena Banned Permanen!
  • Inilah Bahaya Astute Beta Server APK, Jangan Sembarang Klik Link Download FF Kipas 2026!
  • Inilah Bahaya Nonton Film di LK21 dan IndoXXI, Awas Data Pribadi dan Saldo Rekening Kalian Bisa Ludes!
  • Inilah Kronologi & Video Lengkap Kasus Sejoli Tambelangan Sampang Viral, Ternyata Gini Awal Mulanya!
  • Inilah Alasan Kenapa Koin Nego Neko Shopee Nggak Bisa Dipakai Bayar Full dan Cara Rahasia Dapetinnya!
  • Inilah Cara Menjawab Pertanyaan Apakah di Sekolahmu Sudah Ada IFP/PID dengan Benar dan Profesional
  • What is the 99% Deletion Bug? Understanding and Fixing Windows 11 File Errors
  • How to Add a Password to WhatsApp for Extra Security
  • How to Recover Lost Windows Passwords with a Decryptor Tool
  • How to Fix Python Not Working in VS Code Terminal: A Troubleshooting Guide
  • Game File Verification Stuck at 0% or 99%: What is it and How to Fix the Progress Bar?
  • How to Build a Full-Stack Mobile App in Minutes with YouWare AI
  • How to Create Consistent Characters and Cinematic AI Video Production with Seedance
  • How to Find Your Next Viral Product Using PiPiAds AI Like a Pro!
  • Create Your Own Netflix-Style Documentaries Using AIQORA in Minutes!
  • How to Build a Super Chatbot with RAG Gemini Embbeding & Claude Code
  • Apa itu Spear-Phishing via npm? Ini Pengertian dan Cara Kerjanya yang Makin Licin
  • Apa Itu Predator Spyware? Ini Pengertian dan Kontroversi Penghapusan Sanksinya
  • Mengenal Apa itu TONESHELL: Backdoor Berbahaya dari Kelompok Mustang Panda
  • Siapa itu Kelompok Hacker Silver Fox?
  • Apa itu CVE-2025-52691 SmarterMail? Celah Keamanan Paling Berbahaya Tahun 2025

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