add_meta_box()函數(shù)是被用來在文章編輯等頁面添加一個設(shè)置的區(qū)域的函數(shù)。
創(chuàng)建的文章類型默認的僅有標題、作者、分類、標簽、日期和評論,這些也許對博客已經(jīng)足夠使用了,但是對于產(chǎn)品類型的文章來說,不僅僅需要標題和正文,還需要單獨設(shè)置一些其它的參數(shù),如產(chǎn)品價格、產(chǎn)品型號、規(guī)格大小等,那么就需要給文章類型添加Meta Box,通俗點理解就是自定義字段表單,下面就來以實例講解下這個函數(shù)的用法。
語法結(jié)構(gòu)
<?php add_meta_box(
$id,
$title,
$callback,
$post_type,
$context,
$priority,
$callback_args
);
?>
參數(shù)
$id(字符串)(必需)字段id,唯一
$title(字符串)(必需)標題名稱,顯示在文章編輯頁面
$callback(回調(diào))(必需)回調(diào)函數(shù)
$post_type(字符串)(必需)文章類型
$context(字符串)(可選)顯示位置,文章編輯頁面包括’normal’, ‘side’, and ‘advanced’的形式,Menus meta boxes僅用’side’的形式
$priority(字符串)(可選)優(yōu)先級,默認值: ‘default’
$callback_args(數(shù)組)(可選)傳遞到 callback 函數(shù)的參數(shù)。callback 函數(shù)將接收 $post 對象和其他由這個變量傳遞的任何參數(shù)。
實例
add_action( 'add_meta_boxes', 'product_price' );
function product_price() {
add_meta_box(
'product_price',
'產(chǎn)品價格',
'product_price_meta_box',
'store',
'side',
'low'
);
}
創(chuàng)建回調(diào)函數(shù)product_price_meta_box
配置參數(shù)里面指定了回調(diào)函數(shù)product_price_meta_box,需要在這個函數(shù)里面創(chuàng)建表單,
隱藏的自定義字段
插件/主題開發(fā)人員如果需要用自定義字段來保存插件或模板相關(guān)參數(shù),會發(fā)現(xiàn)WordPress不會在頁面/文章編輯頁的自定義字段列表上顯示以”_”(下劃線)開始的關(guān)鍵字。這樣就可以在自定義參數(shù)中將下劃線作為第一個字符,這些設(shè)置將按自定義字段被保留,但卻不會在管理者用戶界面的自定義字段中顯示出來。
function product_price_meta_box($post) {
// 創(chuàng)建臨時隱藏表單,為了安全
wp_nonce_field( 'product_price_meta_box', 'product_price_meta_box_nonce' );
// 獲取之前存儲的值
$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)品價格">
? ?<span>價格</span>
<?php
}
提示:添加上面代碼后,新建文章時,在右則就可以看到一個產(chǎn)品價格的輸入框。
這時候表單還不能用,因為提交文章之后并沒有保存這個 Meta Box 的內(nèi)容,下面是驗證保存內(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注冊完成,就可以開始添加參數(shù)了:
調(diào)用代碼
<?php
if(get_post_meta($post->ID,'_product_price',true)){
echo get_post_meta($post->ID,'_product_price',true);
}
?>
把META BOX添加把后臺所有產(chǎn)品列表字段中顯示
通過manage_$post_type_posts_custom_column實現(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)品價格';
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;
}
}