WEBOPIXEL

WordPressのカスタム投稿タイプを関連付けするプラグイン「Relation Post Types」

Posted: 2011.10.20 / Category: WordPress / Tag: 

Wordpressのカスタム投稿タイプの関連付けできるプラグイン「Relation Post Types」をご紹介します。
このプラグインはカスタム投稿タイプの他にも、固定ページや通常投稿の関連付けを行うこともできます。

Sponsored Link

プラグインのダウンロード

プラグイン本体を下記URLからダウンロードして、有効にします。

WordPress › Relations Post Types

現時点で最新のバージョンである1.2.1を使用します。
Wordpressのバージョンは3.2.1です。

店舗と商品の関係とか

たとえば店舗と商品をカスタム投稿タイプを設定してこれらを関連付けしてみたいと思います。
そういう場合は店舗をカスタム分類を使用した方がスマートな気がしますが、カスタム分類は基本カテゴリーなのでもし店舗のページもしっかりと作り込みたいといった場合はカスタム投稿タイプにした方がいいのではないのかと思います。

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

さくっとカスタム投稿タイプの設定をしましょう。
functions.phpに以下のコードを追加します。

functions.php

	/* 店舗のカスタム投稿タイプ
	============================================== */
	function shop_custom_post_type() {
		$labels = array(
			'name' => '店舗',
			'singular_name' => '店舗',
			'add_new_item' => '新しい店舗を追加',
			'add_new' => '新規追加',
			'new_item' => '新しい店舗',
			'view_item' => '店舗を編集',
			'not_found' => '店舗はありません',
			'not_found_in_trash' => 'ゴミ箱に店舗はありません。',
			'search_items' => '店舗を検索',
		);
		$args = array(
			'labels' => $labels,
			'public' => true,
			'show_ui' => true, 
			'query_var' => true,
			'hierarchical' => false,
			'menu_position' => 5,
			'supports' => array('title','editor')
		); 
		register_post_type('shop', $args);
	}
	add_action('init', 'shop_custom_post_type');
	
	/* 商品のカスタム投稿タイプ
	============================================== */
	function item_custom_post_type() {
		$labels = array(
			'name' => '商品',
			'singular_name' => '商品',
			'add_new_item' => '新しい商品を追加',
			'add_new' => '新規追加',
			'new_item' => '新しい商品',
			'view_item' => '商品を編集',
			'not_found' => '商品はありません',
			'not_found_in_trash' => 'ゴミ箱に商品はありません。',
			'search_items' => '商品を検索',
		);
		$args = array(
			'labels' => $labels,
			'public' => true,
			'show_ui' => true, 
			'query_var' => true,
			'hierarchical' => false,
			'menu_position' => 5,
			'supports' => array('title','editor')
		); 
		register_post_type('item', $args);
	}
	add_action('init', 'item_custom_post_type');
	

Relations Post Typesの設定

プラグインを有効化してれば設定することができます。
「設定」から「Relations」を選択すると次の画面が表示されます。

Relations post types設定画面

作成した「店舗」と「商品」の欄もできてますね。
ここでは商品から店舗を選択したいので、商品の項目の店舗にチェックをして「Save Relations」ボタンをチェックします。

投稿する

準備ができたので投稿してみましょう。
「店舗」に適当に投稿すると、「商品」投稿画面で「店舗」という入力欄が表示されます。

関連付けされた投稿画面

カテゴリーの要領で関連付けしたい項目を選択して投稿しましょう。

ちなみに関連付けされたデータは「wp_posts_relations」という専用のテーブルに保存されます。

関連付けされた投稿画面

テンプレートの作成

関連付けされた投稿は次のようにして取得します。

rpt_get_object_relation(ポストID, 投稿タイプ名);

戻ってくる値は関連付けされたポストIDなので、「post__in」などで指定します。

今回は店舗ページで関連付けされた商品を表示したいので、「single-shop.php」に下記を記述します。

single-shop.php

	<?php
	$artists_relation = rpt_get_object_relation(get_the_ID(), 'item');
	if ( count($artists_relation) >= 1 ) {
		$args = array(
			'post_type' => 'item',
			'post_status' => 'publish',
			'posts_per_page' => -1,
			'showposts' => -1,
			'post__in' => $artists_relation,
			'orderby' => 'date',
			'order' => 'DESC',
		);
		$results_artists = query_posts($args);
		echo '<ul>';
		foreach ( $results_artists as $post ) {
			echo '<li><a href="'.get_permalink($post).'">'.get_the_title().'</a></li>';
		}
		echo '</ul>';
	}
	?>
	

これで店舗の詳細ページに関連付けされた商品だけ表示することができます。

COMMENTS

kzyz 2011-10-21 18:05 

お〜こんなプラグインがあったとは!!
もう少し早くきづいていれば・・・・。
同じような機能を自分で実装してしまったけど、
こっちの方が検索とか出来て便利です。

webOpixel 2011-10-21 21:33 

残念です。
今後、機会があったら使ってみてください。

通りすがり 2013-01-12 23:55 

こんばんわ。

手動で関連記事を表示したいとプラグインを探していましたところ、こちらの記事を参考にRelation Post Typesを使わせてもらうことにしました。

過去の記事も関連記事を表示したいと考えているのですが過去の記事が膨大にあるため、一つ一つ記事の投稿画面を開いて「関連記事を選択⇒更新」していてはものすごい時間がかかってしまいます。

そこで、wordpressの管理画面には記事一覧画面があると思うのですが、そこから「一括編集」みたいな感じでできないでしょうか?

カスタムタクソノミーだと、「記事を複数選択⇒一括編集」で編集できると思うのですが、それをRelation Post Typesでもやりたいのです。

webOpixel 2013-01-15 10:49 

プラグインの拡張の部分になってしまうと思いますので、
申し訳ありませんが、作者にリクエストしてみてください。

LEAVE A REPLY

コードを書く場合は<pre>で囲んでください。