如果你製作了一個主題,需要新建很多頁面才能夠完美工作,那麼在使用者激活主題的時候自動新建頁面將會給主題的使用省略很多設置步驟。

創建文章使用的函數為 wp_insert_post(); 使用方法如下

  1. <?php   
  2. $post = array(   
  3.   'ID'             => [ <post id> ] //Are you updating an existing post?   
  4.   'menu_order'     => [ <order> ] //If new post is a page, it sets the order in which it should appear in the tabs.   
  5.   'comment_status' => [ 'closed' | 'open' ] // 'closed' means no comments.   
  6.   'ping_status'    => [ 'closed' | 'open' ] // 'closed' means pingbacks or trackbacks turned off   
  7.   'pinged'         => [ ? ] //?   
  8.   'post_author'    => [ <user ID> ] //The user ID number of the author.   
  9.   'post_category'  => [ array(<category id>, <...>) ] //post_category no longer exists, try wp_set_post_terms() for setting a post's categories   
  10.   'post_content'   => [ <the text of the post> ] //The full text of the post.   
  11.   'post_date'      => [ Y-m-d H:i:s ] //The time post was made.   
  12.   'post_date_gmt'  => [ Y-m-d H:i:s ] //The time post was made, in GMT.   
  13.   'post_excerpt'   => [ <an excerpt> ] //For all your post excerpt needs.   
  14.   'post_name'      => [ <the name> ] // The name (slug) for your post   
  15.   'post_parent'    => [ <post ID> ] //Sets the parent of the new post.   
  16.   'post_password'  => [ ? ] //password for post?   
  17.   'post_status'    => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | 'custom_registered_status' ] //Set the status of the new post.   
  18.   'post_title'     => [ <the title> ] //The title of your post.   
  19.   'post_type'      => [ 'post' | 'page' | 'link' | 'nav_menu_item' | 'custom_post_type' ] //You may want to insert a regular post, page, link, a menu item or some custom post type   
  20.   'tags_input'     => [ '<tag>, <tag>, <...>' ] //For tags.   
  21.   'to_ping'        => [ ? ] //?   
  22.   'tax_input'      => [ array( 'taxonomy_name' => array( 'term', 'term2', 'term3' ) ) ] // support for custom taxonomies.    
  23. );     
  24. wp_insert_post( $post$wp_error );   
  25. /*
  26. $wp_error 參數 布爾值 如果出錯允許返回一個類。  
  27. 如果插入文章成功,函數將會返回插入的文章 ID,如果出錯,$wp_error 設置為 true 則返回一個類,否則返回 0  
  28. */  
  29. ?>  

步驟一:添加頁面的函數

需要注意,頁面的模板信息保存在_postmeta 表中,以字段形式保存,字段名為_wp_page_template,所以要保存頁面模板信息,使用 update_post_meta 函數

  1. /**  
  2. *參數 $title 字符串 頁面標題  
  3. *參數 $slug  字符串 頁面別名  
  4. *參數 $page_template 字符串  模板名  
  5. *無返回值  
  6. **/  
  7. function ashu_add_page($title,$slug,$page_template=''){   
  8.     $allPages = get_pages();//獲取所有頁面   
  9.     $exists = false;   
  10.     foreach$allPages as $page ){   
  11.         //通過頁面別名來判斷頁面是否已經存在   
  12.         ifstrtolower$page->post_name ) == strtolower$slug ) ){   
  13.             $exists = true;   
  14.         }   
  15.     }   
  16.     if$exists == false ) {   
  17.         $new_page_id = wp_insert_post(   
  18.             array(   
  19.                 'post_title' => $title,   
  20.                 'post_type'     => 'page',   
  21.                 'post_name'  => $slug,   
  22.                 'comment_status' => 'closed',   
  23.                 'ping_status' => 'closed',   
  24.                 'post_content' => '',   
  25.                 'post_status' => 'publish',   
  26.                 'post_author' => 1,   
  27.                 'menu_order' => 0   
  28.             )   
  29.         );   
  30.         //如果插入成功 且設置了模板   
  31.         if($new_page_id && $page_template!=''){   
  32.             //保存頁面模板信息   
  33.             update_post_meta($new_page_id, '_wp_page_template',  $page_template);   
  34.         }   
  35.     }   
  36. }  

步驟二:通過 hook 執行創建頁面函數。

有了上面的創建頁面函數,則只需要通過鈎子調用上面的函數即可創建頁面。注意,有的人可能使用 init 鈎子,個人認為這不是很好,init 鈎子是每次 WordPress 初始化時都要執行的,但是我們不需要每次執行程序的時候都來一遍這個函數,我們只需要在主題使用者點擊激活主題的那一刻,執行一次,以後再也不需要再執行了。所以使用 load-themes.php 鈎子,load-themes.php 鈎子是後台在設置主題的頁面時啓用。

  1. function ashu_add_pages() {   
  2.     global $pagenow;   
  3.     //判斷是否為激活主題頁面   
  4.     if ( 'themes.php' == $pagenow && isset( $_GET['activated'] ) ){   
  5.         ashu_add_page('ASHU_PAGE','ashu-page','page-ashu.php'); //頁面標題 ASHU_PAGE 別名 ashu-page  頁面模板 page-ashu.php   
  6.         ashu_add_page('PAGE_ASHU','page-ashu','ashu-page.php');   
  7.     }   
  8. }   
  9. add_action( 'load-themes.php', 'ashu_add_pages' );  
  10. //需要注意的是模板名稱是 php 文件的文件名哦

好了,這樣就 OK 了,當使用者激活你的主題的時候,可以默認創建一些必要的頁面。