WordPressのカスタム投稿タイプを企業サイトに使う場合の(超個人的)決定版

こんにちわ。
夢の中でコーディングした内容をコピペする方法がないか模索中の百田です。

エクストではWordPress3.0の頃から
カスタム投稿タイプを導入してサイトを構築しているのですが
3.0の頃と違い各所でも情報が豊富になりました。

今回は個人的メモを兼ねてカスタム投稿タイプの利用法をまとめたいと思います。

私がカスタム投稿タイプを利用する際のポイントはこちらです。

●プラグインは利用しない。
プラグインを利用する方法もありますが、シンプル好きなのでプラグインは使用せずにfunction.phpに記述します。
●企業サイトで使えるスラッグにする
スラッグに日本語が出てしまうなどはNG。企業サイトとして自然なURLを目指します。
●一覧用ファイルはひとまとめに
メンテナンス性を考え、taxonomy.phpは使用せずarchive.phpにまとめます。

今回は「書籍」という項目で
カスタム投稿タイプを利用する場合を想定して
構築を進めたいと思います。

最後にサンプルファイルを用意していますので
詳しくはサンプルファイルをダウンロードして確認してください。

1.カスタム投稿タイプの設定

function.phpに下記の内容を記述します。
基本的には「書籍」「book」の記述を
適宜置き換えるだけでOKです。

/* ★書籍ここらから★ */
register_post_type(
'book',
  array(
  'label' => '書籍',
  'hierarchical' => false,
  'public' => true,
  'query_var' => false,
  'menu_position' => 5,
  'has_archive' => true,
  'supports' => array('title','editor','author') 
  )
);

  /* カスタムタクソノミーを定義 */
  register_taxonomy(
	'book_cat',
	'book',
	array(
	'label' => 'カテゴリー',
	'hierarchical' => true,
	'rewrite' => array('slug' => 'book')
	)
  );
  /* カスタムタクソノミーを定義ここまで */
  
  /* 管理画面一覧にカテゴリを表示 */
  function manage_book_columns($columns) {
	$columns['book_category'] = "カテゴリー";
	return $columns;
  }
  function add_book_column($column_name, $post_id){
	if( $column_name == 'book_category' ) {
    //カテゴリー名取得
	if( 'book_category' == $column_name ) {
    	$book_category = get_the_term_list($post_id, 'book_cat', '', ', ', '' );
    }
    //該当カテゴリーがない場合「なし」を表示
    if ( isset($book_category) && $book_category ) {
        echo $book_category;
    } else {
        echo __('None');
    }
	}
  }
  add_filter('manage_edit-book_columns', 'manage_book_columns');
  add_action('manage_posts_custom_column',  'add_book_column', 10, 2);
  /* 管理画面一覧にカテゴリを表示ここまで */
  
/* ★書籍ここまで★ */

タクソノミー(カテゴリ)が不要な場合は、
15行目「 /* カスタムタクソノミーを定義 */」から
48行目「/* 管理画面一覧にカテゴリを表示ここまで */」までは不要です。

例としてタクソノミー(カテゴリ)に
「ノンフィクション(nonfiction)」を追加した場合
通常スラッグは以下のようになります。

●書籍一覧(カスタム投稿タイプ)

http://ドメイン/book/

●書籍一覧 > ノンフィクション一覧(タクソノミー)

http://ドメイン/cnonfiction/

ノンフィクション一覧のスラッグで
本来は親子関係をもった http://ドメイン/book/nonfiction/ としたいところですが
17行目で定義した _cat がくっついしまい親子関係がしっくりきません。

そこで22行目のようにリライトしてあげます。

'rewrite' => array('slug' => 'book') 

これでスラッグが親子をもった(ような)表示になります。

●書籍一覧 > ノンフィクション一覧(タクソノミー)

http://ドメイン/book/nonfiction/

function.php記述のポイントは、has_archive 、hierarchical、rewriteの設定ですが
これ以上突っ込まれると説明できる自信が無いので割愛します。。。
まぁこの通りに記述してやってください。

2.スラッグをページIDにするためのリライト設定

カスタム投稿タイプでは通常、/book/本の名前(記事タイトル)/ のように
スラッグ名に記事で設定したタイトルが入ってしまいます。
当然、日本語で本のタイトルを入れるとスラッグにも日本語が入ることになります。
ブログならまだよいのですが、企業サイトではあまり好ましくありません。
今回は /book/39.html のようにページIDで表示するようにします。
こちらもプラグインを利用する方法が多く出まわってますが
プラグインは使用せずにfunction.phpに記述します。

/* post_id.htmlにRewrite */
add_action('init', 'myposttype_rewrite');
function myposttype_rewrite() {
    global $wp_rewrite;

    $queryarg = 'post_type=book&p=';
    $wp_rewrite->add_rewrite_tag('%book_id%', '([^/]+)',$queryarg);
    $wp_rewrite->add_permastruct('book', '/book/%book_id%.html', 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;
}
/* post_id.htmlにRewrite */

こちらも「book」の記述を適宜置き換えてください。

3.パーマリンク設定の変更

管理画面の「パーマリンク設定」の「カスタム構造」で下記の内容に変更します。
※以前は「/%post_type%/%post_id%.html」でしたが「投稿」で不具合があるので変更しています。(追記2012/11/14)

/%category%/%post_id%.html

最後に「変更を保存」を押して保存してください。

4.詳細ページの設定

詳細ページは single.php を用意します。
これは、今までの構築方法と変わらないので割愛します。
single-book.php の専用ファイルを用意することで、
書籍専用の詳細ページを表示することもできます。

5.一覧ページの設定

一覧ページは archive.php を用意します。
詳細ページ同様、 archive-book.php を用意することで
専用の一覧ページを表示することもできますが、
今回は条件分岐で一覧を表示します。

<!-- 書籍一覧 -->
<?php if (( get_post_type() == 'book')) : ?>
  <h2>書籍</h2>
  <hr>
  <h3>カテゴリリスト</h3>  
  <ul>
  <?php wp_list_categories('title_li=&taxonomy=book_cat'); ?>
  </ul>
  <hr>
  <h3>書籍一覧 <?php single_term_title(); ?></h3>
  <ul>
  <?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
  <?php endwhile; ?>
  <?php endif; ?>
  </ul>
<?php endif; ?>
<!-- 書籍一覧ここまで -->

カスタム投稿タイプの一覧の archive.php と
タクソノミー(カテゴリ分類)一覧の taxonomy.php は通常、別ファイルになりますが
同じデザインの場合、2種類に分かれるとメンテナンス性が悪いので
archive.php のみを使い一つのファイルに集約します。

6.補足

これでカスタム投稿タイプの設定は完了です。
あとは、カテゴリや記事を登録して動作チェックしてみてください。
また、function.phpを変更する場合は、
最後に必ず管理画面のパーマリンク設定で
「変更を保存」をクリックして「カラ更新」をかけてください。
Rewrite設定が反映されずに404になることがあります。

今回の記事を書くにあたって、
下記ページを参考にさせて頂きました。感謝!

http://webpaprika.com/387.html
http://webpaprika.com/371.html
http://varl.jp/note/wp-3-1-custom-post-type-settings-summary

7.サンプルファイル

今回の内容をまとめた、超シンプルなサンプルテーマを用意しました。
サンプル内では「書籍」と「DVD」の
2種類の投稿タイプを設定していますので、より実践的な内容になっています。
DIMG0289 (2).gifご自由にどうぞ。
 
 
サンプルテーマをダウンロード
 
※「管理画面一覧にカテゴリを表示」にバグがあったためサンプルテーマを更新しました。2012/06/20            

スマホ・デビュー2

iPhone ごときに右往左往、東奔西走、七転八倒している高田です。
否、何を言わせるのですかっ!

さて、前回に引き続き相方のスマホデビューの顛末です。

その後は、 a さんのサポートサイトの情報と睨めっこしながら、何度も手順を確認しながら設定作業を進めました。

まずは、固有の ID (「auone ID」と言います。) を取得し、携帯に入っているアドレス帳を a さんが提供する特別なクラウドサービス「auアドレス帳」にデータを移します。
(“a さん”ってイニシャらなくてもバレてますが、ここまで来たら一応このままで。)

そして、携帯で撮影した写真データとかは、後でパソコン経由で移せるように SD カードに移しておきます。

その後、本体でメールの設定などを行うところまでは何とかスマートにできたので余裕をかましていたら、次がイケなかった!

Apple ID」という未知の敵が居たのです。

僕が普段から Mac を使っていたり、iTunes で楽曲のダウンロードなどを行っていたら怖がることなんて無いのに、まったくの青二才です。

相方がアプリに目覚めない限りは当面のあいだ無縁のつもりでしたが、どうやら「auアドレス帳」からデータを本体に移行する際に、移行専用のアプリを使用することになっていたようです。

このことを理解するのに、数日要しました(汗)

そして、「Apple ID」を新規取得するために、iTunes の最新版を自宅のパソコンにインストールしたのですが、どうやら iPhone 単体で片が付くということを理解するのにまた 1日(汗×2)

そして、いざ ID の取得を行うためにウィザードに従って入力を進めていたらカード情報が要るではないか!
流石に、相方のそれは知らないので(これ、ホンマです)、入力をしてもらってから最後まで進めたのですが…

みなさんはご存知かと思いますが、最後に「承認」の通知メールが届きます。

未知の敵と戦っていることでアタマが熱くなっているのか、こうなることとは全く予測がつかず、登録アドレスを相方の携帯アドレスに設定したために「負け戦」を買ってしまったのです。
(さらに、つづく?)

第1回エクスト杯「桃太郎電鉄2010」

先日エクストにて、第1回エクスト杯「桃太郎電鉄2010」を開催しましたo0020002010329133136.gif

芝先とお客様で「桃太郎電鉄なら負けないッthunder.gif」と盛り上がり、
社内メンバーやお客様を招いての 大ゲーム大会となりましたo0020002010319047035.gif

桃太郎電鉄(略して桃鉄)のルールを知らないメンバーもいたので
“知っているメンバー+知らないメンバー”という組み合わせで4チームに振り分け、
白熱した戦いが、夜11時まで繰り広げられました!

この土地を買うかどうかo0020002010472842888.gifの相談や、サイコロの目押しgood.gifなどなどしていたら
4チームの3年決戦に、3時間も掛かってしまいましたcoldsweats01.gif

結果、優勝者は女性2人組チームの優勝でしたー!

優勝賞品は「レインボーカード1000円分」ですo0020002010319047029.gif
また、参加賞として桃鉄タオルも用意しましたo0020002010485821628.gif

次回は「マリオカート」とのリクエストがあがっていますので
われこそは「マリカーマニアだ!!」と言う方は、挑戦しに来てくださいねo0020002010631846142.gif

新しいiPad

3月16日に新iPadが発売されましたね!
今回の名称はただ単に「iPad

Appleはこのまま新しく出ても名称を変えずに「iPad」とするような発表をしているみたいです。
この流れだと、新しいiPhoneも「iPhone 5」とかではなく「iPhone」になってしまうのでしょうか!?

でもよく考えてみると、車なんて車種名は固定ですよね。
だいたい何年モデルなどで通ってしまったりするので、これはこれでありなのかなと…
となると、今度から人に「そのiPhoneは何年モデル?」って聞かないといけないのかな。

うわーめんどくせーーー!!! 

そんな事言うても次のiPhoneに期待していますけどね!!

スマホ・デビュー

昨年(2011年)は何とか発症しなかった花粉症を抱えて「今年はどうかな?」と少々憂鬱気味の高田です。
ウソです。
今では、開き直ってます。「来るなら来い!」と…。(えっ?ただの強がりですって!?)

さて、少々訳ありでウチの相方が iPhone に機種変更しました。
長年使用していた、「ガラケー」と僕らの業界では称している日本独自の技術の粋を集めた携帯電話端末を手放し、スマートフォンの代表格に乗り換えたのです!

高田家では a から始まるキャリア(携帯電話会社)さんを長年(僕は 140か月目)使用しているのですが、 iPhone が登場する話が挙がった頃からず~っと気になってました。
しかし、僕はすでに昨年の夏ごろに INFOBAR A01 に変えたばかりでしたので、当然お家事情が許す訳もなく、半ば悶々と過ごしていたのです(笑)

でも、相方の端末はとっくに割賦も終わり、すでにボロボロな状態でした。

そんな折、降って湧いたような感じで買い替えのチャンスが来たのです。
相方はたいそう喜びました。

「これでワタシもスマホ・デビュー!」


さぁ、やってきました。 iPhone が。
我が家に、夢のようなスマートな暮らしが訪れます(…そのはずです)。

息子たちはどんなオモチャが届いたのか、と興味津々でした(真っ先に箱に手を伸ばしたのは次男です…笑)。

相方は「使えるようになるまで設定は任せた!」と僕に下駄を預けました。

僕は、一応この業界に居る者として間違いは許されないという変なポジションとプライドが故に、文字通り「スマート」に相方へバトンを渡さねばならなくなったのです。
(つづく?)

SNS懸賞まとめサイト5選

最近、注目を集めているSNSを使った懸賞はご存知でしょうか?
インターネットの懸賞には、アンケートに回答するものや、会員登録を行うものなど様々なものがあります。
私は普段あまり意識していませんが、メールに記載されたリンクに飛ぶと抽選でポイントがもらえるキャンペーンや、オンラインショッピングのスピードくじなど、気軽にできるものには参加しています。

最近では、TwitterやFacebookの流行のためか、SNSを利用した懸賞が増えています。こういったSNS懸賞は他の懸賞とは違い、キーワードをツイートや、「いいね!」を押すだけで良いので、とても簡単です。
今日はそういったSNS懸賞のまとめサイトをご紹介します!

ついっきゃん

http://twitter-campaign.jp/
Twitterのキャンペーン情報をまとめている懸賞まとめサイト。キャンペーン一覧を終了日順で見ることもできます。

あじゃプラス 懸賞ナビ

http://kn.aja.jp/
Twitterの懸賞をまとめている懸賞まとめサイト。残り日数も掲載されていて、応募期間があとどれぐらいあるかがわかりやすいです。

Crocos懸賞

http://present.crocos.jp/
Crocos懸賞のアプリを登録すると、同サイト内で紹介されているFacebook懸賞に応募ができます。
企業のFacebookページに「いいね!」するだけで応募が完了します。フォーマットが決まっているので簡単ですね。

懸賞生活

http://www.knshow.com/cat/33/
Facebookのプレゼントキャンペーン情報をまとめている懸賞サイト。その他のインターネットやTwitterなどの懸賞も掲載されています。

モニプラ

http://monipla.jp/
モニプラのアプリを登録すると、同サイト内で紹介されているMixi、Twitter、Facebookのイベントに参加できます。
動画や写真の投稿や、ブログ、ツイートなど様々なイベントがあります。有名企業が多いことも特徴です。