BLOG

Paakのスタッフが得た知見や情報を発信するブログです。
たまに会社の出来事に関する記事もお届けします。

カスタム投稿タイプについて

functions.phpに下記を記述で実装できる。下記をデフォルトとする。

// カスタム投稿タイプ item
 function item_custom_post_type(){
   $labels = array(//管理画面での表示
     'name' => _x('アイテム', 'post type general name'),
     'singular_name' => _x('アイテム', 'post type singular name'),
     'add_new' => _x('新規追加', 'item'),
     'add_new_item' => __('アイテム'),
     'edit_item' => __('編集'),
     'new_item' => __('新規アイテム'),
     'view_item' => __('表示'),
     'search_items' => __('項目検索'),
     'not_found' => __('記事が見つかりません'),
     'not_found_in_trash' => __('ゴミ箱に記事はありません'),
     'parent_item_colon' => ''
   );
   $args = array(
     'labels' => $labels,
     'public' => true,//falseで個別ページを事実上なくす。管理画面にURLが出なくなり、検索エンジンからもヒットしない。ただURLは存在する。[1]
     'publicly_queryable' => true,
     'show_ui' => true,
     'query_var' => true,
     'capability_type' => 'post',
     'hierarchical' => false,//階層構造の有無
     'menu_position' => 4,//管理画面メニューの位置
     'has_archive' => true,//アーカイブがあるかどうか
     'rewrite' => array( 'slug' => 'item'),
     'supports' => array('title','editor','thumbnail')//編集ページの順番
   );
   register_post_type('item',$args);//itemはカスタム投稿のスラッグ名
 
   $args = array(//タクソノミー追加
       'label' => 'カテゴリー',//管理画面で表示される文字
       'public' => true,
       'show_ui' => true,
       'show_in_menu' => true,//管理画面のメニューで一覧を表示するか
       'show_in_nav_menus' => true,
       'show_admin_column' => true,
       'hierarchical' => false,//ページ階層の指定
       'query_var' => true
   );
   register_taxonomy('item_category','item',$args);//タクソノミー追加(item_categoryはタクソノミーのslug)
 }
 add_action('init', 'item_custom_post_type');

個別ページを404にしたい時に下記を記述する。上記コードの「'public' => false」と併用を推奨。

 add_filter( '[slug]_rewrite_rules', '__return_empty_array' );//[slug]はカスタム投稿タイプのスラッグに書き換える

出力方法
メインループとサブループの2パターンを載せておきます。

メインループ

 <div>
   <?php 
   if ( have_posts() ):
   while ( have_posts() ):the_post();
   $category = get_the_terms($post->ID, 'item_category');//記事のitem_categoryのタームを取得
   ?>
     <h2><?php the_title(); ?></h2>
     <p><?php echo $category[0]->name ?></p>//ターム名表示 複数ある場合はループすれば良い
   <?php endwhile; endif; ?>
 </div> 

サブループ

 <div>
   <?php 
   $args = array(
     'post_type' => 'item',//カスタム投稿タイプ名
     'posts_per_page' => -1//表示投稿数(-1は全て)
   );
   $the_query = get_posts( $args );
   if ( $the_query ): 
   foreach ( $the_query as $post ): setup_postdata( $post );
   $item_category = get_the_terms($post->ID, 'item_category');//記事のitem_memberのタームを取得
   ?>
     <h2><?php the_title() ?></h2>
     <p><?php echo $item_category[0]->name; ?></p>//ターム名を表示
   <?php
   endforeach;
   wp_reset_postdata();
   endif;
   ?>
 </div>

サブループは$argsで色々制限できるので、自由度が高い。

CONTACT /

webサイトでお困りのことがあれば、お気軽にご相談ください。

お問い合わせはこちら

CONTACT /

Paakについて、案件のご相談、採用についてはお問い合わせフォームからご連絡ください。