 
                    こんにちは、デザイナーの野田沢です。初心者のためのWORDPRESS #9です。
10月なのでメイン画像をハロウィン仕様にしてみました。
内容とは全く関係ありませんのであしからず。
今回はカスタム投稿について記事にしたいと思います。
ワードプレスはブログをサイトを主体とした(?)CMSのため、もちろん初めから記事の投稿ができます。
しかし!!
「カスタム投稿タイプ」という機能を使えば投稿の種類を複数持つことができるんです!
正直私も初めて知った時はびっくりしました。
ワードプレスってホントなんでもありですよね。このカスタムし放題なところがワードプレスのメリットではないでしょうか。(逆にデメリットでもあるのかな)
カスタム投稿タイプの追加については、方法がいくつかあります。
1. プラグインを使う!
2. functions.phpをいじる!
今回は 2 のfunctions.phpに直接追記して新しいカスタム投稿を追加したいと思います。
functions.phpを使う理由はぶっちゃけ
コピペで終わる!
それだけです。私はプラグインに対して絶対的な信頼を置けていません。(プラグイン製作者の方々申し訳ございません!)
直接プラグインのトラブルを経験したというわけではないのですが、ワードプレス本体のバージョンとプラグインのバージョンの相性が悪いと色々と不具合がでると面倒臭いイメージがあるからです。
と、こんな理由もありつつ、やっぱり簡単だから、これに尽きると思います。
コードをコピペしよう!
前述の通り下記コードをコピペすれば使えます!
コード中の“test_custom_post”の部分がカスタム投稿名になるのでここは任意で変更してください。※ 数カ所あります。
<?php
//カスタム投稿タイプ
add_action('init', 'test_custom_post_init');
function test_custom_post_init()
{
  $labels = array(
    'name' => _x('カスタムポスト', 'post type general name'),
    'singular_name' => _x('カスタムポスト', 'post type singular name'),
    'add_new' => _x('カスタムポストの記事を書く', 'test_custom_post'),
    '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,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => 5,
    'supports' => array('title','editor','thumbnail','custom-fields','excerpt','revisions','page-attributes','comments'),
    'has_archive' => true
  );
  register_post_type('test_custom_post',$args);
  
//カテゴリータイプ
$args = array(
'label' => 'カスタムポストカテゴリー',
'public' => true,
'show_ui' => true,
'hierarchical' => true
);
register_taxonomy('test_custom_post_category','test_custom_post',$args);
//タグタイプ
$args = array(
'label' => 'カスタムポストタグ',
'public' => true,
'show_ui' => true,
'hierarchical' => false
);
register_taxonomy('test_custom_post_tag','test_custom_post',$args);
}
?>
上記ではカテゴリーとタグも同時に追加していますが、必要なければ削除してください。
1点ご注意。functions.phpを更新したら、ワードプレスの管理画面より、パーマリンク設定ページへ行きそのまま変更ボタンを押して下さい。
これをしないと、管理画面には新しく追加したカスタム投稿が追加されますがフロント側が認識してくれず、エラーページが出てしまいます。
これで投稿ページカテゴリーページなどにカスタム投稿の記事が表示されます!
一覧のアーカイブページは/カスタムポスト名/で表示できます。
(上記の場合、http://testsite.jp/test_custom_post/)
めっちゃ簡単!
ブラッシュアップ
ここからはブラッシュアップです!
ちょっとしたこだわりがあるかたは参考にしてください。

カスタム投稿は別のデザインにしたい…
その要望、応えられます!
カスタム投稿のページは普通の投稿ページとは別のデザインにして区別したい、そんなこともきっとあるでしょう。
これはとっても簡単!
通常投稿ページはsingle.phpを使用していますが、このsingle.phpをコピーしてsingleの後に-カスタム投稿名.phpと言うファイルを作るだけ!
(上記の場合 single-test_custom_post.php)
このファイルをテーマフォルダの直下に用意すれば自動でカスタム投稿はこっちの投稿ページに表示してくれます。
あとはお好みのデザインを作れば出来上がり!
カスタム投稿のパーマリンクをIDに変更したい…
上記のコードを入れただけでは、投稿のurlはポスト名になっています。
もちろん日本語タイトルの時はそまま日本語がurlになります。
私はこれをポストIDにしたかったので下記をfunctions.phpに追加しました。
※上記同様、“test_custom_post”の部分は任意で変更してください。
<?php
// カスタム投稿パーマリンクをIDに変更
add_action('init', 'myposttype_rewrite');
function myposttype_rewrite() {
    global $wp_rewrite;
    $queryarg = 'post_type=test_custom_post&p=';
    $wp_rewrite->add_rewrite_tag('%test_custom_post_id%', '([^/]+)',$queryarg);
    $wp_rewrite->add_permastruct('test_custom_post', '/test_custom_post/%test_custom_post_id%', false);
}
add_filter('post_type_link', 'myposttype_permalink', 1, 3);
function myposttype_permalink($post_link, $id = 0, $leavename) {
    global $wp_rewrite;
    $post = &get_post($id);
    if ( is_wp_error( $post ) )
        return $post;
    $newlink = $wp_rewrite->get_extra_permastruct($post->post_type);
    $newlink = str_replace('%'.$post->post_type.'_id%', $post->ID, $newlink);
    $newlink = home_url(user_trailingslashit($newlink));
    return $newlink;
}
?>
最初に言いましたがカスタム投稿を増やす方法はいくつもあります。自分に合った方法を模索するのがベターだと思いますが、この方法がお役に立てれば幸いです。
それではまた次回。
良きワードプレスライフを!
過去記事
▸ 初心者のためのWORDPRESS -08-
▸ 初心者のためのWORDPRESS -07-
▸ 初心者のためのWORDPRESS -06-
▸ 初心者のためのWORDPRESS -05-
▸ 初心者のためのWORDPRESS -04-
▸ 初心者のためのWORDPRESS -03-
▸ 初心者のためのWORDPRESS -02-
▸ 初心者のためのWORDPRESS -01-
 
                         
                         
                     
                     
                     
                    