Sudah satu bulan ini saya fokus mengembangkan sebuah sistem informasi yang murni masuk dalam kerangka Framework WordPress. Salah satu bagian penting yang harus saya selesaikan pada pengembangan sistem kali ini adalah halaman upload file yang disertai dengan beberapa field baru, yaitu field kategori dokumen dalam bentuk combobox dan field kode dokumen dalam bentuk text box.

Saya tidak ingin mengembangkan sendiri halaman tersebut karena akan jadi tidak efisien, WordPress telah memiliki sendiri halaman upload file yang sudah matang dengan kemampuan Upload berbasis flash dan html berikut skema penyimpanannya yang bagus. Solusi yang saya temukan, kita harus melakukan filtering pada halaman tersebut guna menambahkan dua field baru. Function yang harus difilter kali ini attachment_fields_to_edit dan attachment_fields_to_save.

Berikut implementasi riilnya:

function wpbpm_add_customfield_kategori_dokumeniso($form_fields, $post) {

	if(get_post_meta($post->ID, "_dokumeniso_cat", true)=="1"){ $selected1 = 'selected="selected"'; }
	if(get_post_meta($post->ID, "_dokumeniso_cat", true)=="2"){ $selected2 = 'selected="selected"'; }
	if(get_post_meta($post->ID, "_dokumeniso_cat", true)=="3"){ $selected3 = 'selected="selected"'; }
	if(get_post_meta($post->ID, "_dokumeniso_cat", true)=="4"){ $selected4 = 'selected="selected"'; }
	if(get_post_meta($post->ID, "_dokumeniso_cat", true)=="5"){ $selected5 = 'selected="selected"'; }
	if(get_post_meta($post->ID, "_dokumeniso_cat", true)=="6"){ $selected6 = 'selected="selected"'; }

	$html = '

<select name="attachments['.$post->ID.'][wpbpm_dokumeniso_cat]"> <option value=""> -- Pilih -- </option></select>
<select name="attachments['.$post->ID.'][wpbpm_dokumeniso_cat]"> <option value="1">Instruksi Kerja (IK)</option></select>
<select name="attachments['.$post->ID.'][wpbpm_dokumeniso_cat]"> <option value="2">Kebijakan Mutu (KM)</option></select>
<select name="attachments['.$post->ID.'][wpbpm_dokumeniso_cat]"> <option value="3">Manual Mutu (MM)</option></select>
<select name="attachments['.$post->ID.'][wpbpm_dokumeniso_cat]"> <option value="4">Prosedur Mutu (PM)</option></select>
<select name="attachments['.$post->ID.'][wpbpm_dokumeniso_cat]"> <option value="5">Rencana Mutu (RM)</option></select>
<select name="attachments['.$post->ID.'][wpbpm_dokumeniso_cat]"> <option value="6">Sasaran Mutu (SM)</option></select>

';

	$form_fields["wpbpm_dokumeniso_cat"] = array(
		"label" => __("Kategori Dokumen ISO"),
		"input" => "html", // this is default if "input" is omitted
		"html" => $html,
		"value" => get_post_meta($post->ID, "_dokumeniso_cat", true),
        "helps" => __("Pilih salah satu kategori dokumen ISO untuk dokumen ini.")
	);

	$form_fields["wpbpm_dokumeniso_kode"] = array(
		"label" => __("Kode Dokumen ISO"),
		"input" => "text",
		"value" => get_post_meta($post->ID, "_dokumeniso_kode",true),
		"help"  => __("Isikan kode dokumen ISO.")
	);
   return $form_fields;
}

// now attach our function to the hook
add_filter("attachment_fields_to_edit", "wpbpm_add_customfield_kategori_dokumeniso", null, 2);

Skrip diatas, tuliskan dalam file function theme anda atau pada salah satu plugin yang anda kembangkan. Fungsi tersebut akan menambahkan fied berupa combo box dan text box pada field edit properties file yang diupload via halaman upload bawaan milik WordPress. Untuk fungsi penyimpanannya, silakan lihat skrip berikut:

function wpbpm_save_customfield_kategori_dokumeniso($post, $attachment) {
	// $attachment part of the form $_POST ($_POST[attachments][postID])
        // $post['post_type'] == 'attachment'
	if( isset($attachment['wpbpm_dokumeniso_cat']) ){
		// update_post_meta(postID, meta_key, meta_value);
		update_post_meta($post['ID'], '_dokumeniso_cat', $attachment['wpbpm_dokumeniso_cat']);
	}

	if( isset($attachment['wpbpm_dokumeniso_kode']) ){
		// update_post_meta(postID, meta_key, meta_value);
		update_post_meta($post['ID'], '_dokumeniso_kode', $attachment['wpbpm_dokumeniso_kode']);
	}
	return $post;
}
// now attach our function to the hook.
add_filter("attachment_fields_to_save", "wpbpm_save_customfield_kategori_dokumeniso", null , 2);

Dengan solusi ini, setiap file attachment yang kita unggah akan memiliki dua metadata tambahan yaitu _dokumeniso_cat dan _dokumeniso_kode, dan dapat kita olah lebih lanjut dalam halaman lain.

Screenshootnya: