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

以下からプラグイン本体をダウンロードしてインストールします。

WordPress › Posts 2 Posts « WordPress Plugins

初期設定

プラグインをインストールしたら現在使用しているテーマのfunctions.phpに下記を記述します。

functions.php

 
	function my_connection_types() {
		if ( !function_exists( 'p2p_register_connection_type' ) )
			return;
	
		p2p_register_connection_type( array( 
			'from' => 'post',
			'to' => 'page'
		) );
	}
	add_action( 'init', 'my_connection_types', 100 );
	

すると投稿記事に「Connectedページ」の欄が追加されます。

「Recent」ボタンをクリックするとページ一覧が取得されますので、関連付けしたいページのプラスボタンを押します。
これでページと記事を関連付けすることができました。

関連付けした記事&ページの表示

ページに関連付けした記事を表示してみます。
「page.php」に下記コードを記述します。

page.php

 
	$connected = new WP_Query( array(
		'post_type' => 'post',
		'connected_to' => get_queried_object_id()
	) );
	echo '<h3>このページに関連する記事</h3>';
	echo '<ul>';
	while ( $connected->have_posts() ) : $connected->the_post();
		echo '<li>';
		the_title();
		echo '</li>';
	endwhile;
	echo '</ul>';
	wp_reset_postdata();
	

次は逆に記事に関連付けしたページを表示してみましょう。
「single.php」に下記を記述します。

page.php

 
	$connected = new WP_Query( array(
		'post_type' => 'page',
		'connected_from' => get_queried_object_id()
	) );
	echo '<h3>この記事に関連しているページ</h3>';
	echo '<ul>';
	while ( $connected->have_posts() ) : $connected->the_post();
		echo '<li>';
		the_title();
		echo '</li>';
	endwhile;
	echo '</ul>';
	wp_reset_postdata();
	

関連付けした記事同士の表示

記事からページ、ページから記事の表示をしましたが、ページで関連付けされた記事同士の表示も行うことができます。
よくある「関連する記事」を手動でやる感じですね。

functions.php

 
	function get_related_posts( $post_id ) {
		$related_pages = get_posts( array(
			'post_type' => 'page',
			'connected_from' => $post_id,
			'posts_per_page' => 1,
			'suppress_filters' => false
		) );
	
		if ( empty( $related_pages ) )
			return array();
	
		return get_posts( array(
			'post_type' => 'post',
			'post__not_in' => array( $post_id ),
			'connected_to' => $related_pages[0]->ID,
			'nopaging' => true,
			'suppress_filters' => false
		) );
	}
	

page.php

 
	$related_posts = get_related_posts( get_queried_object_id() );
	echo '<ul>';
	foreach ( $related_posts as $post ) {
		setup_postdata( $post );
		echo '<li>';
		the_title();
		echo '</li>';
	}
	echo '</ul>';
	wp_reset_postdata();
	

他にもいろいろできるみたいなのでドキュメントを確認してみてください。