목차
WordPress中设置Post Type自定义文章类型的实例教程,wordpress实例教程
백엔드 개발 PHP 튜토리얼 WordPress中设置Post Type自定义文章类型的实例教程,wordpress实例教程_PHP教程

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

Jul 12, 2016 am 08:52 AM
wordpress 기사 유형

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

什么是自定义post?
不要想当然的认为这里的post就是就是指博客中的文章,它只不过是一个文章类的代理词而已,甚至你还可以认为它是内容。
自定义模型是没有一个很标准的什么规定的,文章模型可以是你想的任何一个内容模型,就拿wordpress本身来说就内置了以下几个内容文章模型:

  • 博客文章
  • 页面
  • 附件
  • 修正
  • 导航等

你可以这样去理解:它只要是想我们使用博客文章那样用来创建、编辑和储存数据的一种很灵活的内容形式。

不过在这里我还是需要提醒下,博客内置的post还是有点点不同的,你可以利用它含有分类、标签等去标识内容的!
为什么要自定义文章模型?
Wordpress已经提供一些完善的默认文章模型,并适用于大多数站点,但我们还是需要更多的选择。我列举了一些我想到的一些可能有用内容模型,并链接到相对应的例子。

  • 房产清单
  • 活动日历(我知道很多人对这个感兴趣)
  • 影视资料库
  • 书籍资料库
  • 没有很多集成问题的论坛系统
  • 类似WordPress Trac的票务系统
  • 设计相册或作品集

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

创建一个 post type
创建一个新的 Post Type 需要使用 register_post_type 函数来注册一下。需要在你主题的 functions.php 文件下调用该函数:

register_post_type( $post_type, $args );
로그인 후 복사

$post_type 参数就是你自定义 Post Type 的名称,Post Type 可以自定义的功能非常多,所以这个函数里面的 $args 参数会很多。所以通常会用下面这种格式来注册:

function my_custom_post_product() {
  $args = array();
  register_post_type( 'product', $args ); 
}
add_action( 'init', 'my_custom_post_product' );
로그인 후 복사

包裹在一个函数中,定义一个数组,然后挂靠到 init 这个 action 上。这样 WordPress 在初始化的时候,就会执行这个函数注册一个自定义 Post Type,因为调用 register_post_type() 的时候,必须要在 admin_menu action 之前,在 after_setup_theme action 之后,所以这里最好挂靠到 init action 上。
参数很多,为了写教程方便,只列出比较常用的参数,大体结构如下:

function my_custom_post_movie() {
 $labels = array(
  'name'        => _x( 'Movies', 'post type 名称' ),
  'singular_name'   => _x( 'Movie', 'post type 单个 item 时的名称,因为英文有复数' ),
  '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'     => 'Movies'
 );
 $args = array(
  'labels'    => $labels,
  'description'  => '我们网站的电影信息',
  'public'    => true,
  'menu_position' => 5,
  'supports'   => array( 'title', 'editor', 'thumbnail', 'excerpt', '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 (978×716)

这时候我们可以新建 Movie 发表一篇电影类型的文章了。但是这样与文章类型基本相同,我们需要更多的自定义来完善我们的 Movie 类型。
为 Post Type 添加分类功能
就电影来说,可以分为科幻、动作、战争等类别,那么我们就为自定义的 Movie 添加分类功能,这样就可以编辑新分类以及归类我们的电影了。这个分类跟文章里面的分类性质是一样的。
添加分类功能需要使用函数 register_taxonomy,使用方法也很简单,跟注册 Post Type 函数类似,只不过多了一个参数用来指定对应的 Post Type :

register_taxonomy( $taxonomy, $object_type, $args );
로그인 후 복사

就本例而言,可以配置如下常用参数:

function my_taxonomies_movie() {
 $labels = array(
  'name'       => _x( '电影分类', 'taxonomy 名称' ),
  'singular_name'   => _x( '电影分类', 'taxonomy 单数名称' ),
  '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,
  'hierarchical' => true,
 );
 register_taxonomy( 'movie_category', 'movie', $args );
}
add_action( 'init', 'my_taxonomies_movie', 0 );
로그인 후 복사

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

2016510155316892.jpg (2558×1406)

这里我们添加两个分类作为演示。
为 Post Type 添加自定义 Meta Box
我们想要添加的电影类型不能仅仅只有正文内容,我们还需要额外添加一些 导演 之类的有关内容。那么就需要添加自定义 Meta Box,Meta Box 可以在文章发表页面中添加自定义的表单,编写文章的时候可以填写额外的信息然后在前端调用出来。
自定义 Meta Box 需要用到 add_meta_box 函数:

add_meta_box( $id, $title, $callback, $post_type, $context,$priority, $callback_args );
로그인 후 복사

老规矩,具体参数内容查看官方文档,这里只介绍常用用法。我们注册一个 Meta Box :

add_action( 'add_meta_boxes', 'movie_director' );
function movie_director() {
  add_meta_box(
    'movie_director',
    '电影导演',
    'movie_director_meta_box',
    'movie',
    'side',
    'low'
  );
}
로그인 후 복사

然后在配置参数里面指定了回调函数 movie_director_meta_box,我们需要在这个函数里面创建表单:

function 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 );
  ?>
  <label for="movie_director"></label>
  <input type="text" id="movie_director" name="movie_director" value="<&#63;php echo esc_attr( $value ); &#63;>" placeholder="输入导演名称" >
  <&#63;php
}
로그인 후 복사

这样就可以在文章界面边栏显示出来刚刚创建的表单了:

2016510155409367.png (638×694)

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

add_action( 'save_post', 'movie_director_save_meta_box' );
function movie_director_save_meta_box($post_id){
  // 安全检查
  // 检查是否发送了一次性隐藏表单内容(判断是否为第三者模拟提交)
  if ( ! 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 是否为空
  if ( ! isset( $_POST['movie_director'] ) ) {
    return;
  }
  $movie_director = sanitize_text_field( $_POST['movie_director'] );
  update_post_meta( $post_id, '_movie_director', $movie_director );
}
로그인 후 복사

虽然最关键的函数就在最后一句,但是一定要注意安全的校验。把这些代码添加进 functions.php 文件之后,你的 Meta Box 就可以正常工作了。如果你需要更多表单,按照这个模式自定义表单结构,然后添加保存函数即可。
下面,我们迫不及待的添加两部电影《鱼与锅之战:宿命对决》 和 《鱼与锅之战:我爱水煮鱼》 内容如下:

2016510155440232.jpg (2194×1196)

2016510155506733.jpg (2186×1258)

添加完之后,我们可以看下所有电影:

2016510155526928.jpg (2204×714)

列表空荡荡的,好难看,我可不可以加上导演字段?当然可以,使用 [manage $post type posts custom column](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");
function movie_custom_columns($column){
  global $post;
  switch ($column) {
    case "movie_director":
      echo get_post_meta( $post->ID, '_movie_director', true );
      break;
  }
}
function movie_edit_columns($columns){
  $columns['movie_director'] = '导演';
  return $columns;
}
로그인 후 복사

即添加了列导演字段,并从每篇文章中读取出来。这样我们的列表就变成了:

2016510155555944.png (1608×474)

OK,我们的后端部分就这样愉快的完成了。打开生成好的链接看下,咦,Not Found?是这样的,如果你的网站设置了固定连接,当你新建了 Post Type 之后,你必须要在后台更新一下固定连接设置才行。找到后台固定连接,再点击一下下面的“保存设置”,之后就可以正常访问了。
展示 Post Type 的内容
单纯创建 Post Type 只是可以让你输入内容,没有什么意义,我们还需要在前台输出自定义 Post Type 的内容。
自定义 Post Type 的模板和样式
根据 WordPress 的模板调用规则 我们可以得知,我们只需要创建 archive-[post_type].php 和 single-[post_type].php 就可以实现该 Post Type 的列表自定义和文章自定义。当访问 Post Type,WordPress 会优先调用这些模板来渲染。
需要注意的是,你需要在注册 Post Type 的时候设置 'has_archive' => true 才会有列表。
现在我们就把主题里自带的 archive.php 和 single.php 文件复制一份命名为 archive-movie.php 和 single-movie.php,为了演示,这里我不做很多自定义,只是输出导演信息表示一下。
我们分别在 L.56 和 L.23 附近的合适位置输出 Meta Box 信息:

echo '导演:'.get_post_meta( get_the_ID(), '_movie_director', true );
로그인 후 복사

然后刷新访问电影列表和具体的电影就可以看到输出的导演信息了。
这里只是举个例子,实际中往往会自定义结构和输出的信息格式等,这里不再进一步修改。这里不再麻烦演示了。
调用 WP_Query 高度自定义调用 Post Type 的内容
上面操作依赖模板,如果需要高度自定义或者在页面的某个模块中调用列表,就需要用到 WP_Query 类来调用:

$args = array( 'post_type' => 'product', 'posts_per_page' => 10 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
 the_title();
 echo '<div class="entry-content">';
 the_content();
 echo '</div>';
endwhile;
로그인 후 복사

查询出来之后就跟常规的主循环一样了,自定输出结构即可。
在首页列表中显示自定义 Post Type 的内容
虽然我们自定义好了 Post Type 同时也编写了一些内容,但是在首页的列表里面并没有显示出来。自定义的 Post Type 的内容不会自动混入主循环里面。那如何让自定义 Post Type 的内容显示出来?
你需要使用 pre_get_posts 这个 action 来做一些处理:

add_action( 'pre_get_posts', 'add_my_post_types_to_query' );
function 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 数组就是要在主循环里面展示的内容,将你的自定义 Post Type 填写进去就可以在首页中显示出来了。
设置自定义 Post Type 的固定连接
创建一个新的 Post Type 有时候也是为了更方便做 SEO,所以设置它的固定连接也非常重要。这里主要用到注册 Post Type 的参数数组里面的 rewrite 参数,常用以下几两项:
slug =》自定义固定连接结构别名,默认是使用 Post Type 名(例如本例的 movie),可以被翻译。一般来说 Post Type 名可能与实际需要的 URL 不一样( Post Type 为 movie,但 URL 可能需要 movies),就可使用该项自定义。
with_front =》 固定连接是否以根目录为基础路径。如果你在固定连接设置页面设置你的结构为 /archives/,那么你的 Post Type 生成的连接默认为 /archives/movie 如果设置该项为 false 即可去掉前面的 /archives/ 直接基于根路径生成固定连接。
大功告成,但这只是 Post Type 最基础的用法,Post Type 还有其他更高级的用法,更详细的参数配置还需要你去进一步挖掘来适应你网站的功能需求。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1125886.htmlTechArticleWordPress中设置Post Type自定义文章类型的实例教程,wordpress实例教程 什么是自定义post 不要想当然的认为这里的post就是就是指博客中的文章,...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

WordPress 기사 목록을 조정하는 방법 WordPress 기사 목록을 조정하는 방법 Apr 20, 2025 am 10:48 AM

WordPress 기사 목록을 조정하는 4 가지 방법이 있습니다. 테마 옵션 사용, 플러그인 사용 (예 : Post Type Order, WP Post List, Boxy Sitture), 코드 사용 (Functions.php 파일의 설정 추가) 또는 WordPress 데이터베이스를 직접 수정하십시오.

WordPress 호스트를위한 웹 사이트를 구축하는 방법 WordPress 호스트를위한 웹 사이트를 구축하는 방법 Apr 20, 2025 am 11:12 AM

WordPress 호스트를 사용하여 웹 사이트를 구축하려면 다음과 같이 필요합니다. 신뢰할 수있는 호스팅 제공 업체를 선택하십시오. 도메인 이름을 구입하십시오. WordPress 호스팅 계정을 설정하십시오. 주제를 선택하십시오. 페이지와 기사를 추가하십시오. 플러그인을 설치하십시오. 웹 사이트를 사용자 정의하십시오. 귀하의 웹 사이트를 게시하십시오.

WordPress 테마의 헤드 이미지를 변경하는 방법 WordPress 테마의 헤드 이미지를 변경하는 방법 Apr 20, 2025 am 10:00 AM

WordPress의 헤더 이미지를 교체하기위한 단계별 안내서 : WordPress 대시 보드에 로그인하고 모양 & gt; 테마로 이동하십시오. 편집 할 주제를 선택하고 사용자 정의를 클릭하십시오. 테마 옵션 패널을 열고 사이트 헤더 또는 헤더 이미지 옵션을 찾으십시오. 이미지 선택 버튼을 클릭하고 새 헤드 이미지를 업로드하십시오. 이미지를 자르고 저장 및 자르기를 클릭하십시오. 저장 및 게시 버튼을 클릭하여 변경 사항을 업데이트하십시오.

WordPress 차단 IP 용 플러그인은 무엇입니까? WordPress 차단 IP 용 플러그인은 무엇입니까? Apr 20, 2025 am 08:27 AM

WordPress IP 차단 플러그인 선택이 중요합니다. 다음 유형을 고려할 수 있습니다. .htaccess : 효율적이지만 복잡한 작동; 데이터베이스 작동 : 유연하지만 효율성이 낮습니다. 방화벽 : 높은 보안 성능이지만 복잡한 구성; 자체 작성 : 가장 높은 제어력이 있지만 더 많은 기술적 수준이 필요합니다.

WordPress의 편집 날짜를 취소하는 방법 WordPress의 편집 날짜를 취소하는 방법 Apr 20, 2025 am 10:54 AM

WordPress 편집 날짜는 세 가지 방법으로 취소 할 수 있습니다. 1. Post Date Disable 플러그인 설치; 2. functions.php 파일에 코드를 추가합니다. 3. WP_Posts 테이블에서 Post_Modified 열을 수동으로 편집합니다.

WordPress의 프론트 엔드를 보는 방법 WordPress의 프론트 엔드를 보는 방법 Apr 20, 2025 am 10:30 AM

대시 보드에 로그인하고보기 사이트 탭으로 전환하여 WordPress 프론트 엔드를 볼 수 있습니다. 헤드리스 브라우저로 시청 프로세스를 자동화하십시오. 대시 보드 내에서 프론트 엔드를 미리 볼 수 있도록 WordPress 플러그인 설치; 로컬 URL을 통해 프론트 엔드를보십시오 (WordPress가 로컬로 설정된 경우).

WordPress의 소스 코드를 가져 오는 방법 WordPress의 소스 코드를 가져 오는 방법 Apr 20, 2025 am 11:24 AM

WordPress 소스 코드 가져 오기에는 다음 단계가 필요합니다. 테마 수정을위한 하위 주제를 만듭니다. 소스 코드를 가져 와서 하위 주제에서 파일을 덮어 씁니다. 하위 주제를 활성화하여 효과적입니다. 모든 것이 작동하는지 확인하기 위해 변경 사항을 테스트하십시오.

WordPress의 헤더를 작성하는 방법 WordPress의 헤더를 작성하는 방법 Apr 20, 2025 pm 12:09 PM

WordPress에서 사용자 정의 헤더를 만드는 단계는 다음과 같습니다. 테마 파일 "header.php"편집. 웹 사이트 이름과 설명을 추가하십시오. 탐색 메뉴를 만듭니다. 검색 표시 줄을 추가하십시오. 변경 사항을 저장하고 사용자 정의 헤더를보십시오.

See all articles