03在 PagePost新增文章時,多個欄位

Screen_Shot_2016-01-14_at_5_28_08_PM

原始程式。可以在此下載

[php]
<?php

/*
Plugin Name: PowenKo Page POST Meta
Plugin URI: http://wordpress.org/plugins/hello-dolly/
Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page.
Author: Powen Ko
Version: 1.6
Author URI: http://ma.tt/
*/

/* 小範例:建立英文選單標題 */
add_action('admin_init', 'admin_init_fn'); // 指定後台初始化時要執行我們自訂的函式admin_init_fn

function admin_init_fn()
{
// 使用add_meta_box來增加一個「自訂區塊」,在callback的參數位置,放上我們自訂的函式 EnTitleCB_fn
// add_meta_box('EnTitle', 'Powen Ko 英文標題', 'EnTitleCB_fn', 'page', 'normal', 'high', null);
// add_meta_box('EnTitle', 'Powen Ko 英文標題', 'EnTitleCB_fn', 'post', 'normal', 'high', null);

$types = array( 'post', 'page', 'custom-type' );

foreach( $types as $type ) {
// add_meta_box('EnTitle', 'Powen Ko 英文標題', 'EnTitleCB_fn', $type, 'side');
add_meta_box('EnTitle', 'Powen Ko 英文標題', 'EnTitleCB_fn', $type, 'normal', 'high', null);
}

}

// 當WP要畫出自訂區塊時,就會執行add_meta_box指定的這個callback函式
function EnTitleCB_fn()
{
// 需要取得目前編輯的post資訊,如id
global $post;
// 把我們自訂的Post Meta從資料庫取出,待會放進欄位
// 看你需要多少欄位,就要執行幾次get_post_meta()來取值
$entitle_cnt = get_post_meta( $post->ID, 'EnTitle', true );
?>
<th scope="row">主選單英文標題:</th>
<td>
<!-- 開始畫出UI,看你需要多少欄位,就畫多少input出來 -->
<label for="EnTitle">
<input id="EnTitle" type="text" size="75" name="EnTitle" value="<?php echo $entitle_cnt;?>" />
<br /><em>說明:設定分頁出現在選單時的英文翻譯。</em>
</label>
</td>
</tr>
<?php
}
///////////////
add_action('wp_insert_post', 'insert_post_fn', 10, 2); // 讓WP在新增文章內容時,也執行我們定義的insert_post_fn

function insert_post_fn($post_id, $post = null)
{
// 'EnTitle'是我們定義的input的name,如果還有其他的欄位,就把它們的name加入。
// 如 array("EnTitle","aaa","bbb"); 下方的程式碼就會以迴圈來處理陣列中的每個input值
$meta_post_fields = array("EnTitle");
$goloop = true;

// 如果是我們要處理的內容型別-page 就處理它
if ($post->post_type == "page")
{
$mfs = $meta_post_fields;
$goloop = true;
}
if ($post->post_type == "post")
{
$mfs = $meta_post_fields;
$goloop = true;
}

// $mfs = $meta_post_fields;

if ($goloop)
{
// 取得Post進來的欄位資料,針對我們自訂的欄位$meta_fields
foreach ($mfs as $key)
{
// 如果有空值就不進行處理
$value = @$_POST[$key];
if (empty($value))
{
delete_post_meta($post_id, $key);
continue;
}

// 如果丟過來的參數不是陣列
if (!is_array($value))
{
// 更新資料,若無法更新,代表是要新增資料
if (!update_post_meta($post_id, $key, $value))
{
add_post_meta($post_id, $key, $value);
}
}
else
{
// 如果丟過來的參數是陣列,先刪除之前的值,再一個個建進相同名稱的post meta
delete_post_meta($post_id, $key);

// Loop through the array adding new values to the post meta as different entries with the same name
foreach ($value as $entry)
{
add_post_meta($post_id, $key, $entry);
}
}
}
}
}
///////////////

function remove_post_custom_fields() {
remove_meta_box( 'postcustom' , 'post' , 'normal' );
}
add_action( 'admin_menu' , 'remove_post_custom_fields' );

?>

[/php]

wordpress
CH02用戶資料CH03基本APICH05 分類頁面Category.phpCH09Screen Options(顯示選項)CH10外掛pluginsCH11 add_actionCH12 add_filterCH13Meta Box(自訂區塊)CH14widget(自訂模組)CH15 DBCH16AJAXCH17ShortcodeCH20 wordpress muCH30WooCommerce