• 关于wordpress自定义文章类型
  • 雪峰 发表于 2016年7月6日 标签:
  • 由于今天正好把canvas版的2048游戏给做出来了(详见:用canvas制作2048),所以就想在博客中展示出来,可是如果直接插到文章中进行展示不太美观,而且以后由于瞎折腾肯定会有很多试验性的东西进行展示,所以想起了之前想做个实验室版块的想法,就像是某些网站上那种专门的demo展示页。于是就想起wordpress可以自定义文章类型,说白了就是可以做出自己想要的特定类型的媒体形式。我心中所想的就是,在某个文件夹下的一个文件夹即为一个项目,每次只需要用iframe调用其index.html即可,就像一个demo一样,而旁边就可以像普通的一篇文章一样进行解释说明,我想象中的就是这样的两栏式的布局。

    网上有许多关于增加wordpress自定义文章类型的文章,不过个人觉得这个文章讲的非常不错,参数及步骤讲解得比较详细(http://sowm.cn/wpjam/article/E1DD9B61B71C1EBCDEAD364DE0EC2696.html),按照上面的步骤基本上能做出比较满意的结果。

    可是,总会遇到一些莫名其妙的坑。按照上述的文章进行archive-{post_type}.php自定义时,完全不奏效,而且’has_archive’也设为了true,找了半天也不知道错在哪。

    
    //创建自定义文章类型
    
    function my_custom_post_lab(){
     $labels = array(
     'name' => __( '实验内容', 'xxf' ),
     'singular_name' => __( '实验', 'xxf' ),
     'add_new' => __( '新建实验内容', 'xxf' ),
     'add_new_item' => __( '新建一个实验', 'xxf' ),
     'edit_item' => __( '编辑实验' ),
     'new_item' => __( '新实验内容' ),
     'all_items' => __( '所有实验内容' ),
     'view_item' => __( '查看实验内容' ),
     'search_items' => __( '搜索实验内容' ),
     'not_found' => __( '没有找到有关实验内容' ),
     'not_found_in_trash' => __( '回收站里面没有相关实验内容' ),
     'parent_item_colon' => '',
     'menu_name' => '实验',
     );
     $args = array(
     'labels' => $labels,
     'description' => '展示一些实验性功能',
     'public' => true,
     'has_archive' => true,
     'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments'
     , 'custom-fields' , 'post_tags' ),
     );
     register_post_type( 'lab', $args );//注册新文章类型
    }
    add_action("init" , "my_custom_post_lab");e( 'lab', $args );//注册新文章类型
    }
    add_action("init" , "my_custom_post_lab");
    
    

    于是乎马上google了一下,果然发现有许多国外朋友也遇到了这样的问题,而有些大神则给出了正确的答复。在stackexchange上的一个问答上,一个网友遇到了跟我类似的情况,而下面一位大神的回复的确提醒了我们。(原网址:http://wordpress.stackexchange.com/questions/88120/my-archive-posttype-php-template-is-not-loading

    The reason why “archive-{$post_type}.php” isn’t used in this case is because the page is ataxonomy archive and not a custom post type archive. WordPress is looking for taxonomy-genre.phpinstead of archive-photos.php, and not finding it, is defaulting back to good old archive.php. Here’s a wonderful cheat-sheet on the template hierarchy, which is so useful it’s probably worth tattooing on your forearm.

    意思就是当我们为自定义文章类型添加了分类目录(taxonomy)时,它不会把archive-{$post_type}.php作为默认模板,而是去寻找taxonomy-{$taxonomies}.php(经过我的试验,大致上就是这样,但我使用的只有taxonomy.php  奏效),如果找不到该文件则会把archive.php文件作为模板。所以千万得注意。

    还有一个地方需要注意的是,即使你有single-{$post_type}.php和archive-{$post-type}时也会出现404错误,这涉及到wordpress的固定链接的缓存,因为刚更新文章类型,wordpress还没更新固定链接,因此无法识别。解决办法有两个,一个是在functions.php文件中使用

    flush_rewrite_rules();

    ,另外一个方法就是手动刷新保存固态链接的设置即可(在后台setting中进行设置)。详见:WordPress 解决自定义文章类型的文章 404 的问题

     

    如果说,你想要在自定义文章类型中加入wp文章自带的那种设置标签的功能,可以使用系统自带的taxonomy(其实系统自带的有post_tag和tag两种,但是如果使用post_tag则会与post共用一套标签系统,这样会影响tag的使用)即可,具体方法如下:

    
    register_taxonomy( 'tag' , 'lab');//为自定义文章类型注册标签功能,lab可以换成你的自定义文章类型
    
    

    然而要在展示的时候获取该标签则不能使用the_tags()函数了,而是需要使用到另外一个函数get_the_term_list()即可。

    <?php echo get_the_term_list( get_the_ID(), 'tag'); ?>
    

    正因为使用了自定义的文章类型,因此在展示的时候使用的函数会与post,page那些系统自带的文章类型不同,总感觉类型不是很清楚,所以需要多加研究。

    发表评论