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

  • Inilah Panduan Lengkap Operator Sekolah Mengelola SPTJM e-Ijazah dan Menghindari Kesalahan Fatal Data Kelulusan
  • Inilah Syarat dan Penilaian Seleksi Siswa Unggul ITB Jalur UTBK
  • Download Video Viral Guru Bahasa Inggris? Awas Berisi Virus!
  • PKB Minta Kasus C4bul Pendiri Ponpes Pati Tidak Ada Ampunan & Tuntutan Maksimal
  • Inilah Kronologi Video Viral Preman vs Sopir Di Sumedang
  • Ini Alasan UKP Pariwisata Disindir Konten Kreator Drone Gunung Rinjani
  • Inilah Kronologi Viral Video Dugaan Asusila Pegawai Disdik Pasuruan di Mobil Dinas
  • Polisi Polda Sumut Resmi Dipecat: Dari Video Viral Sampai Sidang Etik Ini Kronologinya
  • ASUS ExpertBook Ultra: Produk Flagship yang Cerminkan Kepemimpinan ASUS di Pasar Global
  • Inilah Tahapan dan Syarat Pendaftaran Beasiswa Garuda 2026 Gelombang II (25 Mei – 25 Juni 2026)
  • Ini Maksud Soal Tugas Guru Non-ASN Berakhir 2027!
  • Apa Itu Siscamling? Inilah Cara Mengaktifkan Paket Anti Spam Telkomsel
  • Sah, Nilai TKA Jadi Salah Satu Komponen Seleksi Siswa SPMB Secara Nasional 2026
  • Inilah 3 Lagi Pinjol Ilegal Menurut OJK Tahun 2026
  • Cara Login Proktor Browser OSN Mode Online, Uji Coba OSN Semua Jenjang Terbaru
  • Inilah Link Web Komunikasi OSN 2026 anbk.kemendikdasmen.go.id/osnk ANBK Kemendikdasmen untuk Simulasi
  • Inilah Jadwal Pembagian Deviden BBRI 2026, Siap-siap!
  • Ini Alasan Kenapa Followers IG Berkurang Sendiri Mei 2026?
  • Panduan Download vhd-osnk-2025_fresh versi 29.25.5.0 untuk Uji Coba OSN-K SMA SMP Sederajat 2026
  • Iniloh Syarat dan Komponen Nilai Seleksi Siswa Unggul ITB Jalur Nilai Rapor 2026/2027
  • Inilah Syarat dan Prosedur Ikut Seleksi Siswa Unggul ITB Jalur Tes Tulis 2026/2027
  • Inilah Kronologi & Latar Belakang Kasus Erin Taulany vs ART Hera: Masalah Facebook Pro?
  • Inilah Alasan Kenapa Ending Film Children of Heaven diubah di Indonesia
  • Ini Alasan Hanny Kristianto Cabut Sertifikat Mualaf Richard Lee
  • Inilah Syarat Dokumen SSU ITB 2024-2026 yang Wajib Kalian Siapkan Supaya Nggak Gagal Seleksi Administrasi
  • Inilah Episyrphus Balteatus, Lalat Unik Penyamar yang Sangat Bermanfaat bagi Taman Kalian
  • Inilah Cara Lolos Seleksi Siswa Unggul ITB Lewat Jalur Tes Tulis Biar Jadi Mahasiswa Ganesha
  • Inilah Penemuan Fosil Hadrosaurus yang Ungkap Bahwa Penyakit Langka Manusia Sudah Ada Sejak Zaman Prasejarah
  • Inilah Penemuan Terbaru yang Mengungkap Bahwa Sunburn Ternyata Disebabkan Oleh Kerusakan RNA
  • Inilah Alasan Kenapa Manusia Lebih Sering Hamil Satu Bayi daripada Kembar Menurut Penelitian Terbaru
  • How to build a high-performance private photo cloud with Immich and TrueNAS SCALE
  • How to Build an Endgame Local AI Agent Setup Using an 8-Node NVIDIA Cluster with 1TB Memory
  • How to Master Windows Event Logs to Level Up Your Cybersecurity Investigations and SOC Career
  • How to Build Ultra-Resilient Databases with Amazon Aurora Global Database and RDS Proxy for Maximum Uptime and Performance
  • How to Build Real-Time Personalization Systems Using AWS Agentic AI to Make Every User Feel Special
  • How to utilize Hermes Agent V0.13 Tenacity Release to build a fully autonomous AI workforce for your personal projects
  • ChatGPT 5.5 Memory Update is Insane! Here’s the Tutorial
  • How to Write Super Fast GPU Kernels in Python Using CUTLASS and JAX for Your Deep Learning Projects
  • How to set up OpenClaw and build your own local AI assistant plugins with ease
  • How to Create Stunning Cinematic AI Videos Using the New Higgsfield Canvas Node-Based Architecture
  • 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