1. 程式人生 > >wp insert post 插入文章到資料庫-做投稿或者前端表單時使用

wp insert post 插入文章到資料庫-做投稿或者前端表單時使用

函式描述

此函式的作用是插入文章(或頁面、自定義文章型別)到資料庫,插入之前,會淨化一些變數,做一些檢查,補全一些缺失的必需資料(如日期/時間)。此函式需要一個數組作為引數,插入成功後,返回插入文章的ID(插入失敗返回0)。

使用方法

<?php wp_insert_post( $post, $wp_error ); ?>

引數

$post
(array) (必需) 代表一篇文章陣列,陣列元素和wp_posts資料表中的資料列是一對一關係。
預設: None
重要:為&post['ID']設定一個值將不會建立ID為該值的文章,而是更新ID為該值的文章,也就是說,要想插入一篇新文章,$post['ID']必須為空,或者壓根不設定。
文章陣列的內容取決於你對文章預設值的信任程度,下面是所有文章陣列元素的簡短描述。
$post = array(
  'ID'             => [ <post id> ] // 如果需要更新文章,設定id為需要更新文章的id,否則不要設定此值
  'post_content'   => [ <string> ] // 文章內容,也就是視覺化編輯器裡面的輸入的內容
  'post_name'      => [ <string> ] // 文章的別名,就是URL裡面的名稱
  'post_title'     => [ <string
>
] // 文章標題 'post_status' => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ] // 文章狀態,預設 'draft'. 'post_type' => [ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] // 文章型別,預設為'post'. 'post_author' => [ <user ID> ] // 文章作者的ID,預設為當前登入的使用者ID
'ping_status' => [ 'closed' | 'open' ] // 是否允許 Pingbacks 或 trackbacks allowed,預設為'default_ping_status' 設定的值。 'post_parent' => [ <post ID> ] // 文章的父級文章ID,預設為 0,頂級文章。 'menu_order' => [ <order> ] // 如果新文章為一個頁面,可以設定一個頁面序號,預設為0。 'to_ping' => // 空格或回車分隔的需要ping的url列表,預設為空字串。 'pinged' => // 空格或回車分隔的已經ping過的url列表,預設為空字串。 'post_password' => [ <string> ] // 文章密碼,預設為空字串。 'guid' => // 不要管這個,WordPress會自動處理。 'post_content_filtered' => // 不要管這個,WordPress會自動處理。 'post_excerpt' => [ <string> ] // 文章摘要。 'post_date' => [ Y-m-d H:i:s ] // 文章釋出時間。 'post_date_gmt' => [ Y-m-d H:i:s ] // GMT格式的文章釋出時間。 'comment_status' => [ 'closed' | 'open' ] // 是否允許評論,預設為 'default_comment_status'的值,或'closed'。 'post_category' => [ array(<category id>, ...) ] // 文章分類目錄,預設為空 'tags_input' => [ '<tag>, <tag>, ...' | array ] // 文章標籤,預設為空 'tax_input' => [ array( <taxonomy> => <array | string>, <taxonomy_other> => <array | string> ) ] // 文章的自定義分類法專案,預設為空。 'page_template' => [ <string> ] // 頁面模板檔案的名稱,如,template.php,預設為空。 );

注意

  • post_name, post_title, post_content, 和post_excerpt 為必需的元素。
  • ‘post_status’:如果設定了post_status 為 ‘future’,你還必須指定 post_date 值,這樣WordPress才能知道什麼時候釋出你的文章,更多資訊參見 文章狀態轉換。
  • ‘post_category’:等效於呼叫 wp_set_post_categories()。
  • ‘tags_input’:等效於呼叫 wp_set_post_tags()。
  • ‘tax_input:等效於為陣列中的每個自定義分類法呼叫 wp_set_post_terms(),如果當前使用者沒有設定自定義分類法的許可權,就必須使用 wp_set_object_terms() 代替了。
  • ‘page_template’:如果 post_type 為 ‘page’,將嘗試設定頁面,如果設定失敗,此函式將返回一個 WP_Error 物件或 0,然後在最終操作之前停止。如果 post_type 不是 ‘page’,此引數將被忽略,你可以通過呼叫 update_post_meta() 設定 ‘_wp_page_template’ 的值為不是頁面的文章型別設定頁面模板。
$wp_error
(bool) (optional) 失敗時允許返回一個 WP_Error 物件。
Default: false

返回值

如果文章成功插入了資料庫,將返回插入的新文章ID,如果失敗,將返回0或一個WP_Error物件(如果$wp_error設定為true)。

使用示例

在呼叫 wp_insert_post() 之前,我們需要建立一個包含必要文章元素的陣列,wp_insert_post() 將會使用預設值自動填充一些文章元素,但是,使用者必須提供一個文章標題和內容,否則,將會出現資料庫錯誤導致插入文章失敗。

下面的例子中,我麼設定了 post title, content, status, author, 和 post categories,除了這些,我們可以根據上面的列表新增更多的文章元素鍵值對,以匹配wp_posts資料表中的資料列。

// 建立文章物件
$my_post = array(
  'post_title'    => '我的測試文章',
  'post_content'  => '這是一個測試文章。',
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array(8,39)
);

// 插入文章到資料庫
wp_insert_post( $my_post );

文章插入成功後,將返回新文章 id。

$post_id = wp_insert_post( $post, $wp_error );
//現在,我們可以使用 $post_id 來 add_post_meta 或 update_post_meta

上面提到的文章元素預設值為下面陣列:

$defaults = array(
  'post_status'           => 'draft', 
  'post_type'             => 'post',
  'post_author'           => $user_ID,
  'ping_status'           => get_option('default_ping_status'), 
  'post_parent'           => 0,
  'menu_order'            => 0,
  'to_ping'               =>  '',
  'pinged'                => '',
  'post_password'         => '',
  'guid'                  => '',
  'post_content_filtered' => '',
  'post_excerpt'          => '',
  'import_id'             => 0
);

分類目錄

分類目錄應該以分類ID陣列的形式傳入,即使只需要設定一個分類目錄,該引數的值也必須為陣列。

更多資訊參見:wp_set_post_terms()

安全問題

在存入資料庫之前,wp_insert_post() 先把資料傳遞給 sanitize_post() 處理了,也就是說,該函式已經處理了所有的資料驗證和淨化,我們不需要再為這些問題操心了。

因為一些原因,你可能需要移除文章標題或其他欄位中的 HTML, JavaScript, 和 PHP 程式碼,奇怪的是, WordPress 竟然沒有自動處理這些事情,不過我們可以使用 wp_strip_all_tags() 函式(WordPress 2.9以後可用)輕鬆的搞定,這在提交前端表單的時候,特別有用。

// 建立文章物件
$my_post = array(
  'post_title'    => wp_strip_all_tags( $_POST['post_title'] ),
  'post_content'  => $_POST['post_content'],
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array( 8,39 )
);

// 插入文章到資料庫
wp_insert_post( $my_post );
轉自:https://www.wpzhiku.com/codex/wp_insert_post/