SQLを使わずにWordPressデータベースをクエリする方法(カスタムフォーマットでカテゴリ内のすべての投稿をリストする方法)
最近、Web サイトで公開したすべてのチュートリアルのリストを取得したいと考えました。
wp-admin でこれを行うことは可能でしたが、ページにコピー&ペーストできるものを作りたかったのです。ダッシュボードから操作すると、タイトルとリンクを一つ一つコピー&ペーストする必要があり、膨大な作業量になってしまいます。
最初はSQLでデータベースをクエリしてhref付き記事のタイトルリストを出力するスクリプトを書こうと思いました。しかし、数分調べてみると、これは間違ったアプローチだと分かりました。WordPressのデータベースをクエリするのにSQLを書く必要なんてないはずです。WordPressのコードを使う方がずっと簡単です。
実際、とても簡単なので、約30分で作業を完了できました。WordPressのコードを1行も書いたことがない状態から、わずか30分で望み通りのレポートを作成できたのです。
見てみましょう!
WordPress ディレクトリのルートに次のような .php ファイルを作成します。
<html>
<本文>
<?php
__DIR__ . '/wp-blog-header.php' が必要です。
$the_query = 新しい WP_Query( 配列(
'category_name' => 'チュートリアル',
'nopaging' => true
) );
echo '見つかった投稿' . $the_query->found_posts . '<br />';
もし $the_query->have_posts() であれば {
echo "<ul>\n";
$the_query->have_posts() の間 {
$the_query->the_post();
echo '<li><a href="' . get_permalink() . '">' . esc_html( get_the_title() ) . "</li>\n";
}
echo "</ul>\n";
} それ以外 {
esc_html_e( '申し訳ございません。条件に一致する投稿はありませんでした。' );
}
?>
</本文>
</html>実際に見ていきましょう。この行はWPライブラリを読み込みます。
__DIR__ . '/wp-blog-header.php' が必要です。
準備ができたら、WP_Query を使ってクエリを作成します。WordPress Codexリファレンスに詳細が記載されています。今回のケースでは、category_name(「tutorials」)でクエリを実行し、「nopaging」を有効にしています。「nopaging」を無効にした場合、最初の結果セットのみが返されます。「nopaging」を true に設定すると、セット内のすべての結果が返されます。
echo '見つかった投稿' . $the_query->found_posts . '<br />';
見つかった結果の数を報告します。
さて、ループを開始します。これはWordPress用語で「foreach post found」という大きなループを意味します。これをテストでラップして、投稿がいくつかあることを確認し、核となる部分を作ります。
$the_query->have_posts() の間 {
$the_query->the_post();
echo '<li><a href="' . get_permalink() . '">' . esc_html( get_the_title() ) . "</li>\n";
}このコードは、「クエリによって返された各投稿(「while」)について、投稿をオブジェクトとして取得し、それを使用する」という意味です。the_post() はクエリから次の投稿を取得し、それを現在のコンテキストに配置するため、関数 get_permalink() と get_the_ttitle() は目的の結果を返します。
とても簡単です!