立即注册 找回密码

QQ登录

只需一步,快速开始

查看: 1064|回复: 0

[Wordpress 通用教程] 实战WordPress自定义文章类型(1)

[复制链接]
发表于 2023-12-1 16:09:08 | 显示全部楼层 |阅读模式
道勤网-数据www.daoqin.net

亲注册登录道勤网-可以查看更多帖子内容哦!(包涵精彩图片、文字详情等)请您及时注册登录-www.daoqin.net

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 美工学习 于 2023-12-1 16:26 编辑

wordpress网站原来的文章叫Post,我需要给网站添加一个有别于Post的文章类型,名叫Hotel,目的是把所有的酒店页面归类方便管理。在这些酒店页面上要用自定义字段实现一些特定的格式,展现特定的内容…总之就是折腾出一个新的文章类别,让别人添加内容操作简单化,我自己管理起来也简单化…
首先打开所用theme的function.php,添加如下代码:
  1. register_post_type('hotels', array( //这里的‘hotels’就是在后续程序中的引用类别ID
  2.         'label' => 'Hotels', //显示在后台菜单上的文章类名
  3.         'description' => '',
  4.         'public' => true,
  5.         'show_ui' => true,
  6.         'show_in_menu' => true,
  7.         'capability_type' => 'post',
  8.         'hierarchical' => false,
  9.         'rewrite' => array('slug' => ''),
  10.         'query_var' => true,
  11.         'supports' => array('title','editor',),
  12.         'labels' => array ( //设置后台这一块相关的按钮、链接显示名称
  13.                 'name' => 'All hotels',
  14.                 'singular_name' => 'hotel',
  15.                 'menu_name' => 'Hotels',
  16.                 'add_new' => 'Add Hotel',
  17.                 'add_new_item' => 'Add Hotel',
  18.                 'edit' => 'edit',
  19.                 'edit_item' => 'Edit Hotel',
  20.                 'new_item' => 'New Hotel',
  21.                 'view' => 'View',
  22.                 'view_item' => ' View Hotel',
  23.                 'search_items' => 'Search Hotel',
  24.                 'not_found' => 'not found hotel',
  25.                 'not_found_in_trash' => 'not found in trash',
  26.                 'parent' => 'parent hotel',),
  27.         )
  28. );
复制代码
保存并上传文件,刷新WP后台,发现Hotel菜单已经加上了。
01.png
这时随便添加一篇hotel文章,发现在前台浏览404报错,在后台文章是实实在在添加上了的。反复验证,原来先要去刷新一下伪静态,这是一个小小的坑…
光添加了hotel的分类,其实和post本质上没有什么区别,我要对hotel页面进行一些定制,在页面实现这样的格式:
02.png
这样就需要做几个自定义字段:
033.png
给function.php添加代码:
  1. add_action( 'admin_init', 'my_admin' );
  2. function my_admin() {
  3.         add_meta_box( 'hotel_meta_box',
  4.                 'Hotel Data',
  5.                 'display_hotel_meta_box',
  6.                 'hotels', 'normal', 'high'
  7.         );
  8. }
  9. function display_hotel_meta_box( $hotel ) {
  10.         $hotel_desc =  get_post_meta( $hotel->ID, 'hotel_desc', true );
  11.         $hotel_address = esc_html( get_post_meta( $hotel->ID, 'hotel_address', true ) );
  12.         $hotel_zipCode = esc_html( get_post_meta( $hotel->ID, 'hotel_zipCode', true ) );
  13.         $hotel_tel = esc_html( get_post_meta( $hotel->ID, 'hotel_tel', true ) );
  14.         $hotel_fax = esc_html( get_post_meta( $hotel->ID, 'hotel_fax', true ) );
  15.         $hotel_website = esc_html( get_post_meta( $hotel->ID, 'hotel_website', true ) );
  16.         $hotel_email = esc_html( get_post_meta( $hotel->ID, 'hotel_email', true ) );
  17.         $hotel_starRating = intval( get_post_meta( $hotel->ID, 'hotel_starRating', true ) );        
  18.         ?>
  19.         <table>
  20.                 <tr>
  21.                         <td valign="top" style="width: 200px">Hotel Basic Description</td>
  22.                         <td><textarea name="hotel_desc" id="hotel_desc"  style="width:500px; height:80px" /><?php echo $hotel_desc; ?></textarea></td>
  23.                 </tr>
  24.                 <tr>
  25.                         <td >Hotel Address</td>
  26.                         <td><input type="text" name="hotel_address" value="<?php echo $hotel_address; ?>"  style="width:500px" /></td>
  27.                 </tr>
  28.                 <tr>
  29.                         <td>Hotel Zip Code</td>
  30.                         <td><input type="text" name="hotel_zipCode" value="<?php echo $hotel_zipCode; ?>"  style="width:500px" /></td>
  31.                 </tr>
  32.                 <tr>
  33.                         <td>Hotel Telephone</td>
  34.                         <td><input type="text" name="hotel_tel" value="<?php echo $hotel_tel; ?>"  style="width:500px" /></td>
  35.                 </tr>
  36.                 <tr>
  37.                         <td>Hotel Fax</td>
  38.                         <td><input type="text" name="hotel_fax" value="<?php echo $hotel_fax; ?>"  style="width:500px" /></td>
  39.                 </tr>
  40.                 <tr>
  41.                         <td>Hotel Website</td>
  42.                         <td><input type="text" name="hotel_website" value="<?php echo $hotel_website; ?>"  style="width:500px" /></td>
  43.                 </tr>
  44.                 <tr>
  45.                         <td>Hotel Email</td>
  46.                         <td><input type="text" name="hotel_email" value="<?php echo $hotel_email; ?>" style="width:500px" /></td>
  47.                 </tr>
  48.                 <tr>
  49.                         <td>Hotel Star Rating</td>
  50.                         <td>
  51.                                 <select style="width: 100px" name="hotel_starRating">
  52.                                 <?php
  53.                                 // Generate all items of drop-down list
  54.                                 for ( $rating = 5; $rating >= 1; $rating -- ) {
  55.                 ?>
  56.                                         <option value="<?php echo $rating; ?>" <?php echo selected( $rating, $hotel_starRating ); ?>>
  57.                                         <?php echo $rating; ?> stars <?php } ?>
  58.                                 </select>
  59.                         </td>
  60.                 </tr>
  61.         </table>
  62.         <?php
  63. }
复制代码
至此,刷新后台,我需要的自定义字段面板就出现了,满有成就感的 如果有时间还可以给上面的HTML部分美化一下:
05.png
表面文章做完,还需要保存这些字段,继续添加代码
  1. add_action( 'save_post', 'add_hotel_fields', 10, 2 );
  2. function add_hotel_fields( $hotel_id, $hotel ) {
  3.         //保存每个自定义字段
  4.         if ( $hotel->post_type == 'hotels' ) {
  5.                 // Store data in post meta table if present in post data
  6.                 if ( isset( $_POST['hotel_desc'] ) ) {
  7.                         update_post_meta( $hotel_id, 'hotel_desc', $_POST['hotel_desc'] );
  8.                 }
  9.                 if ( isset( $_POST['hotel_address'] ) ) {
  10.                         update_post_meta( $hotel_id, 'hotel_address', $_POST['hotel_address'] );
  11.                 }
  12.                 if ( isset( $_POST['hotel_zipCode'] )  ) {
  13.                         update_post_meta( $hotel_id, 'hotel_zipCode', $_POST['hotel_zipCode'] );
  14.                 }
  15.                 if ( isset( $_POST['hotel_tel'] ) ) {
  16.                         update_post_meta( $hotel_id, 'hotel_tel', $_POST['hotel_tel'] );
  17.                 }
  18.                 if ( isset( $_POST['hotel_fax'] )   ) {
  19.                         update_post_meta( $hotel_id, 'hotel_fax', $_POST['hotel_fax'] );
  20.                 }
  21.                 if ( isset( $_POST['hotel_website'] )   ) {
  22.                         update_post_meta( $hotel_id, 'hotel_website', $_POST['hotel_website'] );
  23.                 }
  24.                 if ( isset( $_POST['hotel_email'] )   ) {
  25.                         update_post_meta( $hotel_id, 'hotel_email', $_POST['hotel_email'] );
  26.                 }
  27.                 if ( isset( $_POST['hotel_starRating'] ) && $_POST['hotel_starRating'] != '' ) {
  28.                         update_post_meta( $hotel_id, 'hotel_starRating', $_POST['hotel_starRating'] );
  29.                 }
  30.         }
  31. }
复制代码
到这里为止,function.php所需的后端代码添加完毕。
完成了后端,接下来就是前端了。Wordpress默认展示文章的模板是theme目录下simple.php。我们的新文章类别是“hotels”,只要把single.php复制一份,命名为single-hotels.php,这个hotels类别下的文章显示的时候就会自动读取single-hotels.php,那么所有的工作只需要修改single-hotels.php就行了,真够神奇!
前端的代码简单的多,只需要在想要显示这些自定义字段的地方添加如下代码即可,不想篇幅拉得太长,只写一个hotel_zipCode自定义字段的例子:
  1. <?php
  2. $hotel_zipCode = get_post_meta( get_the_ID(), 'hotel_zipCode', true );
  3. if (!empty ( $hotel_zipCode ) ) {
  4.         echo "<strong>Zip Code:</strong> ".$hotel_zipCode."</br>";
  5. }
  6. ?>
复制代码
至此就算完成了,代码文章可以参考这篇文章,
WordPress 自定义文章类型 介绍
http://www.daoqin.net/thread-7112-1-1.html



道勤主机提供365天*24小时全年全天无休、实时在线、零等待的售后技术支持。竭力为您免费处理您在使用道勤主机过程中所遇到的一切问题! 如果您是道勤主机用户,那么您可以通过QQ【792472177】、售后QQ【59133755】、旺旺【诠释意念】、微信:q792472177免费电话、后台提交工单这些方式联系道勤主机客服! 如果您不是我们的客户也没问题,点击页面最右边的企业QQ在线咨询图标联系我们并购买后,我们为您免费进行无缝搬家服务,让您享受网站零访问延迟的迁移到道勤主机的服务!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

道勤网- 推荐内容!上一条 /2 下一条

!jz_fbzt! !jz_sgzt! !jz_xgzt! 快速回复 !jz_fhlb! !jz_lxwm! !jz_gfqqq!

关于我们|手机版|小黑屋|地图|【道勤网】-www.daoqin.net 软件视频自学教程|免费教程|自学电脑|3D教程|平面教程|影视动画教程|办公教程|机械设计教程|网站设计教程【道勤网】 ( 皖ICP备15000319号-1 )

GMT+8, 2024-11-25 15:35

Powered by DaoQin! X3.4 © 2016-2063 Dao Qin & 道勤科技

快速回复 返回顶部 返回列表