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テーブルが追加されます。
使い方
紐付け方
接続してみます。まずは、サンプルページ(固定ページ)から、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で詳しく解説されています。
コメント
コメント一覧 (3件)
[…] Posts 2 Postsプラグインで、投稿やカスタム投稿タイプ、ユーザを相互に関連付ける(ひも付ける) が詳しいのでそちらを参照してください。 […]
[…] Posts 2 Postsプラグインで、投稿やカスタム投稿タイプ、ユーザを相互に関連付ける(ひも付ける) […]
Posts 2 Postsの実装で貴サイトのページを参考にさせていただきました。ありがとうございます。
ひとつ解決できない箇所があり、厚かましく存じましたが、コメントさせていただきました。
関連付けされた投稿(ページA)が持つ、あるカスタムフィールドの値(X)を取得し、それを関連付けした方の投稿(ページB)に表示し、かつ(ページA)へのパーマリンクを施したい場合、(ページB)のphpテンプレートにはどのようなコードを記述すればよいのでしょうか?