亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > CMS > Wordpress > 正文

WordPress中添加Add_Meta_Box使用方法

2024-09-07 00:51:46
字體:
來源:轉載
供稿:網友

Add_Meta_Box是從wordpress2.5以來出的一個插件了,我們可以利用它來實現添加meta模塊了,具體來看一些例子,希望對各位有幫助.

描述:add_meta_box() 函數是在 WordPress 2.5 添加的,用來給插件開發者添加 Meta模塊 到管理界面.

用法:

  1. <?php 
  2.    add_meta_box( $id$title$callback$post_type$context,$priority$callback_args ); 
  3. ?> 

參數:

$id(字符串)(必需)Meta模塊的 HTML“ID”屬性

$title(字符串)(必需)Meta模塊的標題,對用戶可見

$callback(回調)(必需)為Meta模塊輸出 HTML代碼的函數

$post_type(字符串)(必需)顯示Meta模塊的文章類型,可以是文章(post)、頁面(page)、鏈接(link)、附件(attachment) 或 自定義文章類型(自定義文章類型的別名)

$context(字符串)(可選)Meta模塊的顯示位置('normal','advanced', 或 'side')

默認值:'advanced'

$priority:(字符串)(可選)Meta模塊顯示的優先級別('high', 'core', 'default'or 'low')

默認值: 'default'

$callback_args:(數組)(可選)傳遞到 callback 函數的參數。callback 函數將接收 $post 對象和其他由這個變量傳遞的任何參數。

以添加一個自定義字段——【推薦指數】為例,來講講如何使用Meta Box。

備注:推薦指數,在本例中指的是文章作者對文章的打分,分數在1~10分,為整數。分數越高,越推薦。這樣我們可以通過下拉列表來選擇值了。

首先,需要使用到add meta boxes Action,該Action允許我們為任何文章類型注冊Meta Box,在該Action中,我們需要使用add_meta_box()方法來添加Meta Box的相關信息,代碼如下:

  1. function add_rating_meta_box($post_type$post) { 
  2.     // 需要哪些post type添加推薦指數 Meta Box 
  3.     $types = array'post''page' ); 
  4.      
  5.     foreach ( $types as $type ) { 
  6.         add_meta_box( 
  7.             'rating_meta_box_id'// Meta Box在前臺頁面中的id,可通過JS獲取到該Meta Box 
  8.             '推薦指數'// 顯示的標題 
  9.             'render_rating_meta_box'// 回調方法,用于輸出Meta Box的HTML代碼 
  10.             $type// 在哪個post type頁面添加 
  11.             'side'// 在哪顯示該Meta Box 
  12.             'default' // 優先級 
  13.         ); //開源軟件:Vevb.com 
  14.     } 
  15. add_action( 'add_meta_boxes''add_rating_meta_box' ); 

這里我們在$types數組中定義了Post和Page都需要推薦指數這個自定義字段,然后告訴WordPress使用“render_rating_meta_box”方法來渲染Meta Box,位置在側邊欄(side),因為內容不多,所以側邊欄足夠,若內容較多,可以將“side”改為“advanced”,這樣就會在主內容區域渲染Meta Box.

接下來看看是如何渲染的,代碼如下:

  1. function render_rating_meta_box( $post ) { 
  2.     // 添加 nonce 項用于后續的安全檢查 
  3.     wp_nonce_field( 'rating_nonce_action''rating_nonce_name' ); 
  4.     // 獲取推薦指數的值 
  5.     $rating_key = 'rating'
  6.     $rating_value = get_post_meta( $post->ID, $rating_key, true ); 
  7.     $rating_value = (int)$rating_value
  8.     $html = '<select name="rating_field">'
  9.     for ($i = 0; $i <= 10; $i++) { 
  10.         $selected = ''
  11.         if ($i == $rating_value) { 
  12.             $selected = 'selected="selected"'
  13.         }//開源軟件:Vevb.com 
  14.         $html .= sprintf('<option value="%s" %s>%s星</option>'$i$selected$i/2); 
  15.     } 
  16.     $html .= '</select>'
  17.     echo $html

這里先使用wp_nonce_field()添加了一個nonce field,用來做安全檢查,然后,讀取推薦指數的值,循環1~10來輸出可供選擇的值,如果和推薦指數相同,則默認選上,通過下拉框,既可以解決輸入不方便和無法驗證的問題,記住這里下拉框的name屬性的值(rating_field),將通過它在下面的代碼中獲取選擇的值.

最后,當文章被保存時,需要將推薦指數也保存起來,代碼如下:

  1. function save_rating_post_data( $post_id ) { 
  2.     // 檢查nonce是否設置 
  3.     if (!isset($_POST['rating_nonce_name'])) { 
  4.         return $post_id
  5.     } 
  6.     $nonce = $_POST['rating_nonce_name']; 
  7.     // 驗證nonce是否正確 
  8.     if (!wp_verify_nonce( $nonce'rating_nonce_action')) { 
  9.         return $post_id
  10.     } 
  11.     // 如果是系統自動保存,則不操作 
  12.     if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { 
  13.         return $post_id
  14.     } 
  15.      
  16.     // 檢查用戶權限 
  17.     if ($_POST['post_type'] == 'post') { 
  18.         if (!current_user_can('edit_post'$post_id )) { 
  19.             return $post_id
  20.         } 
  21.     } 
  22.     $rating_key = 'rating'
  23.     // 獲取數據 
  24.     $rating_value = $_POST['rating_field']; 
  25.     // 更新數據 
  26.     update_post_meta( $post_id$rating_key$rating_value ); 
  27. add_action( 'save_post''save_rating_post_data' ); 

這里做了一系列檢查,包括對剛剛設置的nonce檢查,用戶權限的檢查,排除自動保存的情況,然后使用update_post_meta()方法將數據存入數據庫.

至此,我們就完成了對推薦指數自定義字段的改裝,可以很方便的選擇文章的推薦指數,等等。。。

細心的朋友可能發現了,在應用了上面三段代碼后,的確可以實現功能,但是,在默認的自定義欄目區域下,是可以看到,有一個名為“rating”的欄目,這就是我們剛剛選擇的推薦指數,如果想讓他不在自定義欄目下,顯示,可以將上述代碼中的$rating_key改為以下劃線開頭,這樣,WordPress就不會顯示出來了,注意有兩個地方要改,代碼如下:

  1. // 原來的代碼 
  2. $rating_key = 'rating'
  3. // 改后的代碼 
  4. $rating_key = '_rating'

添加meta box 來上傳圖片

1.首先要支持圖片的上傳,要在functions.php中加入一下代碼:

  1. function my_add_edit_form_multipart_encoding() { 
  2.     echo ' enctype="multipart/form-data"'
  3. add_action('post_edit_form_tag''my_add_edit_form_multipart_encoding'); 

2.然后安裝meta box,代碼如下:

  1. function my_setup_meta_boxes() { 
  2.     add_meta_box('my_image_box''Upload Image''my_render_image_attachment_box''page''normal''high');//這個地方的參數大家可以去官方網站查看,我只是要說明一下第4個參數,如果想讓post支持就填寫post如果是page就填寫page,如果是自定義類型就填寫自定義類型的名稱 
  3. add_action('admin_init','my_setup_meta_boxes'); 

3.添加回調函數,代碼如下:

  1. function my_render_image_attachment_box($post) { 
  2.     // 顯示添加的圖片 
  3.     $existing_image_id = get_post_meta($post->ID,'_my_attached_image', true); 
  4.     if(is_numeric($existing_image_id)) { 
  5.         echo '<div>'
  6.             $arr_existing_image = wp_get_attachment_image_src($existing_image_id'large'); 
  7.             $existing_image_url = $arr_existing_image[0]; 
  8.             echo '<img src="' . $existing_image_url . '" />'
  9.         echo '</div>'
  10.     } 
  11.     // 如果已經上傳了圖片就提示 
  12.     if($existing_image) { 
  13.         echo '<div>Attached Image ID: ' . $existing_image . '</div>'
  14.     }  
  15.     echo 'Upload an image: <input type="file" name="my_image" id="my_image" />'
  16.     // 獲得圖片的狀態 
  17.     $status_message = get_post_meta($post->ID,'_my_attached_image_upload_feedback', true); 
  18.     // 顯示圖片狀態 
  19.     if($status_message) { 
  20.         echo '<div class="upload_status_message">'
  21.             echo $status_message
  22.         echo '</div>'
  23.     } 
  24.     // 自動保存 
  25.     echo '<input type="hidden" name="my_manual_save_flag" value="true" />'

4.圖片的更新,代碼如下:

  1. function my_update_post($post_id$post) { 
  2.  //獲得圖片類型 
  3.     $post_type = $post->post_type; 
  4.     if($post_id && isset($_POST['my_manual_save_flag'])) {  
  5.         switch($post_type) { 
  6.             case 'page'
  7.                 if(isset($_FILES['my_image']) && ($_FILES['my_image']['size'] > 0)) { 
  8.                     $arr_file_type = wp_check_filetype(basename($_FILES['my_image']['name'])); 
  9.                     $uploaded_file_type = $arr_file_type['type']; 
  10.                     $allowed_file_types = array('image/jpg','image/jpeg','image/gif','image/png'); 
  11.                     if(in_array($uploaded_file_type$allowed_file_types)) { 
  12.                         $upload_overrides = array'test_form' => false );  
  13.                         $uploaded_file = wp_handle_upload($_FILES['my_image'], $upload_overrides); 
  14.                         if(isset($uploaded_file['file'])) { 
  15.                             $file_name_and_location = $uploaded_file['file']; 
  16.                             $file_title_for_media_library = 'your title here'
  17.                             $attachment = array
  18.                                 'post_mime_type' => $uploaded_file_type
  19.                                 'post_title' => 'Uploaded image ' . addslashes($file_title_for_media_library), 
  20.                                 'post_content' => ''
  21.                                 'post_status' => 'inherit' 
  22.                             ); 
  23.                             $attach_id = wp_insert_attachment( $attachment$file_name_and_location ); 
  24.                             require_once(ABSPATH . "wp-admin" . '/includes/image.php'); 
  25.                             $attach_data = wp_generate_attachment_metadata( $attach_id$file_name_and_location ); 
  26.                             wp_update_attachment_metadata($attach_id,  $attach_data); 
  27.                             $existing_uploaded_image = (int) get_post_meta($post_id,'_my_attached_image', true); 
  28.                             if(is_numeric($existing_uploaded_image)) { 
  29.                                 wp_delete_attachment($existing_uploaded_image); 
  30.                             } 
  31.                             update_post_meta($post_id,'_my_attached_image',$attach_id); 
  32.                             $upload_feedback = false; 
  33.                         } else {  
  34.                             $upload_feedback = 'There was a problem with your upload.'
  35.                             update_post_meta($post_id,'_my_attached_image',$attach_id); 
  36.                         } 
  37.                     } else {  
  38.                         $upload_feedback = 'Please upload only image files (jpg, gif or png).'
  39.                         update_post_meta($post_id,'_my_attached_image',$attach_id); 
  40.                     } 
  41.                 } else {  
  42.                     $upload_feedback = false; 
  43.                 } 
  44.                 update_post_meta($post_id,'_my_attached_image_upload_feedback',$upload_feedback); 
  45.             break
  46.             default
  47.         }  
  48.     return
  49. }  
  50.     return
  51. add_action('save_post','my_update_post',1,2); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
懂色av影视一区二区三区| 欧美美最猛性xxxxxx| 97超碰蝌蚪网人人做人人爽| 91国内产香蕉| 国产91亚洲精品| 欧美综合在线观看| 日韩在线观看免费高清| 国产精品永久免费观看| 疯狂蹂躏欧美一区二区精品| 在线视频中文亚洲| 日韩欧亚中文在线| 欧美性生交xxxxx久久久| 亚洲 日韩 国产第一| 欧美一区第一页| 亚洲国产精品悠悠久久琪琪| 清纯唯美亚洲激情| 日韩精品在线电影| 欧美乱人伦中文字幕在线| 国产精品久久在线观看| 成人激情视频网| 日本aⅴ大伊香蕉精品视频| 亚洲精品第一页| 国产午夜精品理论片a级探花| 亚洲人成77777在线观看网| 国产欧美精品xxxx另类| 久久久精品影院| 亚洲男人天堂2023| 91久久精品久久国产性色也91| 欧美日韩国产999| 91亚洲国产成人久久精品网站| 国模私拍一区二区三区| 国产精品美女视频网站| 亚洲电影第1页| 久久亚洲综合国产精品99麻豆精品福利| 国产精品日韩在线观看| 中文字幕免费精品一区| 色老头一区二区三区| 欧美一级大片在线观看| 少妇激情综合网| 色妞色视频一区二区三区四区| 精品中文字幕在线2019| 国产视频精品一区二区三区| 欧洲成人在线观看| 国产精品r级在线| **欧美日韩vr在线| 精品一区二区三区四区| 亚洲成人久久久久| 国产成人亚洲精品| 国产成人亚洲综合91精品| 最近2019中文免费高清视频观看www99| 久久久久久久久网站| 欧美在线观看一区二区三区| 日韩免费av在线| 国产热re99久久6国产精品| 亚洲最大福利网站| 久久久精品久久久久| 日韩最新中文字幕电影免费看| 国产精品视频公开费视频| 成人中文字幕+乱码+中文字幕| 人人澡人人澡人人看欧美| 久久久精品2019中文字幕神马| 在线观看免费高清视频97| 97**国产露脸精品国产| 91精品中国老女人| 亚洲综合在线中文字幕| 国产成人高清激情视频在线观看| 久久视频国产精品免费视频在线| 色综合久综合久久综合久鬼88| 国产欧美精品va在线观看| 国产成人精品一区二区| 91精品国产沙发| 91在线网站视频| 国产精品96久久久久久又黄又硬| 麻豆乱码国产一区二区三区| 欧美激情第1页| 日韩黄色高清视频| 国模叶桐国产精品一区| 国产精品1区2区在线观看| 欧美日韩国产第一页| 亚洲日本成人网| 91av免费观看91av精品在线| 亚洲成人av中文字幕| 亚洲免费影视第一页| 久久国产色av| 亚洲自拍av在线| 久久久久久久久久久免费精品| 亚洲福利在线看| 92国产精品久久久久首页| 伊人久久大香线蕉av一区二区| 成人激情综合网| 亚洲国产一区二区三区在线观看| 日韩精品久久久久久久玫瑰园| 国产精品精品视频一区二区三区| 亚洲欧美日韩中文在线制服| 92福利视频午夜1000合集在线观看| 亚洲欧美日韩在线高清直播| 97精品视频在线观看| 91国产高清在线| 亚洲在线免费观看| 亚洲欧美日韩国产成人| www.国产精品一二区| 午夜精品久久久久久久久久久久| 欧美日韩国产精品一区二区三区四区| 成人av资源在线播放| 国产精品久久久999| 久久影视电视剧免费网站清宫辞电视| 91精品久久久久久久久久久久久久| 国产日本欧美一区| 亚洲第一福利网| 国产精品成人一区二区| 欧美又大粗又爽又黄大片视频| 韩国19禁主播vip福利视频| 亚洲成人xxx| 欧美激情国产日韩精品一区18| 奇米4444一区二区三区| 亚洲国产高清高潮精品美女| 日韩免费在线播放| 欧美另类在线观看| 在线观看日韩欧美| 韩国三级电影久久久久久| 欧美性猛交xxxx| 亚洲自拍另类欧美丝袜| 久久久精品国产亚洲| 国产精品久久久久久久9999| 91性高湖久久久久久久久_久久99| 亚洲女人被黑人巨大进入al| 国产综合在线视频| 久久久中文字幕| 欧美色另类天堂2015| 亚洲大胆美女视频| 日韩精品在线免费播放| 久精品免费视频| 久久伊人色综合| 国产精品久久一| 日韩在线视频二区| 欧洲亚洲在线视频| 国产成人精品在线视频| 亚洲天堂成人在线视频| 亚洲精品suv精品一区二区| 成人国产亚洲精品a区天堂华泰| 九九热99久久久国产盗摄| 青草热久免费精品视频| 亚洲乱码av中文一区二区| 欧美成人激情图片网| 国产成人精品国内自产拍免费看| 欧美日韩电影在线观看| 在线日韩中文字幕| 欧美午夜宅男影院在线观看| 国产手机视频精品| 日韩欧美aⅴ综合网站发布| 欧美亚洲伦理www| 日韩视频免费看| 成人久久一区二区| 欧美另类第一页| 8090成年在线看片午夜| 中文字幕不卡在线视频极品| 成人免费xxxxx在线观看| 中文字幕日韩精品有码视频| 日本欧美一二三区| 国产精品女人久久久久久| 97热在线精品视频在线观看| 日韩欧美在线视频| 欧美成人h版在线观看| 美日韩精品视频免费看|