Posts 2 Postsプラグインで、投稿やカスタム投稿タイプ、ユーザを相互に関連付ける(ひも付ける)

Posts 2 Postsというプラグインを試してみましたのでレポートします。
発見された@miya0001さん、ご紹介いただいた@jim0912さん、ありがとうございました。


WordPress › Posts 2 Posts « WordPress Plugins

また、もう少し簡単な使い方ができるCustom Post Types Relationships (CPTR)というプラグインもあります。解説は、http://www.warna.info/archives/2250/です。

用途

2種類の「紐付け」ができます。

ポスト同士をひも付ける

1つ目は、ある投稿と別の投稿を関連付けるというものです。
カスタム投稿タイプもOKです。

  • 同じポストタイプ内でやる場合:シリーズものの投稿をいくつか書く時に、お互いをひも付けて、関連サイトとして出す
  • 異なるポストタイプ間でひも付ける場合:商品ポストタイプ内の商品ページと、メーカー紹介ポストタイプのメーカー個別ページを紐付けて、メーカーページでそのメーカーの商品を並べるなど
  • 多対多のヒモ付ができます。

などの用途に使えます。

ユーザとポストをひも付ける

2つ目は、ある投稿とユーザを関連付けるというものです。

  • ログインユーザに、「お気に入りページ」を持たせる
  • ひとつのポストに、複数のauthorを付ける
  • 多対多のヒモ付ができます。

などの用途に使えます。

インストール

コネクションタイプの登録

公式ディレクトリからインストールできますが、その後に、「コネクションタイプ」の登録を行う必要があります。
プラグイン公式の説明ページ « github

テーマのfunctions.phpに、下記を貼り付けます。

function my_connection_types() {
	// Posts 2 Posts プラグインが有効化されてるかチェック
	if ( !function_exists( 'p2p_register_connection_type' ) )
		return;

	// 登録する
	p2p_register_connection_type(
		array(
			'name' => 'posts_to_pages',
			'from' => 'post',
			'to' => 'page'
		)
	);
}
add_action( 'wp_loaded', 'my_connection_types' );

9行目でコネクションタイプの名前、10,11行目でどこからどこにコネクトするのかを登録します。
登録すると以下のようなメタボックスが追加されます。

新規投稿のページに表示されました。
新規固定ページの画面に表示されました。

データベース

インストールするとデータベースにwp_p2p, wp_p2pmetaテーブルが追加されます。

wp_p2p
wp_p2pテーブル
wp_p2pmeta
wp_p2pmetaテーブル

使い方

紐付け方

接続してみます。まずは、サンプルページ(固定ページ)から、2つの投稿に紐付けてみます。

サンプルページから、2つの投稿を紐付けてみます。

すると、以下のように紐付けられた投稿(ここではHello Worldページ)側にも何もしなくても紐付いてきます。

固定ページから紐付けられた側の投稿にも同じように自動で。

 

表示方法

あるページで、そのページに紐付けられた投稿を表示する方法です。

page.phpに下記を書いてみます。

<?php 
$args = array(
		'connected_type' => 'posts_to_pages',
		'connected_items' => get_queried_object(),
		'nopaging' => true,
		'suppress_filters' => false
);
$connected_posts = get_posts( $args ); ?>
<ul>
<?php
foreach ( $connected_posts as $post ) {
	setup_postdata( $post ); ?>
	<li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
<?php }
wp_reset_postdata();
?>
</ul>

すると、下の画像のように、サンプルページに、先ほど紐付けた2つの投稿へのリンクが表示されました。

ユーザの紐付け

上記のfunctions.phpに書き込んだコードを下記のように変更して、投稿とユーザを紐付けられるようにします。

function my_connection_types() {
	// Posts 2 Posts プラグインが有効化されてるかチェック
	if ( !function_exists( 'p2p_register_connection_type' ) )
		return;
	
	// ポストとページのコネクションを登録する
	p2p_register_connection_type(
		array(
			'name' => 'posts_to_pages',
			'from' => 'post',
			'to' => 'page'
		)
	);
	// ポストとユーザのコネクションを登録する
	p2p_register_connection_type(
		array(
			'name' => 'multiple_authors',
			'from' => 'post',
			'to' => 'user',
//			'to_query_vars' => array( 'role' => 'editor' )
		)
	);

}
add_action( 'wp_loaded', 'my_connection_types' );

するとメタボックスが表示されるので、以下のように登録してみます。

投稿ページにユーザのメタボックスが出てる

次に、single.phpに下記を追加します。

$args = array(
	'connected_type' => 'multiple_authors',
	'connected_items' => $post->ID	
);
$connected_users = get_users( $args );
echo '<ul>';
foreach ( $connected_users as $cu ) {
	echo '<li>' . esc_html( $cu->user_login ) . '</li>';
}
echo '</ul>';

すると、以下のようにユーザが表示されます。

なかなか便利そうです(^○^)/

柔軟なプラグインで、以下の様な機能もあります。

  • 1対多にする。例えばページには複数の投稿を紐付けられるけど、投稿はひとつのページにしか紐付かないように制限する
  • ヒモ付けのメタ情報。数字とかテキストなどをテキストエリアやセレクト、チェックボックスなどで選べるようになる。メタ情報によって表示するひも付き情報をソートしたりできる
  • 1行でnew $WP_Queryができるeach_connected()やget_related()といったメソッド、メタボックス経由ではなくプログラムでヒモ付け登録したい時に使うconnect()メソッド

https://github.com/scribu/wp-posts-to-posts/wikiで詳しく解説されています。

↓ プラグインを作る方々への本、書きました。 ↓

“Posts 2 Postsプラグインで、投稿やカスタム投稿タイプ、ユーザを相互に関連付ける(ひも付ける)” への 3 件のフィードバック

  1. Posts 2 Postsの実装で貴サイトのページを参考にさせていただきました。ありがとうございます。
    ひとつ解決できない箇所があり、厚かましく存じましたが、コメントさせていただきました。
    関連付けされた投稿(ページA)が持つ、あるカスタムフィールドの値(X)を取得し、それを関連付けした方の投稿(ページB)に表示し、かつ(ページA)へのパーマリンクを施したい場合、(ページB)のphpテンプレートにはどのようなコードを記述すればよいのでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です