WordPress中设置Post Type自定义文章类型的实例教程

WordPress中设置Post Type自定义文章类型的实例教程

本文主要介绍在WordPress中设置文章类型自定义文章类型的示例教程。设置背景文章类型是WordPress的一大特色,但是自带的文章类型往往不够,有需要的朋友可以参考一下。

什么是自定义帖子?

不要想当然地认为这里的帖子指的是博客里的文章。只是文章的代理词,你甚至可以把它当成内容。

定制模型没有标准规则。文章模型可以是您想要的任何内容模型。以wordpress本身为例,内置了以下内容文章模型:

博客文章

页,面,张,版

附件

校订

等待导航

你可以这样理解:它只是一种灵活的内容形式,我们用来创建、编辑和存储像博客帖子这样的数据。

不过还是要提醒一下,博客内置的帖子有点不一样。您可以使用它来包含类别、标签等。要识别内容!

为什么要定制文章模型?

Wordpress已经提供了一些完美的默认文章模型,并且适用于大多数网站,但是我们仍然需要更多的选择。我列出了一些我认为可能有用的内容模型,并链接了相应的例子。

房地产列表

事件日历(我知道很多人对此感兴趣)

影视数据库

图书数据库

没有许多集成问题的论坛系统

类似WordPress Trac的票务系统

设计相册或作品集

您还可以想到比我列出的更多的内容模型。而且我也想在以后学习更多关于论坛和票务系统的想法。我已经实现了这两个系统,希望得到一些反馈。

创建文章类型

要创建一个新的Post类型,需要用register_post_type函数注册它。在需要你的主题的functions.php文件下调用这个函数:

register_post_type( $post_type,$ args);

$post_type参数是您的自定义帖子类型的名称。Post Type可以自定义的函数有很多,所以这个函数中会有很多$args参数。所以它通常以下列格式注册:

函数my_custom_post_product() {

$ args=array();

register_post_type( product ,$ args);

}

add_action( init , my _ custom _ post _ product );

包装一个函数,定义一个数组,然后调用init操作。这样,当WordPress被初始化时,它将执行这个函数来注册一个自定义的文章类型。因为调用register_post_type()时,必须在admin_menu动作之前,在_setup_theme动作之后,所以这里最好调用init动作。

有很多参数。为方便编写教程,只列出常用参数。大致结构如下:

函数my_custom_post_movie() {

$labels=array(

Name=_x(电影,帖子类型名称),

Singular _ name=_ x (movie ,发布单品时的名称,因为英语中有复数),

Add_new=_x(新电影,添加新内容的链接名),

Add_new_item=__(创建新电影),

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,

menu_position=5,

支持“=数组(标题,编辑器,缩略图,摘录,注释 ),

has_archive=true

);

register_post_type( movie ,$ args);

}

add_action( init , my _ custom _ post _ movie );

这里为了直观方便,我直接用中文,最好用英文,然后通过本地化功能翻译成中文。

有几个参数。也可以用generatewp工具自定义参数,然后修改,这样会方便一点。

从上面的代码中,可以看到$args数组中有一个labels配置项,用于配置与显示副本相关的内容。为了清楚起见,它被单独取出来创建一个数组。其他配置项的大概意思可以通过看英文来猜测。想了解更多,可以看官方文档:register_post_type。

将上面的代码添加到主题functions.php的底部,当你进入后台时,你会发现有更多的电影选项,这意味着注册成功:

这时候我们可以新建一部电影,发表一篇电影类型的文章。但这和文章类型基本相同,我们需要更多的定制来完善我们的电影类型。

为岗位类型增加分类功能

就电影而言,可以分为科幻、动作、战争等类别。然后,我们将在我们的自定义电影中添加分类功能,以便我们可以编辑新的分类并对我们的电影进行分类。这个分类和文章中的分类是一样的。

需要使用register_taxonomy函数来添加分类函数,这也非常简单。它类似于注册Post类型函数,只是使用了一个附加参数来指定相应的Post类型:

register_taxonomy( $taxonomy,$object_type,$ args);

对于此示例,可以配置以下通用参数:

函数my_taxonomies_movie() {

$labels=array(

Name=_x(电影分类,分类名称),

Singular_name=_x(电影分类,分类法单数),

Search_items=__(搜索电影分类),

All_items=__(所有电影类别),

Parent_item=__(此电影分类的上级分类),

Parent_item_colon=__(此电影分类的上级分类:),

Edit_item=__(编辑电影分类),

Update_item=__(更新电影分类),

Add_new_item=__(添加新的电影类别),

New_item_name=__(新电影分类),

Menu_name=__(电影分类),

);

$args=array(

labels=$labels,

分级=真,

);

register _ taxonomy( movie _ category , movie ,$ args);

}

add_action( init , my_taxonomies_movie ,0);

加入主题后,我们看到熟悉的文章分类功能出现了,只不过上面的文案都变成了我们自定义的内容:

这里我们添加两个分类作为演示。

为文章类型添加自定义元框

我们要添加的电影类型不能只是主体内容,还需要添加一些相关的内容比如导演。然后,您需要添加一个自定义元框。Meta Box可以在文章发布页面添加自定义表单,在写文章的时候可以填写附加信息,在前端调出。

需要Add_meta_box函数来定制元框:

add_meta_box( $id,$title,$callback,$post_type,$context,$priority,$ callback _ args);

具体参数照例请参考官方文档,这里只介绍常用用法。我们注册了一个元盒:

add_action( add_meta_boxes , movie _ director );

函数movie_director() {

添加元框(

电影_导演,

电影导演,

电影_导演_元_盒子,

电影,

侧面,

);

}

然后在配置参数中指定回调函数movie_director_meta_box。我们需要在这个函数中创建一个表单:

函数movie _ director _ meta _ box($ post){

//为了安全起见,创建一个临时的隐藏窗体

WP _ nonce _ field( movie _ director _ meta _ box , movie _ director _ meta _ box _ nonce );

//获取先前存储的值

$value=get_post_meta( $post-ID, _movie_director ,true);

=movie_director/label的标签

input type= text id= movie _ director name= movie _ director value=?PHP echo ESC _ attr($ value);Placeholder=输入导演的姓名

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

}

这样,刚刚创建的表单可以显示在文章界面的侧边栏中:

但是这个时候你的表单就不能用了,因为你提交文章后没有保存这个元框的内容。下面是验证保存内容的代码:

add_action( save_post , movie _ director _ save _ meta _ box );

函数movie _ director _ save _ meta _ box($ post _ id){

//安全检查

//检查是否发送了一次性隐藏表单内容(判断是否是第三方模拟提交)

如果(!isset($ _ POST[ movie _ director _ meta _ box _ nonce ]){

返回;

}

//确定隐藏窗体的值是否和以前一样。

如果(!WP _ verify _ nonce($ _ POST[ movie _ director _ meta _ box _ nonce ], movie _ director _ meta _ box ){

返回;

}

//确定用户是否有权限。

如果(!current_user_can( edit_post ,$post_id ) ) {

返回;

}

//确定元框是否为空。

如果(!isset($ _ POST[ movie _ director ]){

返回;

}

$ movie _ director=sanitize _ text _ field($ _ POST[ movie _ director ]);

update_post_meta( $post_id, _movie_director ,$ movie _ director);

}

虽然最关键的功能在最后一句,但是一定要注意安全检查。将这些代码添加到functions.php文件后,你的元盒就可以正常工作了。如果需要更多的表单,根据这个模式自定义表单结构,然后添加保存功能。

下面,我们迫不及待地补充两部电影《鱼与锅之战:宿命对决》和《鱼与锅之战:我爱水煮鱼》,内容如下:

添加后,我们可以观看所有电影:

名单又空又丑。可以加导演字段吗?当然,可以通过使用【管理$ post类型帖子自定义列】(http://codex.wordpress.org/plugin _ API/action _ reference/manage _ $ post _ type _ posts _ custom _ column)来实现。我们补充:

add _ action( manage _ posts _ custom _ column , movie _ custom _ columns );

add _ filter( manage _ edit-movie _ columns , movie _ edit _ columns );

函数movie_custom_columns($column){

全球$邮政;

开关($列){

案例“电影_导演”:

echo get_post_meta( $post-ID, _movie_director ,true);

打破;

}

}

函数movie_edit_columns($columns){

$ columns[ movie _ director ]= director ;

return $ columns

}

也就是说,从每篇文章中添加并读出列director字段。所以我们的列表变成了:

好了,我们的后端部分愉快地完成了。打开生成的链接看一看,呃,没找到?好吧,如果你的网站有固定连接,你必须在创建一个新的帖子类型后,在后台更新固定连接设置。找到后台固定连接,然后点击下方的“保存设置”,即可正常访问。

显示文章类型的内容

简单的创建一个帖子类型只是让你输入内容,没有任何意义。我们还需要在前台输出自定义帖子类型的内容。

自定义帖子类型的模板和样式

根据WordPress的模板调用规则,我们可以知道只需要创建archive-[post_type]。php和single-[post_type]。php实现该帖子类型的列表定制和文章定制。在访问帖子类型时,WordPress会优先调用这些模板进行渲染。

需要注意的是,在注册Post Type要有列表时,需要设置 has_archive=true。

现在,让我们在主题中复制archive.php和single.php的文件,并将其命名为archive-movie.php和single-movie.php。为了演示,这里不做很多定制,只是输出导演信息来展示。

我们分别在L.56和L.23附近的适当位置输出元盒信息:

回声导演:。get _ post _ meta (get _ the _ id(), _ movie _ director ,true);

然后刷新电影和特定电影列表,查看输出导演信息。

这里只是一个例子。实际操作中,结构和输出信息格式往往是自定义的,这里就不做进一步修改了。不要在这里演示了。

调用WP_Query高度定制调用帖子类型的内容

以上操作依赖于模板。如果需要高度定制或者在页面的某个模块中调用列表,需要使用WP_Query类来调用:

$ args=array( post _ type = product , posts _ per _ page =10);

$ loop=new WP _ Query($ args);

while($ loop-have _ post()):$ loop-the _ post();

_ title();

echo“div class=”entry-content“”;

_ content();

echo /div ;

endwhile

查询出来后,就和常规主循环一样了。您可以自定义输出结构。

在主页列表中显示自定义帖子类型的内容。

虽然我们自定义了帖子类型,写了一些内容,但是并没有显示在首页的列表中。自定义帖子类型的内容不会自动混合到主循环中。那么如何让自定义帖子类型的内容显示出来呢?

您需要使用pre_get_posts的动作来做一些处理:

add_action( pre_get_posts , add _ my _ post _ types _ to _ query );

函数add _ my _ post _ types _ to _ query($ query){

if(is _ home()$ query-is _ main _ query())

$query-set( post_type ,array( post , page , movie );

return $ query

}

上面$query变量中设置的post_type数组就是主循环中要显示的内容。填写您的自定义帖子类型,它将显示在主页上。

设置自定义帖子类型的固定连接。

有时候创建一个新的帖子类型也是为了更容易做SEO,所以设置它的固定连接也是很重要的。这里主要使用注册帖子类型的参数数组中的重写参数,常用的有以下几项:

Slug=》自定义固定连接结构别名,默认是使用帖子类型名称(比如本例中的movie),可以翻译。一般来说,帖子类型名称可能与实际URL不同(帖子类型是电影,但URL可能需要电影),因此您可以使用此自定义。

With_front="固定连接是否基于根目录。如果在“固定连接设置”页面上将您的结构设置为/archives/如果将此项设置为false,可以去掉之前的/archives/,直接生成基于根路径的固定连接。

大功告成,但这只是Post Type最基本的用法。Post类型还有其他更高级的用法,更详细的参数配置需要你进一步挖掘,才能满足你网站的功能需求。

WordPress中设置Post Type自定义文章类型的实例教程