標準で用意されている「投稿」「固定ページ」とは別に、ユーザーが独自で投稿タイプを追加することができます。
ユーザーが追加した投稿タイプを「カスタム投稿タイプ」と呼びます。
標準で用意されているタクソノミー(分類)「カテゴリー」「タグ」とは別に、ユーザーが独自でタクソノミーを追加することが出来ます。
ユーザーが追加したタクソノミーを「カスタムタクソノミー」と呼びます。
プラグイン Custom Post Type UI
http://kotori-blog.com/wordpress/custom_post_type_ui/
//カスタム投稿タイプを追加
function create_my_post_types() { //init アクションフックに登録する関数
//rental というカスタム投稿タイプを登録
register_post_type(
'voice',//投稿タイプ名(識別子:半角英数字の小文字)
array(
'label' => 'ご利用者の声', //カスタム投稿タイプの名前(管理画面のメニューに表示される)
'labels' => array( //管理画面に表示されるラベルの文字を指定
'all_items' => '投稿一覧',//管理画面で表示する一覧の名前
'add_new' => '新規追加',
'edit_item' => '編集',
'view_item' => '表示',
'search_items' => '検索',
'not_found' => 'データは見つかりませんでした。',
'not_found_in_trash' => 'ゴミ箱にありませんでした。',
),
'public' => true, // 管理画面に表示しサイト上にも表示する
'description' => 'カスタム投稿タイプ「ご利用者の声」の説明文です。', //説明文
'hierarchicla' => false, //コンテンツを階層構造にするかどうか
'has_archive' => true, //trueにすると投稿した記事の一覧ページを作成することができる
'show_in_rest' => true, //新エディタ Gutenberg を有効化(REST API を有効化)
'supports' => array( //記事編集画面に表示する項目を配列で指定することができる
'title', //タイトル
'editor', //本文の編集機能
'thumbnail', //アイキャッチ画像(add_theme_support('post-thumbnails')が必要)
'excerpt', //抜粋
),
'menu_position' => 5, //「投稿」の下に追加
)
);
}
//init アクションフックで登録
add_action('init', 'create_my_post_types');
//カスタム投稿タイプを追加
function create_my_post_types() { //init アクションフックに登録する関数
//rental というカスタム投稿タイプを登録
register_post_type(
'voice',//投稿タイプ名(識別子:半角英数字の小文字)
array(
'label' => 'ご利用者の声', //カスタム投稿タイプの名前(管理画面のメニューに表示される)
'labels' => array( //管理画面に表示されるラベルの文字を指定
'add_new' => '新規追加',
'edit_item' => '編集',
'view_item' => '表示',
'search_items' => '検索',
'not_found' => 'データは見つかりませんでした。',
'not_found_in_trash' => 'ゴミ箱にありませんでした。',
),
'public' => true, // 管理画面に表示しサイト上にも表示する
'description' => 'カスタム投稿タイプ「ご利用者の声」の説明文です。', //説明文
'hierarchicla' => false, //コンテンツを階層構造にするかどうか
'has_archive' => true, //trueにすると投稿した記事の一覧ページを作成することができる
'show_in_rest' => true, //新エディタ Gutenberg を有効化(REST API を有効化)
'supports' => array( //記事編集画面に表示する項目を配列で指定することができる
'title', //タイトル
'editor', //本文の編集機能
'thumbnail', //アイキャッチ画像(add_theme_support('post-thumbnails')が必要)
'excerpt', //抜粋
),
'menu_position' => 5, //「投稿」の下に追加
)
);
register_post_type( 'video', /* post-type */
array(
'labels' => array(
'name' => __( 'video' ),
'all_items' => '投稿一覧',//管理画面で表示する一覧の名前
'singular_name' => __( 'video' )
),
'public' => true, // 管理画面に表示しサイト上にも表示する
'description' => 'カスタム投稿タイプ「ご利用者の声」の説明文です。', //説明文
'hierarchicla' => false, //コンテンツを階層構造にするかどうか
'has_archive' => true, //trueにすると投稿した記事の一覧ページを作成することができる
'show_in_rest' => true, //新エディタ Gutenberg を有効化(REST API を有効化)
'supports' => array( //記事編集画面に表示する項目を配列で指定することができる
'title', //タイトル
'editor', //本文の編集機能
'thumbnail', //アイキャッチ画像(add_theme_support('post-thumbnails')が必要)
'excerpt', //抜粋
),
'menu_position' => 6, //「投稿」の下に追加
)
);
}
//init アクションフックで登録
add_action('init', 'create_my_post_types');
タクソノミーは「投稿タイプ」なので条件分岐は get_post_type() を使います。
<?php if (( get_post_type() == 'lp')): ?>
<link rel="stylesheet" type="text/css" href="style-lp.css" media="all" />
<?php endif; ?>
★複数ある場合
<?php if (( get_post_type() == 'lp'|| get_post_type() == 'pagecat')) : ?
カテゴリーの一覧表示をさせいたい場合:archive.php を用意する。get_post_typeで読み込ませたいphpファイルを指定。 archive-work
<?php
if ( get_post_type() == 'work') {
get_template_part( 'archive-work' , false );
}else { //それ以外の場合
get_template_part( 'single-main' , 'normal');
}
?>
中のペラ1枚を表示をさせいたい場合:single.php を用意する。get_post_typeで読み込ませたいphpファイルを指定。 single-work
<?php
if ( get_post_type() == 'work') {
get_template_part( 'single-work' , false );
}else { //それ以外の場合
get_template_part( 'single-main' , 'normal');
}
?>
archive.php
archiveをカテゴリーで切り替える
<?php
if ( in_category('bar-s') ) { //特定のカテゴリの場合
get_template_part( 'archive-naisodesign' , false );
} elseif ( in_category('udon') ) { //スラッグ名
get_template_part( 'archive-naisodesign' , false );
} elseif ( in_category('apparel') ) { //スラッグ名
get_template_part( 'archive-naisodesign' , false );
} elseif ( in_category('') ) { //スラッグ名
get_template_part( 'archive-naisodesign' , false );
} else { //それ以外の場合
get_template_part( 'archive-main' , 'normal');
}
?>
single.php
複数タクソノミーがある場合は single-〇〇.php で分けられる。
★single.php
カテゴリーが複数ある場合はarrayで指定する
<?php if(in_category( array( 'bar-design', 'izakaya-design' ) ) ): ?>
ここにタグ
<?php endif; ?>
<?php
if ( ( get_post_type() == 'beautyandbarbar_host') ) {
get_template_part( 'single-host' , false );
}else { //それ以外の場合
get_template_part( 'single-main' , 'normal');
}
?>
上記で振り分けて、個別にページをつくっていく
★single-〇〇.php
<?php if (( get_post_type() == 'lp'|| get_post_type() == 'pagecat')) : ?>
<?php $post;
$args = array(
'post_type' => 'video',//名前
'numberposts' => 5//表示させる記事の数
);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post);?>
<?php the_title() ?>
<?php the_post_thumbnail(); ?>//表示させたい中身を書く
<?php endforeach; ?>
ランダムを発生させる 'orderby' => 'rand', を追加
<?php $post;
$args = array(
'post_type' => 'video',//名前
'orderby' => 'rand',
'numberposts' => 5//表示させる記事の数
);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post);?>
<?php the_title() ?>
<?php the_post_thumbnail(); ?>//表示させたい中身を書く
<?php endforeach; ?>
// カスタム投稿タイプ・カスタム分類
add_action('init', 'register_post_type_and_taxonomy');
function register_post_type_and_taxonomy() {
// ここからカスタム投稿タイプ一個分
register_post_type(
'newspaper', // ←投稿タイプ名。任意の半角英数字に書き換えよう。何度も使うので忘れないように
array(
'labels' => array(
'name' => 'ニュース記事', // ←管理画面での表示名
'add_new_item' => '新規ニュース記事を追加', // ←新規追加するときの表示名
'edit_item' => 'ニュース記事の編集', // ←編集するときの表示名
),
'public' => true,
'hierarchical' => true,
'has_archive' => true,
'supports' => array(
'title',
'editor',
'excerpt',
'custom-fields',
'thumbnail',
'page-attributes',
),
)
);
register_taxonomy(
'newspaperCategory', // ←カスタムタクソノミーの名前。こちらも任意の英数字に変更しよう
'newspaper', // ←どの投稿タイプに適用させたいかを指定。ここではニュース記事のカテゴリになる
array(
'labels' => array(
'name' => 'ニュースのカテゴリー', // ←管理画面での表示名
'add_new_item' => 'ニュースカテゴリーを追加', // ←新規追加するときの表示名
'edit_item' => 'ニュースカテゴリーの編集', // ←編集するときの表示名
),
'hierarchical' => true, // ←設定
'show_admin_column' => true,
'public' => true,
'show_ui' => true,
)
);
// ~ここまでがひとまとまり。2つ目以降を追加したいときは、「ここから~」からこの行までを複製しよう。
}
<?php $post;
$args = array(
'post_type' => 'voice',
'orderby' => 'rand',
'numberposts' => 4
);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post);?>
<div class="element random sa sa--up">
<h2><?php the_title() ?></h2>
<div class="link1"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a></div>
<?php the_excerpt(); ?>
<a class="readtext" href="<?php the_permalink(); ?>">→ Read more</a>
</div>
<?php endforeach; ?>