投稿記事のタイトルを取り出す

データベースの中に投稿記事に関するデータはwp_postsというテーブルに入っている。
以下のコードをテーマファイルに記述することでデータベースから欲しい項目を表示できるようになる。

 

ワードプレスのテーブル

SQL文のFROMで呼び出す際はテーブル名の接頭辞wp_を削除して用いる。

SQL文のFROMに記述する方
テーブル名 入っている内容 SQL文のFROMで呼び出す際のプロパティ名
wp_commentmeta コメント・トラックバックのメタデータ $wpdb->commentmeta
wp_comments コメント・トラックバックのデータ $wpdb->comments
wp_links リンク作成で入力したデータ $wpdb->links
wp_options 設定で入力したデータ $wpdb->options
wp_postmeta カスタムフィールドなどのデータ $wpdb->postmeta
wp_posts 投稿記事およびページデータ $wpdb->posts
wp_terms カテゴリ・タグなどのデータ $wpdb->terms
wp_term_relationships 投稿記事・ページとカテゴリ・タグなどの関連情報 $wpdb->term_relationships
wp_term_taxonomy カテゴリ・タグなどの情報 $wpdb->term_taxonomy
wp_usermeta 各ユーザのメタデータ $wpdb->usermeta
wp_users 登録ユーザ情報 $wpdb->users

wp_postsのフィールド

wp_postsテーブルの中にはいくつものフィールド(項目)が入っており、この中から欲しいデータを選んで表示させる。

SQL文のSELECTとWHEREに記述する方
フィールド名 入っている内容 備考
ID 自動的に割り振られた投稿ID
post_date 投稿日時
post_content 本文
post_title タイトル
post_status 投稿ステータス 'publish' 公開済である
guid 記事のURL
post_type 投稿種別 'post' 投稿記事である

取り出し方

複数行のレコードを取り出す場合は「get_results( )」関数を使用。
SQL文は「get_results( )」の引数に記述。
プロパティ名は基本的にテーブル名から接頭辞(デフォルトではwp_)を除いたもの。
「wp_posts」なら「posts」。
$変数 = $wpdb->get_results(SQL文);

$results = $wpdb->get_results("
    SELECT post_title // 何を取り出すか(フィールドから)
    FROM $wpdb->posts // どこから取り出すか(テーブルから)
    ");

foreach ($results as $value) { // 配列の要素を1個ずつ取り出して$valueに代入
    echo('<li>'  .$value->post_title.  '</li>');
}

条件を絞り込む

SQL文でWHEREを使い、 さらに条件を絞る場合はANDでつなげていく。
WHERE以下はフィールドから取り出す。

$results = $wpdb->get_results("
    SELECT post_title
    FROM $wpdb->posts
    WHERE post_type = 'post'        /* 投稿記事である(フィールドから) */
    AND post_status = 'publish'     /* かつ公開済の記事(フィールドから) */

    ORDER BY post_date DESC         /* 新しい順に並び替え */
    LIMIT 5                         /* 表示記事5 */
");
foreach ($results as $value) {
    echo('<li>'  .$value->post_title.  '</li>');
}

取り出すものを増やす

今回は記事タイトルに追加して記事のリンクを取り出す。
リンクはguidというフィールドに入っている。
新たに取り出す値を追加する場合はSQL文のSELECTにカンマで区切ってフィールドを追加する。

$results = $wpdb->get_results("
    SELECT post_title, guid     /* guidの値を追加(フィールドから) */
    FROM $wpdb->posts
    WHERE post_type = 'post'
    AND post_status = 'publish'

    ORDER BY post_date DESC
    LIMIT 5
");

 
foreach ($results as $value) {
    echo('<li><a href="'  .$value->guid.  '">'.$value->post_title.'</a></li>');
}

リンク表示をパーマリンクに変換する

取り出したリンクをパーマリンク表示(スラッグ名)に変換するには「get_permalink( )」関数を使用する。
引数に記事のIDを指定することで、パーマリンクを返す関数。
新たにIDを取得する必要があるので、フィールド名IDを新たにSELECTに追加する。

$results = $wpdb->get_results("
    SELECT post_title, guid, ID     /* IDの値を追加(フィールドから) */
    FROM $wpdb->posts
    WHERE post_type = 'post'
    AND post_status = 'publish'
    ORDER BY post_date DESC
    LIMIT 5
");


foreach ($results as $value) {
    echo('<li><a href="'  .get_permalink($value->ID).  '">'  .$value->post_title.  '</a></li>'); // 「$value->guid」を「get_parmalink($value->ID)」に入れ替える
}

インデックスへ戻る