,,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类型还有其他更高级的用法,更详细的参数配置需要你进一步挖掘,才能满足你网站的功能需求。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 怎么在word中下载mathtype,word中怎么导入mathtype
  • php生成word文档的三种实现方式是什么,php 生成word
  • php生成word文档的三种实现方式是什么,php 生成word,PHP生成word文档的三种实现方式
  • IceSword,ice of swords
  • IceSword,ice of swords,IceSword (冰刃) 应用图文指南
  • 基于wordpress的博客建设,如何使用wordpress建站
  • ,,MYSQL安装时解决要输入current root password的解决方法
  • 学生成绩管理系统c语言课程设计报告,学生成绩管理系统c语言程序设计,C语言学生成绩管理系统课程设计word版
  • 如何用python把pdf转为word,Python转PDF
  • word365怎么转pdf,office365word怎么转换pdf_1
  • Word文档图片不显示,Word文档的图片无法显示出来
  • 如何将多个wps文件合并成一个,WPS多个word文档合并成一个文档
  • wpsword怎么取消首字母大写,wps word取消首字母大写
  • 如何word文档删除空白页,怎样在word文档删除空白页
  • word里面怎么写代码,代码放在word里
  • 留言与评论(共有 条评论)
       
    验证码: