WordPressカスタマイズ事例

タイトルだけはあるけどまだ中身の存在しない、見られたくない記事も含めて記事一覧を出したいときの小技

たとえば「不動産サイトで、○○線の全駅を一覧表示にしておいて、駅名をクリックしたらその駅の物件を出すようなことをしたい。ただ、ある駅には物件がまだない。でも体裁上、物件がない駅もグレーアウトとかして表示だけはさせておきたい」

はたまた、たとえば「ゲーム紹介サイトで、キャラクターの一覧表示をして、キャラクター名をクリックしたらそのキャラクターの詳細を出したい。まだ登場していないけどこれから登場するキャラクターがすでに決まっていて、そのキャラクターもキャラクター名だけでもユーザーに知らしめたいので、一覧には出しておきたい」

こういったケースありますよね。

不動産サイトを例に挙げてWordPressで実装してみましょう。

小技チックなことをします。

① 全駅分の記事を登録します。ただし、物件がない駅は「非表示」設定で登録します。
② そのうえで、駅一覧を出力するarchive.phpに次のように記述します。

$the_query = new WP_Query(array(
    'post_status' => 'any',
    'post_type' => 'post',
    'category_name' => 'station', //カテゴリスラッグ
    'posts_per_page' => -1,
));

if ($the_query->have_posts()) {
    $html = '<ul>';
    while ($the_query->have_posts()) {
        $the_query->the_post();

        $status = get_post_status($post->ID);
        $post_title = str_replace('非公開: ', '', get_the_title());

        if ($status != 'publish') {  //非公開記事はタイトルだけ、リンク無し
            $html .= '<li>' . $post_title . '</li>';
        } else {  //公開記事はタイトルリンクからリンク
            $html .= '<li><a href="' . get_the_permalink() . '">' . $post_title . '</a></li>';
        }

    }
    $html .= '</ul>';
}
wp_reset_query();

ポイントは2行目と14行目です。
2行目で

'post_status' => 'any',

とすることで記事が公開だろうが非公開だろうが取得します。
14行目では、

$post_title = str_replace('非公開: ', '', get_the_title());

として、非公開記事のタイトルに自動でついてしまう「非公開: 」という文字列を削除します。
 
いかがでしょう。
小技ですが、WordPressの記事の公開/非公開のステータス機能を利用した、
「タイトルだけはあるけどまだ中身の存在しない、見られたくない記事も含めて記事一覧を出す」方法です。


関連するWordPressカスタマイズ事例