WordPressのカスタム投稿タイプ条件分岐まとめ

WordPressのカスタム投稿タイプでよく使用している条件分岐方法をまとめていきます。
随時、更新していきます。

■投稿タイプで条件分岐(アーカイブページの時)

<?php if (( get_post_type() == '')): ?>

<?php endif; ?>

■タクソノミーで条件分岐(アーカイブページの時)

タクソノミーで条件分岐

<?php if(is_tax()): ?>

<?php endif; ?>

タクソノミーのタームで条件分岐

<?php if(is_tax('fruit_cat', 'apple')): ?>

<?php endif; ?>

タクソノミーのタームで条件分岐(タームが複数ある時)

<?php if(is_tax('fruit_cat', array('apple','orange'))): ?>

<?php endif; ?>

■タクソノミーで条件分岐(シングルページの時)

タクソノミーのタームで条件分岐

<?php if (is_object_in_term($post->ID, 'fruit_cat','orange')): ?>

<?php endif; ?>

タクソノミーのタームで条件分岐(タームが複数ある時)

<?php if (is_object_in_term($post->ID, 'fruit_cat',array('apple','orange'))): ?>

<?php endif; ?>

       

WordPress3.5対応!カスタムフィールドの出力方法まとめ

WordPress3.5からカスタムフィールドの取得&がかなり短縮できるようです。
具体的にはこんな感じで。

■以前のコード

<?php if ( get_post_meta($post->ID,'メタキー',true ) ) { ?> 

■WordPress3.5以降のコード

<?php echo $post->メタキー; ?> 

ノンプログラマ&頭の弱い私は短いコードにこしたことないので
普段よく使うパターンをまとめておきます。

通常のテキスト出力

<?php echo $post->メタキー; ?> 

改行(br)対応のテキスト出力

<?php echo nl2br($post->メタキー); ?> 

数字を3桁でカンマ区切りで出力

<?php echo number_format($post->メタキー); ?>

画像出力

<?php $image = wp_get_attachment_image_src( $post->メタキー,'large' ); ?><img src="<?php echo $image[0]; ?>">  

条件分岐

<?php if ( $post->メタキー ) { ?> 
 メタキーがあった場合に出力する内容 
<?php } ?> 

画像出力あたりははもっと短くならないかな~と思いますが
今までに比べればスッキリしたコードになりました。

参考サイト

WordPressのカスタムフィールドがかなり便利になっている件(3.5対応)
http://notnil-creative.com/blog/archives/1476       

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            

iPhone×WordPress

はじめまして★
デザイナーのほうしょうと申します。

趣味は写真を撮ること!
ちなみに添付の写真は、大阪の空堀です。
まだまだ下町の雰囲気が残っている、癒し街です(^◇^)

さてさて、本題の「iPhone×WordPress」
この記事、アプリを使ってiPhoneから書いています!
英語表記にはなっていますが、感覚的に操作できるので使いやすいです。
(公開設定の部分などは日本語表記になっています)

フリーのアプリなので、WordPressを利用している方は試してみてください(^人^)

[link : WordPressアプリ]

WordPress

By Automattic