Irvineのプログラミング備忘録
本ページはプロモーションが含まれています。
  
 

WordPressでホームページのレイアウトを変える方法(2)

 

スポンサーリンク

 
WordPressでホームページのレイアウトを変える方法(2)

Word Press のキモは、記事の検索機能と思えます。
様々な表示、表現はCSSで実現されていることが多く、いわゆるMVC理論に基づけばC,コントロールを行うモジュール群が重要な位置づけでしょう。

前回に続いて、今回は記事の表示制御方法を記します。

困ったこと:フロントページに固定情報と最新記事を併記したい

1 固定ページに専用ページを作成

前回の記事参照。

2 記事の表示制御

対策2は、好きなところに記事一覧を表示します。
好きなところ、と書いてももちろん制限はあり、記事(post)はやったことがないのでわかりません。基本は固定ページ(page)。フロントページや他の固定ページで利用できます。

記事一覧の取得は、一度は聞いたことがあるでしょう。WP_Query()で行います。

WP_Queryの書式

WP_Query()は実はかなり高機能で、CODEXでも説明がかなり書かれています。

高機能ではあっても、デフォルト値を使うことで、モジュールの利用のために膨大な準備をする、という作業は不要になります。

最小限の使い方は、下記のようになります。
[php] $the_query = new WP_Query( $args );
[/php] ここで$argsは引数で、arrayにすることで複数のパラメータを渡すことができます。
では、どういうパラメータを渡すことができるかをちょっと見て行きましょう。

WP_Queryのパラメータ指定

ところで元の話題ですが、自分はアクセスの多い記事をフロントページに表示したくてやり方を考えました。
考えた方法はまずはこの2つ。

  • 特殊なタグで指定した記事を検索する
  • 記事一覧と同等の表示を自作する

1 特殊なタグで指定した記事を検索

1つ目の方法は、例えばタグに何か指定するものを決めて、すべての表示したい記事に特殊なタグを設定します。例えば”display”とあれば、表示対象とするのです。これなら編集画面で簡単に設定できます。
これを具体的にするにはWP_Query()で渡すarrayを以下のように設定します。
[php] $args = array(
‘tag’ => ‘display’);
$wp_query = new WP_Query( $args );
[/php] これで目的を達成できますが、残念な点が3つ。

  • 記事しか対象にできない。固定ページにタグを設定できないので。
    固定ページが不要なら構いませんが。
  • 指定した特殊タグが表示、検索される
    検索欄でdisplayを検索すれば出てくるでしょう。タグ一覧にも表示されます。
  • 特殊タグを通常のタグとして使うと誤動作する
    ちゃんとルールにしておかないと、displayを使ってしまうかもしれない。一人で運用するブログでもチームで運用している場合でも。

特に1番目の問題は用途によっては致命的で、自分の場合はこの点で断念しました。

2 記事一覧と同等の表示を自作

2つ目の方法は見映えの点で論外です。cssを読み解いてそっくりにhtmlを記述すればできるかもしれませんが、メンテナンスが大変でしょう。アクセスが多い記事は月一回は見直すので、容易でないと更新できなくなります。結果的に更新がおろそかになってしまう。

このため、3番目の方法としてWP_Query()を使って表示したい記事だけを選びます。

WP_Queryのパラメータ指定

先ほどのCODEXにも記載がありますが、CODEXは書いていることの理解が難しい。ある程度中身を理解していないと意味が通じないので困ったものです。ただし中身がわかってしまうと、これ以上の情報を書いているサイトはないので、最後にはここにたどり着くことになるでしょう。

で、本題。
指定した記事だけを表示したい場合、WP_Query()の引数に下記を指定することで指定した記事、固定ページのみ検索できます。
[php]  ’post__in’ => array(記事のID),
 ’post_type’ => array(‘post’, ‘page’),
[/php] 記事のIDは編集画面のURLでpost=xxxxと書かれているところがその番号です。
記事ID 記事ID
複数個あればカンマで区切っていきます。例としてこんな風に記述します。
[php] ‘post__in’ => array(1,2,3,40,80,100),
[/php] なお、IDは記事と固定ページで重複することはないです。それから引数のタグはpost_inではなくpost__in、アンダースコアは2つあります。

2行目は検索対象を記事(post)だけでなく固定ページ(page)も対象にします。

この検索結果を定型的なコードで記述して表示させます。
最低限のコードは下記のとおりです。
[php] $args = array(
‘post__in’ => array(1,2,3,40,80,100),
‘post_type’ => array(‘post’, ‘page’));

$wp_query = new WP_Query( $args );

// The Loop
if ( $wp_query -> have_posts() ) {
while ( $wp_query -> have_posts() ) {
$wp_query -> the_post();
}
wp_reset_postdata();
}
[/php] ※エラー処理などは省略しています。

まとめ

  • 固定ページの細かい制御は専用のページをPHPで作ることができる
  • 記事一覧で表示される内容を制御したい場合は、WP_Queryの引数で制御できる
  • 例えば指定した記事、固定ページだけ表示するには、引数のpost__inパラメータに記事のIDを指定する

 

PR

   
著者プロフィール
irvine
 ソフトウェア設計、ストレージ設計を経てクラウドにかかわる仕事をしている、東京郊外在住のエンジニア。
 仕事でUS,UK,SGなどの国とかかわる。
 自作PC、スマホ、タブレット、AV機器好き。ドラクエウォークはルーチンワーク。Linuxやストレージ、IT業界の動向は興味を持っている。
 新しい機器、サービスに興味あり。年数回のレビュー(自腹購入、ご依頼)と発表されて興味があるものの新製品机上レビューをやっている。
 2022年はJAPANNEXT様のアンバサダーを務めました。 本ブログはpcdiyブログのテーマ作成の経験から得た知識を記録しています。
 
 

コメントを残す

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