定义content type
需要在theme的functions.php里添加action
/*
* 自定义内容类型 - 电影
*/
function movietalk_custom_post_type_movie() {
register_post_type( 'movie', array(
'public' => true,
'labels' => array(
'name' => '电影',
'singular_name' => '电影',
'add_new' => '添加电影',
'add_new_item' => '添加电影资料',
'edit_item' => '编辑电影资料',
'new_item' => '新电影',
'all_items' => '所有电影',
'view_item' => '查看电影',
'search_items' => '搜索电影',
'not_found' => '没找到电影资料',
'not_found_in_trash' => '回收站里没找到电影资料',
'menu_name' => '电影'
),
'menu_position' => 5, // MENU在导航上的顺度
'supports' => array(
'title',
'editor', // 编辑器
'thumbnail', // 缩略图
'excerpt', // 摘要
'custom-fields', // 自定义字段
'revisions' // 版本
),
'has_archive' => true,
'rewrite' => array(
'slug' => 'movie', // 地址别名
'with_front' => false // 地址是否带前缀字串"archives"
),
) );
}
add_action( 'init', 'movietalk_custom_post_type_movie' );
定义content type的信息库
/*
* 自定义内容类型的内容更新信息 - 电影
*/
function movietalk_movie_updated_messages( $messages ) {
global $post, $post_ID;
$messages['movie'] = array(
0 => '', // 没有用,信息从索引 1 开始。
1 => sprintf( __('电影已更新,<a href="%s">点击查看</a>', 'movietalk'), esc_url( get_permalink($post_ID) ) ),
2 => __('自定义字段已更新。', 'movietalk'),
3 => __('自定义字段已删除。', 'movietalk'),
4 => __('电影已更新。', 'movietalk'),
// translators: %s: 修订版本的日期与时间
5 => isset($_GET['revision']) ? sprintf( __('电影恢复到了 %s 这个修订版本。', 'movietalk'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
6 => sprintf( __('电影已发布,<a href="%s">点击查看</a>', 'movietalk'), esc_url( get_permalink($post_ID) ) ),
7 => __('电影已保存', 'movietalk'),
8 => sprintf( __('电影已提交, <a target="_blank" href="%s">点击预览</a>', 'movietalk'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
9 => sprintf( __('电影发布于:<strong>%1$s</strong>, <a target="_blank" href="%2$s">点击预览</a>', 'movietalk'),
// translators: 发布选项日期格式,查看 http://php.net/date
date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
10 => sprintf( __('电影草稿已更新,<a target="_blank" href="%s">点击预览</a>', 'movietalk'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
);
return $messages;
}
add_filter( 'post_updated_messages', 'movietalk_movie_updated_messages' );
定义taxonomy
/*
* 自定义分类法 - 电影类型
*/
function movietalk_custom_taxonomy_genre() {
$labels = array(
'name' => '类型',
'singular_name' => '类型',
'search_items' => '搜索类型',
'popular_items' => '热门类型',
'all_items' => '所有类型',
'parent_item' => null,
'parent_item_colon' => null,
'edit_item' => '编辑类型',
'update_item' => '更新类型',
'add_new_item' => '添加新类型',
'new_item_name' => '新类型',
'separate_items_with_commas' => '使用逗号分隔不同的类型',
'add_or_remove_items' => '添加或移除类型',
'choose_from_most_used' => '从使用最多的类型里选择',
'menu_name' => '类型'
);
$args = array(
'public' => true,
'labels' => $labels,
);
register_taxonomy( 'genre', 'movie', $args );
}
add_action( 'init', 'movietalk_custom_taxonomy_genre' );
自定义字段
安装advanced-custom-fields plugin后台就拥有管理字段的功能,可以把字段组添加到任意已定义的content type上。需要使用代码来输出字段,代码如下:
<?php while(have_posts()): the_post();?>
<?php the_title();?>
<?php the_content();?>
<?php if(get_field('field_name')):?>
<?php the_field('field_name');?>
<?php endif;?>
<?php endwhile;?>
自定义字段:出现逻辑
custom field很强大,有些功能甚至比drupal7的content type还要强大,field的出现逻辑设置就是其中一个。
field可以设置Conditional Logic来指定当其它field值达到某些条件后,field才会出现。这样可以制作更深层次的内容类型,而不仅限于post type。
添加新的缩略图尺寸
// functions.php
add_image_size( 'video_detail', $width, $height, true );
显示缩略图
$image_id = get_field('image');
echo wp_get_attachment_image($image_id, 'video_detail');
echo wp_get_attachment_image_src($image_id, 'video_detail');
添加javascript文件
function movietalk_scripts() {
if( get_post_type() == 'video' ){
wp_enqueue_script( 'jwplayer', get_stylesheet_directory_uri() . '/jwplayer/jwplayer.js' );
}
}
add_action( 'wp_enqueue_scripts', 'movietalk_scripts' );
当前post页面加载其它post页面的数据
当使用custom field的related field,可以引入其它post数据,在模板里也是通过get_field函数获取其它post对象,不过要注意需要使用setup_postdata($post);来载入其它post的内容,而且使用完数据之后需要用wp_reset_postdata();重置数据,否则会影响the_post, the_title, the_excerpt的结果。
管理内容列表添加列
mytheme/functions.php
// add column & column name
fucntion mytheme_video_cover_column($columns){
$columns['video-cover-image'] = 'Video Image';
}
add_filter('manage_video_posts_columns', 'mytheme_video_cover_column');
// set column content
function mytheme_video_column_content($column_name, $post_id) {
if($column_name == 'video-cover-image') {
$video_cover_id = get_field('video-cover', $post_id);
echo wp_get_attachment_image($video_cover_id, 'thumbnail');
}
}
add_action('manage_video_posts_custom_column', 'mytheme_video_cover_column_content');
// set column style
function mytheme_video_cover_image_css() {
echo '<style>.column-video-cover-image img {width:60x;}</style>';
}
add_action('admin_head', 'mytheme_video_cover_image_css');
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。