WordPressは非常に使いやすいのですが、直感的にはメニューにカテゴリを割り当てたいところです。いわゆるサイトメニューに当たるものは、「固定ページ」と呼ばれています。ここには、通常カテゴリを割り当てることができません。
固定ページにPHPを使ってカテゴリ内の記事一覧を表示させるようにしました。
ブログ記事「【wordpress】固定ページに特定カテゴリーの投稿一覧をプラグインなしで表示させる方法」(Kawatama.net)を全面的に参考にさせて頂きました。
PHPを記事内で利用するためのショートコード
まず、使っているテーマの中でPHPを読み込む機能をショートコードとして実装する設定をします。
管理ページの「外観→テーマの編集」で使用しているテーマの編集を行います。今、使っているテーマは「Simplicity Child」ですので、「Simplicity Child」をクリックしてテーマのための関数(function.php)を編集します。
これを行うことで、記事ファイル内部で
[[myphp file='PHPファイル名(MY.phpの場合、MY)']]
というショートコードを記載するとテーマのルート下(/public_html/wp-content/themes/テーマ名/)にあるPHPファイルを読みこんでその場所で実行してくれます。
読み込まれるPHPファイルの作成
次に、読み込まれる側のPHPファイルを作成して、テーマのルート下(/public_html/wp-content/themes/テーマ名/)にFTPを使ってアップロードします。たぶん忘れても(他の設定があるので)大丈夫ですが、パーミッションの設定(644もしくは604)を忘れずに。
//カテゴリー:news の記事一覧を取得する場合 //news.php に下記を記述(ファイル名は任意の名前) <div> <?php $blog_posts = query_posts('category_name=注1&showposts=注2'); foreach($blog_posts as $post): ?> <p><?php echo get_post_time('Y.m.d'); ?></p> <p><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></p> <?php endforeach; ?> </div>
注1:カテゴリのショートネーム(スラグ)
注2:表示させる記事数
意外と簡単!
意外と簡単ですね。偉大な先人に感謝です。
function.php内だけでも動かせそうなくらい小さいスクリプトですが、コードが汚くなるので記載されている通りに分けたほうがベターですね。
PHPのinclude関数のヘルプでは呼び出されたファイル内では、呼び出し側の変数が維持されることになっているのと、どこかで無効化されていなければ引数を渡せそうなので汎用化できる気がします。時間のあるときに試してみようと思います。
コメント