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

  • Apa Itu Rasio Gambar Ukuran 1:1 di Canva? Ini Pengertian dan Cara Buatnya
  • Pengiriman Shopee Express Hemat itu Berapa Lama? Ini Pengertian dan Estimasi Sampainya
  • Android 2025: Aplikasi Baru dan Smartphone Impian yang Akan Datang!
  • Apa Itu Google AI Pro Ultra? Ini Pengertian dan Penjelasan Lengkapnya
  • Apa Itu Error Gagal Kirim Nilai RDM 3.1? Ini Pengertian dan Solusi Mengatasinya
  • Facebook Mulai Batasi Link Eksternal Cuma 2 Sebulan! Ini Trik Mengatasinya
  • Cara Nonton Tensura Season 4! Bakal Tayang April 2026 dengan Format 5 Cour
  • Belum Tahu? Inilah Trik Supaya Live TikTok Kalian Aman dan Banjir Cuan
  • Pixel 8 Dapatkan Mode Panorama Baru! Hasil Foto Lebih Luas & Lebih Kreatif
  • Apa Itu AppLocker? Ini Pengertian dan Cara Mengamankan Windows 11 Kalian dari Skrip Jahat
  • Cara Membuat Riwayat Copilot Kamu Tetap Bersih dan Rapi!
  • Game & Aplikasi Android Terbaik Saat Diskon Liburan Natal! Jangan Ketinggalan!
  • Apa Itu Game Prison Escape Journey? Ini Pengertian dan Cara Mainnya untuk Pemula
  • “Listrik Gratis” dari Solar Panel Cuma Mitos?! Ini Sisi Gelap PLTS
  • Samsung Galaxy Z-Fold: Uji Jatuh Bebas yang Mengguncang Keandalan Lipatannya
  • Google One 2026: Apa yang Akan Jadi Fitur Utama dan Harga yang Diharapkan?
  • Apa Itu Error 0x800704f8? Ini Pengertian dan Cara Mengatasinya
  • Android Akhirnya Dapat GPS Darurat di India! Setelah Hampir 10 Tahun
  • Apa Itu GetContact Premium? Ini Pengertian dan Cara Daftarnya
  • Android Maze Figure: Koleksi Baru Google yang Bikin Penggemar Bergairah!
  • Google Update Besar-besaran Desember 2025: Apa yang Akan Memengaruhi Pengalaman Anda?
  • Masih Pusing Hitung Gaji Manual? Waktunya Pakai Aplikasi HR
  • Apa Itu Dustruco? Ini Pengertian dan Cara Pasangnya di HP Kalian
  • Apa Itu Aplikasi Dooie Live? Ini Pengertian dan Cara Pakai Aplikasinya untuk Cari Jodoh
  • Apa Itu Battle Emote Jefri Nichol dan Om Telolet Om di MLBB? Ini Penjelasannya
  • Apa itu Game Luna Mobile dan Bagaimana Cara Menangnya?
  • Apa Itu Kompensasi Sistem Trail Mobile Legends? Ini Penjelasan dan Cara Klaim Hadiahnya
  • Apa Itu Update Google Pixel 2 Desember 2025? Ini Penjelasannya!
  • Ini Cara Reset Desil di Aplikasi Cek Bansos Biar Valid (Update Januari 2026)
  • Apa Itu EZNET Wireless dan Fiber Optic? Ini Perbedaan dan Pengertian Lengkapnya
  • Apa itu Cosmic Desktop: Pengertian dan Cara Pasangnya di Ubuntu 26.04?
  • Apa Itu Auvidea X242? Pengertian Carrier Board Jetson T5000 dengan Dual 10Gbe
  • Elementary OS 8.1 Resmi Rilis: Kini Pakai Wayland Secara Standar!
  • Apa Itu Raspberry Pi Imager? Pengertian dan Pembaruan Versi 2.0.3 yang Wajib Kalian Tahu
  • Performa Maksimal! Ini Cara Manual Update Ubuntu ke Linux Kernel 6.18 LTS
  • Inilah Cara Membuat AI Agent Cerdas dan Memantaunya Menggunakan LangGraph dan LangSmith
  • Ini Alasan China Akan Menang di Dunia AI
  • Apa Itu AI Gateway? Ini Definisi Tulang Punggung Infrastruktur AI Modern
  • Apa Itu Google AI Pro Ultra? Pengertian dan Bedah Fitur Terbarunya
  • Apa Itu FARA 7B? Ini Pengertian dan Cara Menjalankannya di Windows 11
  • Apa Itu Distribusi Malware Via YouTube? Ini Pengertian dan Bahayanya Buat Kalian
  • Apa Itu Undang-Undang NDAA? Ini Pengertian dan Dampaknya Bagi Cyber Command Amerika Serikat
  • Tagihan AWS Sekarang Bisa Dibayar Pakai BNB via BPN, Ini Caranya!
  • Video Botol Teh Pucuk 1 Menit 50 Detik yang Viral di TikTok! Hati-Hati Kejahatan Siber
  • Apa Itu Kerentanan WatchGuard CVE-2024-36193? Ini Penjelasannya
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ

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