手机版

在WordPress中设置帖子类型自定义文章类型示例教程

时间:2021-10-31 来源:互联网 编辑:宝哥软件园 浏览:

什么是自定义帖子?不要想当然地认为这里的帖子指的是博客里的文章,它只是文章的代理词,甚至你可以把它当成内容。自定义模型没有标准规定,文章模型可以是你想要的任何内容模型。以wordpress本身为例,内置了以下内容文章模型:

你可以这样理解它:当我们使用博客文章时,它是一种非常灵活的内容形式,用于创建、编辑和存储数据。

不过,这里还是需要提醒大家,博客内置的帖子有点不一样。您可以使用它通过包括类别、标签等来识别内容。为什么要定制文章模型?Wordpress提供了一些完美的默认文章模型,适用于大多数网站,但我们仍然需要更多的选择。我列出了一些我想到的可能有用的内容模型,并链接了相应的例子。

列表、活动日历(我知道很多人对此很感兴趣)、影视数据库、图书数据库、没有很多集成问题的论坛系统、类似WordPress Trac的票务系统、设计相册或者作品集,你能想到的内容模型比我列出的还要多。而且我还想在未来了解更多关于论坛和票务系统的知识。我已经实现了这两个系统,希望能得到一些反馈。

要创建帖子类型以创建新的帖子类型,您需要使用register_post_type函数注册它。您需要在主题的functions.php文件下调用这个函数:

register_post_type($post_type,$ args);$post_type参数是您自定义的post类型的名称。Post Type有很多可以自定义的函数,所以这个函数中有很多$args参数。因此,它通常以以下格式注册:

函数my _ custom _ post _ product(){ $ args=array();register_post_type('product ',$ args);}add_action('init ',' my _ custom _ post _ product ');将其包装在一个函数中,定义一个数组,然后调用init操作。这样,在初始化WordPress的时候,它会执行这个函数来注册一个自定义的Post Type,因为在调用register_post_type()的时候,它必须在admin_menu动作之前,在_setup_theme动作之后,所以最好在这里调用init动作。参数很多。为了方便编写教程,只列出了常用的参数。总体结构如下:

function my _ custom _ post _ movie(){ $ labels=array(' name '=_ x(' movies ',' post type name '=_ x(' movie ',名称当' posttype single item,English有复数'),' add_new'=_x ('new movie ','用于添加新内容的链接名'),' add_new_item'=__('创建新电影'),' edit_item'=__('编辑电影'),' new_item '。All_items'=__('所有影片'),' view_item'=__ ('view movies '),' search_items'=__ ('search movies '),' not _ found '=_ _('未找到影片'),Not _ found _ in _ trash '=_ _('回收站中没有相关影片'),' parent _ item _冒号'=' ',' menu _ name '=' movies ');$ args=array ('labels'=$ labels,' description'='我们网站的电影信息',' public'=true,' menu _ position'=5,' supports'=array ('title ',' editor ',' thumbnail ','节选',' comments '),' has _ archive '=true);register_post_type('movie ',$ args);}add_action('init ',' my _ custom _ post _ movie ');为了直观方便,我直接用中文,但更好的是应该用英文,通过本地化功能翻译成中文。参数很多,也可以使用generatewp工具自定义参数,然后修改,会方便一点。从上面的代码可以看出,在$args数组中有一个labels配置项,用于配置和显示与副本相关的内容。为了清楚起见,数组是通过单独取出来创建的。看英文就能猜出其他配置项的大概意思。想了解更多,可以看官方文档:register_post_type。将上面的代码添加到主题functions.php的底部,当您进入后台时,您会发现有更多的Movies选项,这意味着注册成功:

2016510155202407.jpg  (978716)

此时,我们可以创建一个新的电影,并发布一篇电影类型的文章。但是这和文章类型基本一致,所以我们需要更多的定制来改进我们的Movie类型。向帖子类型添加分类功能。就电影而言,它们可以分为科幻、动作、战争等类别,所以我们可以在自定义电影中添加分类功能,这样我们就可以编辑新的分类并对我们的电影进行分类。这个分类和文章里的分类是一样的。添加分类函数需要使用函数register_taxonomy,这也非常简单,类似于注册Post Type函数,只是多了一个参数用于指定对应的Post Type:

register _分类学($分类学,$object_type,$ args);对于此示例,可以配置以下常见参数:

function my _ taxonomy _ movie(){ $ labels=array(' name '=_ x '(' movie classification ',' taxonomy name '=_ x '(' movie classification '),' Search _ items '=_ _(' Search movie classification '),' all _ items '=_ _(' all movie classification '),' parent _ item '=_ _(' parent _ item _ colony '=_ _(' super classification of the movie classification ')。Edit_item'=__('编辑电影分类'),' update_item'=__('更新电影分类'),' add_new_item'=__('添加新电影分类'),' new_item_name'=__('新电影分类')。$args=array('labels'=$labels,' hierarchical '=true,);register _分类学(' movie_category ',' movie ',$ args);}add_action('init ',' my _分类法_movie ',0);添加到主题后,我们可以看到熟悉的文章分类功能,只是上面所有的文案都变成了我们定制的内容:

2016510155316892.jpg  (25581406)

这里我们添加两个类别作为演示。为帖子类型添加自定义元框。我们要添加的电影类型不能仅仅是文字内容,还需要添加一些导演等其他相关内容。然后需要添加一个自定义的Meta Box,可以在文章发布页面添加自定义表单,写文章的时候填写附加信息,在前端调用。自定义元框需要添加元框功能:

add_meta_box($id,$title,$callback,$post_type,$context,$priority,$ callback _ args);像往常一样,检查官方文件的具体参数。这里只介绍常用用法。我们注册了一个元盒:

add _ action(' add _ meta _ box ',' movie _ director ');函数movie _ director(){ add _ meta _ box(' movie _ director ',' film director ',' movie _ director _ meta _ box ',' movie ',' side ',' low ');}然后在配置参数中指定了回调函数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 '/标签输入类型=' text ' id=' movie _ director ' name=' movie _ director ' value='?PHP echo ESC _ attr($ value);'占位符='输入导演姓名'?Php}以便刚刚创建的表单可以显示在文章界面的侧栏中:

2016510155409367.png  (638694)

但是此时你的表单无法使用,因为你提交文章后没有保存这个Meta Box的内容。下面是验证保存内容的代码:

add_action('save_post ',' movie _ director _ save _ meta _ box ');函数movie _ director _ save _ meta _ box($ post _ id){//安全检查//检查是否发送了一次性隐藏表单内容(是否由第三方模拟提交)如果(!isset($ _ POST[' movie _ director _ meta _ box _ nonce ']){ return;}//判断隐藏形式的值是否和之前一样if(!WP _ verify _ nonce($ _ POST[' movie _ director _ meta _ box _ nonce '],' movie _ director _ meta _ box '){ return;}//判断用户是否有权限if(!current_user_can('edit_post ',$ post _ id)){ return;}//判断Meta Box是否为空如果(!isset($ _ POST[' movie _ director ']){ return;} $ movie _ director=sanitize _ text _ field($ _ POST[' movie _ director ']);update_post_meta($post_id,' _movie_director ',$ movie _ director);}虽然最关键的功能在最后一句,但一定要注意安全验证。将这些代码添加到functions.php文件后,您的元盒将正常工作。如果需要更多的表单,可以按照这个模式自定义表单结构,然后添加保存功能。接下来,我们迫不及待地添加两部电影,《鱼与锅之战:宿命对决》和《鱼与锅之战:我爱水煮鱼》,如下所示:

2016510155440232.jpg  (21941196)

2016510155506733.jpg  (21861258)

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

2016510155526928.jpg  (2204714)

名单又空又丑。我可以添加导演字段吗?当然,您可以使用[管理$ post类型的帖子自定义列](http://codex.wordpress.org/plugin _ API/操作_引用/管理_ $ post _ type _ posts _自定义_列)。我们补充道:

add _ action(' manage _ post _ custom _ column ',' movie _ custom _ columns ');add _ filter(' manage _ edit-movie _ columns ',' movie _ edit _ columns ');function movie _ custom _ columns($ column){ global $ post;switch($ column){ case ' movie _ director ' : echo get _ post _ meta($ post-ID,_movie_director ',true);打破;}}函数movie _ edit _ columns($ columns){ $ columns[' movie _ director ']=' director ';返回$ columns}每篇文章中都会添加和阅读列导演字段。所以我们的清单变成了:

2016510155555944.png  (1608474)

好了,我们的后端部分愉快地完成了。打开生成的链接,看到,嘿,没找到?嗯,如果你的网站有固定连接,在你创建了一个新的帖子类型后,你必须在后台更新固定连接设置。在后台找到固定连接,然后点击下面的“保存设置”,就可以正常访问了。展示帖子类型的内容简单的创建帖子类型只允许输入内容,没有意义。我们还需要在前台输出自定义帖子类型的内容。根据WordPress的模板调用规则,我们可以知道我们只需要创建archive-[post_type]。php和single-[post_type]。php来实现这个Post Type的列表定制和文章定制。在访问Post Type时,WordPress会优先调用这些模板进行渲染。需要注意的是,在注册帖子类型时需要设置“has _ archive”=true才能拥有列表。现在,让我们复制一份archive.php和single.php的文件,命名为archive-movie.php和single-movie.php。为了演示,我这里不做大量的定制,只是输出导演的信息。我们分别在靠近左56和左23的适当位置输出元盒信息:

Echo' director:“”。get _ post _ meta (get _ the _ id(),' _ movie _ director ',true);然后刷新访问电影列表和特定电影以查看输出导演信息。这只是一个例子。实际上,结构和输出信息格式通常是定制的,因此这里不需要进一步修改。我懒得在这里演示。调用WP_Query高度定制了调用Post Type的内容。以上操作取决于模板。如果需要对其进行高度自定义或在页面上的模块中调用列表,则需要使用WP_Query类调用:

$ args=array(' post _ type '=' product ',' post _ per _ page '=10);$loop=新的WP _ Query($ args);while($ loop-have _ post()): $ loop-the _ post();the _ title();echo“div class=”条目-内容“”;the _ content();echo '/div ';endwhile查询出来后会和常规主循环一样,可以自定义输出结构。在主页列表中显示自定义帖子类型的内容虽然我们已经自定义了帖子类型,也编译了一些内容,但是并没有显示在主页列表中。用户定义的帖子类型内容不会自动混合到主循环中。那么如何显示自定义帖子类型的内容呢?您需要使用pre _ get _ posts操作来进行一些处理:

add _ action(' pre _ get _ post ',' 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 ');返回$ query}上面$query变量中设置的post_type数组是要在主循环中显示的内容。填写您的自定义帖子类型,它可以显示在主页上。设置自定义帖子类型的固定连接有时会创建一个新的帖子类型,以便于搜索引擎优化,因此设置其固定连接也非常重要。这里我们主要使用参数数组中的重写参数来注册Post Type,经常会用到以下两项:slug=>自定义固定连接结构的别名,默认使用Post Type名称(比如本例中的movie),可以翻译。一般来说,帖子类型名称可能与实际网址不同(帖子类型是电影,但网址可能需要电影),所以您可以使用这种自定义。With_front="固定连接是否基于根目录。如果您在固定连接设置页面上将结构设置为/archives/时,由您的帖子类型生成的连接默认为/archives/movie。如果将此项设置为false,则可以删除以前的/archives/并基于根路径直接生成固定连接。你完成了,但这只是Post Type最基本的用法,Post Type还有其他更高级的用法。更详细的参数配置需要你进一步挖掘,以满足你网站的功能需求。

版权声明:在WordPress中设置帖子类型自定义文章类型示例教程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。