関連記事を取得する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を追加してください。
