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

  • Kode 0425 Daerah Mana? Ini Pengertian dan Fakta Sebenarnya
  • Apa Itu SSS CapCut? Pengertian Downloader Video Tanpa Watermark yang Wajib Kalian Tahu
  • Apa Itu Paket GamesMAX Telkomsel? Ini Pengertian dan Fungsinya Bagi Gamers
  • Apa Itu Menu Plus di Google Search? Ini Pengertian dan Fungsinya
  • Apa Itu Lepas Kolpri? Ini Pengertian dan Fenomenanya di Dunia Gaming
  • Pixel Buds Pro Dapat Update Software dengan Dukungan ANC Adaptif dan Peningkatan Audio
  • Mous Pixel Watch 4 Akan Hadir dengan Charger Baru dan Fitur-Fitur Terbaru
  • Hati-hati, Video Asli Botol Golda Viral Season 4 Full 6.30 Menit, Cek Link dan Faktanya disini!
  • Google Docs Dapat Update Material 3 dan Desain Ekspresif Baru, Fokus pada Kreativitas dan Kolaborasi
  • Belum Tahu? Ini Trik Hitung Cost Per Gigabyte Supaya Gak Boncos Saat Beli Paket Internet
  • Apple TV dan Google Cast Akan Terintegrasi Lebih Dalam, Tawarkan Pengalaman Streaming yang Lebih Baik
  • Lagi Rame Botol Golda Viral 19 Detik? APA ITU? Jangan Asal Klik Link Sembarangan, Ini Bahayanya!
  • Apa itu Regedit FF Auto Headshot 100 No Password 2024? Simak Definisi dan Cara Kerjanya
  • Apa Itu KPH dan MPH? Pengertian dan Perbedaannya di Game Balap
  • Belum Tahu? Inilah Cara Aman Quotex Login dan Solusi Kalau Error!
  • Apa Itu Fitur Gestur Baru di Pixel Watch 4? Ini Pengertian dan Perbedaannya
  • Belum Tahu? Inilah Cara Aman Login Binomo dan Trik Trading Buat Pemula Biar Nggak Boncos
  • Cara Mengatasi Error ‘Versi Diagnostik Belum Terbarui’ (Your current version of diagnostics is not up to date)
  • Cara Membuat Newsletter di Outlook 365
  • Sering Telepon di Tempat Berisik? Fitur Baru Expressive Call dari Google Bakal Jadi Penyelamat Kalian!
  • Google Pixel 10 Pro Akan Punya Integrasi Play Points Lebih Dalam
  • Stop Cara Kuno! Ini Trik Supaya Manajemen Karyawan Jadi Lebih Cepat dan Anti Ribet
  • Bug di Aplikasi Cuaca Wear OS Google: Update Tidak Ngaruh!
  • Samsung Kembangkan Sensor Kamera Baru Pakai Teknologi Global Shutter dan Efek Blur Bergerak
  • Cara Membuat Anggaran Otomatis di Excel
  • Baseus X1 Pro Kamera: Kamera Ringkas dengan Fitur Canggih dan Harga yang Menarik
  • Profil Sosmed Kalian Sepi? Gini Caranya Makeover Bio Biar Makin Dilirik Sama Netizen!
  • Cara Mengatasi Error ‘Disk is Full or Read-Only’
  • Belum Tahu? Inilah Trik Ampuh Atasi Error ‘We Were Unable To Create Your Notebook’ di OneNote
  • Trik Instagram Stories 2025: Ubah Viewer Jadi Loyal Follower dengan Fitur Sederhana Ini
  • Ini Dia ESP32 P4: IoT RISC-V dengan Layar AMOLED dan LoRa, Perangkat Handheld Inovatif
  • Apa Itu HealthyPi-6? Solusi Open Source untuk Akuisisi Biosignal
  • Jetson THOR Industrial PC: 25Gbe Networking dan Bisa Pakai Kamera GMSL2
  • Azul Systems Akuisisi Payara Java Server
  • PC Kentang Jadi Ngebut? Coba GRML 2025, Distro Debian Ringan dengan Kernel 6.17!
  • Apa Itu US National Framework for AI? Kepres Donald Trump Bikin Heboh Dunia AI
  • Kenapa Bisnis Properti & Real Estate Harus Pakai AI, Ini Alasannya!
  • BARU! Brave Browser Bakal Bisa Ngerjain Tugas Kalian Secara Otomatis Lewat Agentic AI!
  • Belum Tahu? Google Maps Bakal Makin Canggih Berkat Integrasi Gemini Visual Ini!
  • Siap-Siap! Tahun 2026 Gemini Bakal “Menjajah” Chrome, iPhone, sampai Smartwatch Kalian
  • Apa Itu Video PT Pabrik Brebes Viral? Ini Pengertian dan Fakta Sebenarnya
  • Apa itu Data Breach Coupang? Pengertian dan Kronologi Kebocoran Data Terbesar di Korea Selatan
  • Apa Itu CVE-2018-4063? Pengertian Celah Keamanan Sierra Wireless AirLink yang Masuk Katalog CISA
  • Apa Itu Ashen Lepus? Kelompok Peretas yang Mengincar Instansi Pemerintah Timur Tengah
  • Pengertian Vulnerability WebKit Apple Terbaru: Apa Itu CVE-2025-43529 dan CVE-2025-14174?

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