add_meta_box()函數(shù)是被用來(lái)在文章編輯等頁(yè)面添加一個(gè)設(shè)置的區(qū)域的函數(shù)。
創(chuàng)建的文章類型默認(rèn)的僅有標(biāo)題、作者、分類、標(biāo)簽、日期和評(píng)論,這些也許對(duì)博客已經(jīng)足夠使用了,但是對(duì)于產(chǎn)品類型的文章來(lái)說(shuō),不僅僅需要標(biāo)題和正文,還需要單獨(dú)設(shè)置一些其它的參數(shù),如產(chǎn)品價(jià)格、產(chǎn)品型號(hào)、規(guī)格大小等,那么就需要給文章類型添加Meta Box,通俗點(diǎn)理解就是自定義字段表單,下面就來(lái)以實(shí)例講解下這個(gè)函數(shù)的用法。
語(yǔ)法結(jié)構(gòu)
<?php add_meta_box(
$id,
$title,
$callback,
$post_type,
$context,
$priority,
$callback_args
);
?>
參數(shù)
$id(字符串)(必需)字段id,唯一
$title(字符串)(必需)標(biāo)題名稱,顯示在文章編輯頁(yè)面
$callback(回調(diào))(必需)回調(diào)函數(shù)
$post_type(字符串)(必需)文章類型
$context(字符串)(可選)顯示位置,文章編輯頁(yè)面包括’normal’, ‘side’, and ‘advanced’的形式,Menus meta boxes僅用’side’的形式
$priority(字符串)(可選)優(yōu)先級(jí),默認(rèn)值: ‘default’
$callback_args(數(shù)組)(可選)傳遞到 callback 函數(shù)的參數(shù)。callback 函數(shù)將接收 $post 對(duì)象和其他由這個(gè)變量傳遞的任何參數(shù)。
實(shí)例
add_action( 'add_meta_boxes', 'product_price' );
function product_price() {
add_meta_box(
'product_price',
'產(chǎn)品價(jià)格',
'product_price_meta_box',
'store',
'side',
'low'
);
}
創(chuàng)建回調(diào)函數(shù)product_price_meta_box
配置參數(shù)里面指定了回調(diào)函數(shù)product_price_meta_box,需要在這個(gè)函數(shù)里面創(chuàng)建表單,
隱藏的自定義字段
插件/主題開發(fā)人員如果需要用自定義字段來(lái)保存插件或模板相關(guān)參數(shù),會(huì)發(fā)現(xiàn)WordPress不會(huì)在頁(yè)面/文章編輯頁(yè)的自定義字段列表上顯示以”_”(下劃線)開始的關(guān)鍵字。這樣就可以在自定義參數(shù)中將下劃線作為第一個(gè)字符,這些設(shè)置將按自定義字段被保留,但卻不會(huì)在管理者用戶界面的自定義字段中顯示出來(lái)。
function product_price_meta_box($post) {
// 創(chuàng)建臨時(shí)隱藏表單,為了安全
wp_nonce_field( 'product_price_meta_box', 'product_price_meta_box_nonce' );
// 獲取之前存儲(chǔ)的值
$value = get_post_meta( $post->ID, '_product_price', true );
?>
<label for="product_price"></label>
? ?<input style="width:180px" type="text" id="product_price" name="product_price" value="<?php echo esc_attr( $value ); ?>" placeholder="輸入產(chǎn)品價(jià)格">
? ?<span>價(jià)格</span>
<?php
}
提示:添加上面代碼后,新建文章時(shí),在右則就可以看到一個(gè)產(chǎn)品價(jià)格的輸入框。
這時(shí)候表單還不能用,因?yàn)樘峤晃恼轮蟛]有保存這個(gè) Meta Box 的內(nèi)容,下面是驗(yàn)證保存內(nèi)容的代碼:
add_action( 'save_post', 'product_price_save_meta_box' );
function product_price_save_meta_box($post_id){
if ( ! isset( $_POST['product_price_meta_box_nonce'] ) ) {
return;
}
if ( ! wp_verify_nonce( $_POST['product_price_meta_box_nonce'], 'product_price_meta_box' ) ) {
return;
}
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
if ( ! isset( $_POST['product_price'] ) ) {
return;
}
$product_price = sanitize_text_field( $_POST['product_price'] );
update_post_meta( $post_id, '_product_price', $product_price );
}
把上面的代碼按順序添加到主題的functions.php文件,至此,Meta Box注冊(cè)完成,就可以開始添加參數(shù)了:
調(diào)用代碼
<?php
if(get_post_meta($post->ID,'_product_price',true)){
echo get_post_meta($post->ID,'_product_price',true);
}
?>
把META BOX添加把后臺(tái)所有產(chǎn)品列表字段中顯示
通過manage_$post_type_posts_custom_column實(shí)現(xiàn),代碼如下
add_filter('manage_store_posts_columns', 'add_new_product_columns');
function add_new_product_columns($columns) {
$columns['id'] = 'ID';
$columns['product_price'] = '產(chǎn)品價(jià)格';
return $columns;
}
add_action('manage_store_posts_custom_column', 'manage_posts_columns', 10, 2);
function manage_posts_columns($column,$id) {
global $post;
switch ($column) {
case 'id':
echo $id;
break;
case 'product_price':
echo get_post_meta( $post->ID, '_product_price', true );
break;
}
}