WordPressで$wpdb->postsにアクセスして下書き中の投稿タイトルを一覧表示する
書きかけの投稿は、下書きとして保存するのが一般的です。

当然、下書きにした投稿は、最新の投稿一覧などには表示されません。

投稿は完成してから見てもらえば良いのですが、「今、こんな記事を書いてます!」とお伝えする目的で、下書き中の投稿のタイトルだけでもチラっと見せることができれば、完成するまでに読者の興味を引いたり、見込み客をつなぎ止めることができるかもしれません。
下書きのタイトルを画面に表示するには、sidebar.phpやcontent.phpなどのテンプレートの中でSQLを実行して、下書きデータを直接取得する方法があります。
WordPressデータベースを直接操作するということです。
コードの例は次のようになります。ここではsidebar.phpの中に記述しています。
<aside> <h3 class="widget-title">【現在、執筆中です!】</h3> <ul> <?php $sql = "SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'draft' ORDER BY post_date DESC LIMIT 3"; $rows = $wpdb->get_results($sql); foreach ($rows as $row) { echo "<li>$row->post_title</li>"; } ?> </ul> </aside>
いくつかの命令を説明します。
- SELECT * FROM $wpdb->posts … --- 投稿データが格納されているテーブルからデータを取得します。
- WHERE post_type = 'post' AND post_status = 'draft' --- 取得する条件は、下書き(draft)の投稿(post)です。
- ORDER BY post_date DESC --- 日付の新しい順に …
- LIMIT 3 --- 3件を取得します。
- $rows = $wpdb->get_results($sql); --- WordPressデータベースに対してそのSQL($sql)を実行して、結果を$rowsに格納します。
- foreach( … ) --- 取得した3件のデータを反復処理(一覧表示)します。
- echo "<li>$row->post_title</li>"; --- 投稿タイトルを表示します。
実行すると、下書きのタイトルが一覧表示されます。もちろん、内容は見られません。

完成した投稿は、このリストから消えて、最新の投稿一覧から参照できるようになります。