麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 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); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品一区二区三区在线 | 午夜在线视频一区二区三区 | 成人在线视频一区 | 欧美日韩免费一区 | 亚洲二区三区在线 | 日韩视频在线一区二区三区 | 国产91影院| 欧美黄一区 | 一区二区久久电影 | 国产精品一品二区三区四区18 | 黄色成人在线播放 | 亚洲天堂在线电影 | 久久精品免费国产 | 成人综合在线观看 | 欧美日韩大片在线观看 | teensexhd| 久久亚洲视频网 | 黑人一区二区 | 狼人狠狠干 | 干一夜综合 | 一区二区三区日本在线观看 | 亚欧美一区二区 | 久久久久.com| 中文字幕国产日韩 | 色就色 综合偷拍区91网 | 精品久久久久久久久久久久 | 黄色毛片一级视频 | 国产高潮好爽好大受不了了 | 日本视频免费 | 操碰97 | 72pao成人国产永久免费视频 | 黄色毛片a级 | 激情小说另类 | 欧美一级全黄 | 欧美成人午夜精品久久久 | 俄罗斯16一20sex牲色另类 | 久久精品亚洲一区 | 97黄色网| 未成年人在线观看 | 国产毛毛片一区二区三区四区 | 亚洲欧美一区二区三区在线观看 |