wordpress进阶教程(三十二): 在激活主题的时候自动新建页面

如果你制作了一个主题,需要新建很多页面才能够完美工作,那么在使用者激活主题的时候自动新建页面将会给主题的使用省略很多设置步骤。

创建文章使用的函数为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了,当使用者激活你的主题的时候,可以默认创建一些必要的页面。

已有12条评论

  1. 店小二
    店小二 : 回复

    多谢!
    不过我觉得用 after_switch_theme 这个action更好。就是在更换到当前主题的时候执行。

  2. Shawn
    Shawn : 回复

    棒!感谢

  3. emdrive
    emdrive : 回复

    厉害生成了页面,同时创建模板文件最好了!

  4. bobo
    bobo : 回复

    关于模版名 , 写了文件名 但是 不现实 啊

    模版在 插件的目录里,怎么写呢?

    • 阿树工作室
      阿树工作室 回复bobo: 回复

      wordpress的页面模板文件都是在主题目录里面。

      • bobo
        bobo 回复阿树工作室: 回复

        function display_copyright() {
        return “本站点为原创,转载请注明出处!”;
        }

        ‘post_content’ => display_copyright(),

        我想这么写, 想要的效果是, 在插件里修改 文本的话, 就 自动在 生成的页面里 出现, 怎么实现呢?

        现在的话, 生成以后就不能修改了““

        • 阿树工作室
          阿树工作室 回复bobo: 回复

          你你看错教程了,,,你直接把这句话写在模板里面。。

  5. 555
    555 : 回复

    真的怎么使用不知道?      

  6. uewdl
    uewdl : 回复

    哈哈 ,写的好        

  7. fengk86
    fengk86 : 回复
    • if$exisits == false ) {   
    •         $new_page_id = wp_insert_post(   
    •             array(    

    $exisits 有没写错

    • 阿树
      阿树 回复fengk86: 回复

      额。。。还真是写错了。。。

  8. fengk86
    fengk86 : 回复

    呵呵 好使得的

发表评论