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