コピペで簡単、関連記事を取得するsql wordpressのためのsql

関連記事を取得するsqlのコード

single.phpで使うことを想定したsqlです。
もちろんショートコード化すれば投稿時に使えます。
$post_idを渡すことで関連する記事を取得できます。
取得する内容は同じタグの記事と同じカテゴリーの記事を全て取得します。
取得する列はpost_id,post_title,term_id,taxonomyです。

$sql= '         SELECT DISTINCT wp_posts.id, wp_posts.post_title, 
                                wp_term_taxonomy.taxonomy,
                                wp_term_taxonomy.term_id
		FROM wp_posts
		INNER JOIN wp_term_relationships
		ON wp_posts.id = wp_term_relationships.object_id
		INNER JOIN wp_term_taxonomy
		ON wp_term_taxonomy.term_taxonomy_id
                   = wp_term_relationships.term_taxonomy_id
		WHERE wp_term_taxonomy.term_id
		IN	(
			SELECT wp_term_taxonomy.term_id
			FROM  wp_posts
			INNER JOIN wp_term_relationships
			ON wp_posts.id = wp_term_relationships.object_id
			INNER JOIN wp_term_taxonomy
			ON wp_term_taxonomy.term_taxonomy_id 
                           = wp_term_relationships.term_taxonomy_id
			WHERE wp_posts.id = '.$post_id.'      //投稿IDを渡す
			AND wp_posts.post_status = "publish"
			ORDER BY wp_posts.id
			)
		AND wp_posts.post_status = "publish"
		AND wp_posts.id != '.$post_id.' ';      //投稿IDを渡す

関連記事:Sqlインジェクションに対応!データベース接続クラス

取得データの返り値の参照データ例

関連記事のクラスを使ってsqlを実行すると下記のようなデータが取得できます。

Array
(
    [0] => Array
        (
            [id] => 投稿記事のID
            [post_title] => 投稿記事のタイトル
            [taxonomy] => "post_tag" 又は "category"
            [term_id] => カテゴリーID 又は タグID
        )
    [1] ......
)

補足:カテゴリー関連の記事のみ取得したい

仮にカテゴリー関連の記事だけで良いという場合は上記のsqlに追加で下記を記述します。

AND wp_term_taxonomy.taxonomy = "category"

補足:タグ関連の記事のみ取得したい

タグ関連の記事だけで良い場合も同じで

AND wp_term_taxonomy.taxonomy = "post_tag"

をsqlの一番下に追加します。

補足:並び替えたい

ORDER BY  wp_posts.id DESC //新しいものが最初にくる 降順
ORDER BY  wp_posts.id      //古いものが最初にくる  昇順

補足:取得件数を指定する

LIMIT  5  //5件取得する

追加する順番は上から順番に補足のsqlを追加してください。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする