「ショートコード」タグアーカイブ

カテゴリー別全投稿タイトル一覧の固定ページを追加

全記事のタイトルを見ることができるサイトマップみたいなものが欲しかったのですが、単にタイトルを全部並べただけでは非常に見難い。
希望を満たせるものがないか少し探してみましたが、作った方が早いんじゃないかと思い作りました。
今回はタグではなくカテゴリーを使った投稿タイトル一覧にしました。

動きとしては、まず親カテゴリーを取得し、親カテゴリーに属している投稿のタイトル一覧を作成します。
但し親カテゴリーの子カテゴリーに属していた場合は一覧に含みません。
更に親カテゴリの下には属する子カテゴリを表示し、その子カテゴリに属する投稿のタイトル一覧を作成します。
(今回は対象の子カテゴリーは親カテゴリーの1階層下までとしました)
文章で書くと分かりにくいですが、私の固定ページを見て頂ければ直ぐに分かるかと思います。
コンテンツ一覧

まずwp-content/themes/all_contents.phpというファイルを作成して以下の内容を記述して保存します。


<?php
// 親カテゴリーを取得
$top_categories = get_categories(array('parent' => 0, 'orderby' => 'term_order'));
// 親カテゴリー分ループ
foreach($top_categories as $top_category) :
	// 親カテゴリーのリンク作成 ?>
	
	
    <?php // 親カテゴリーに紐づく子カテゴリーを取得し、親カテゴリーに所属している且つその子カテゴリーに所属していない投稿を取得 $category_ids = strval($top_category->cat_ID); $child_categories = get_categories(array('child_of' => $top_category->cat_ID, 'orderby' => 'term_order')); foreach($child_categories as $child_category) : $category_ids = $category_ids . ',-' . strval($child_category->cat_ID); endforeach; // 投稿の取得 $posts = get_posts(array('category' => $category_ids, 'posts_per_page' => -1, 'orderby' => 'date', 'order' => 'ASC')); foreach($posts as $post) : setup_postdata( $post ); // 投稿分ループ ?>
  • <?php the_title(); ?>
  • <?php endforeach; wp_reset_postdata();?>
<?php // 子カテゴリーのリンクを作成 $child_categories = get_categories(array('child_of' => $top_category->cat_ID, 'orderby' => 'term_order')); foreach($child_categories as $child_category) :?>
    <?php // 投稿の取得 $posts = get_posts(array('category' => $child_category->term_id, 'posts_per_page' => -1, 'orderby' => 'date', 'order' => 'ASC')); foreach($posts as $post) : setup_postdata( $post ); // 投稿分ループ ?>
  • <?php the_title(); ?>
  • <?php endforeach; wp_reset_postdata();?>
<?php endforeach; ?> <?php endforeach; ?>

これだけでは固定ページから呼び出せませんので、テーマのfunction.phpに以下の内容を追記します。

/*
* コンテンツ一覧のphpファイルを読み込むショートコード
*/
function include_all_contents_php( $atts ){
	ob_start();
	get_template_part('../all_contents'); // ../all_contents.phpを読みこみ
	return ob_get_clean();
}
add_shortcode( 'include_all_contents', 'include_all_contents_php' );

これはショートコードと呼ばれる方法で、PHPを投稿や固定ページから呼び出せるようにするものです。
投稿や固定ページには基本的にPHPを記述することはできませんが、このショートコードを利用することで簡単に呼び出せるようになります。

あとは固定ページで[include_all_contents]と書けば呼び出せます。
※そのまま書いてしまうと呼び出されてしまうため、上では[]を全角文字で書いてますので半角に置き換えてください。

尚、「Category Order and Taxonomy Terms Order」プラグインを使用してカテゴリーを並び替えている場合は、その並び替えた順番でカテゴリーが生成されます。