WordPress の記事一覧取得コード概念

PHPのプログラムコードを使って、記事を取得する場合「get_posts」という関数を使用します。

その際「meta_query」というパラメータでフィルタリングが出来ます。

今回は、WordPress で記事一覧を取得する方法について書いてみたいと思います。


■ WordPressの記事DB構造

WordPress のデータベース構造は、記事の基本データと補足データとに分かれて管理されています。

===
【記事の基本データテーブル wp_posts】

ID  タイトル  本文  作成日時         他
01  記事A   本文A 2021-02-11 10:00:00   ...
02  記事B   本文B 2021-02-12 10:00:00   ...
03  記事C   本文C 2021-02-13 10:00:00   ...


【記事の補足データテーブル wp_postmeta】

ID  post_id   キー  値
01  01     writer 山田太郎
02  01     place  北海道
03  02     writer 佐藤花子
04  02     place  東京都
05  03     writer 菜月昴
06  03     place  千葉県

===

記事はこの2つのデータの組み合わせで形成されます。

例えば、記事Cは post_id(wp_posts の ID 列) が3番ですので、補足情報としては

・記事の筆者が「菜月昴」
・記事の取材場所が「千葉県」

のように補足情報を取得して画面に表示します。


■ 記事の一覧を表示する

さて、記事Cだけを表示するのであれば前項のように、post_id が 3 に相当する記事を wp_posts から、補足情報を wp_postmeta から取得すればOKです。

しかし、下記のような記事の一覧画面を表示したい場合はどうしたらよいでしょう。

タイトル  筆者    取材場所
記事A   山田太郎  北海道
記事B   佐藤花子  東京都
記事C   菜月昴   千葉県


この場合、get_posts という関数を使う事で、記事をまとめて取得することが出来ます。

$args = array(
          'posts_per_page' => -1,
          'offset' => 0,
          'order' => 'DESC',
          'post_type' => 'post',
          );
$all_posts = get_posts($args);

後は、all_posts を foreach でループさせながら、中身を表示すればOKです。


■ 検索機能を付ける

単純に、タイトルや本文に対する検索を行う場合、以下のように「s」というキーに対して検索したい文字を渡せばOKです。

$args = array(
          ...
          's' => '検索したい文字列',
          ...
          );
$all_posts = get_posts($args);


「検索したい文字列」の所に「A」を渡すと、「記事A」だけがヒットします。

検索でヒットするのは、部分一致になります。

つまり「検索したい文字列」の所に「記事」を渡すと、「記事A」「記事B」「記事C」すべてがヒットします。


■ 補足情報に対して検索機能を付ける

次は、補足機能に対して検索機能を付けてみます。

単純に1つの補足情報に対して検索をかける場合は以下のようにします。

下記の例では、取材地が「千葉県」のデータを取得します。

$args = array(
          ...
          'meta_key' => 'place',
          'meta_value' => '千葉県',
          'meta_compare' => '=',
          ...
          );
$all_posts = get_posts($args);

もし、筆者 もしくは 取材地 のどちらかにマッチするようにするには以下のようにします。

$args = array(
          ...
          'meta_query' => array(
                    'relation' => 'OR',
                    array(
                              'key' => 'writer',
                              'value' => '佐藤花子',
                              'compare' => '='
                    ),
                    array(
                              'key' => 'place',
                              'value' => '千葉県',
                              'compare' => '='
                    )
          ),
          ...
          );
$all_posts = get_posts($args);

これで、筆者が佐藤花子の「記事B」と、取材地が千葉県の「記事C」が取得できます。


■ 部分一致での補足情報検索

前項では「compare」に「=」を指定して、完全一致の場合にデータが取得できます。

ここを「=」ではなく「LIKE」にすることで、部分一致での検索が可能です。

また、正規表現が使える「REGEXP」があります。

この記事が気に入ったらサポートをしてみませんか?