WordPressで記事URLからIDを取得し、配列に入れてループを作成、任意の記事一覧を表示する方法

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

関連する記事などを手動でやりたい場合などに向いてるかと。
Advanced Custom FieldsでURLを記入させ、それをget_fieldで取得するのがスマートかなーと思います。

  1. 任意の記事URLからIDを取得し、配列に入れる
  2. 記事IDの配列からループを作る
  3. 最終的なコード

任意の記事URLからIDを取得し、配列に入れる

urlからIDを取得するには「url_to_postid」を使います。

<?php
//URL取得
$postURL1 = get_field('postURL1');
$postURL2 = get_field('postURL2');
$postURL3 = get_field('postURL3');

//ID取得
$postID1 = $postID2 = $postID3 = '';
if($postURL1) { $postID1 = url_to_postid($postURL1); }
if($postURL2) { $postID2 = url_to_postid($postURL2); }
if($postURL3) { $postID3 = url_to_postid($postURL3); }

//配列に入れる
$postIDs = array($postID1,$postID2,$postID3);
?>

記事IDの配列からループを作る

<?php
//クエリの作成
$args = array('post_type' =>'post', 'post__in' => $postIDs, 'orderby'=>'post__in');
$query = new WP_Query($args);

//ループの呼び出し
if($query->have_posts()): while($query->have_posts()): $query->the_post();
?>
(ループ内部)
<?php
endwhile; wp_reset_query(); endif;
?>

クエリのポイント

  • 「post__in」で配列の投稿IDを含む投稿のみに絞り込み。
  • 「'orderby'=>'post__in'」で「post__in」の配列の並び順でソート。

最終的なコード

<?php
$postURL1 = get_field('postURL1');
$postURL2 = get_field('postURL2');
$postURL3 = get_field('postURL3');
$postID1 = $postID2 = $postID3 = '';
if($postURL1) { $postID1 = url_to_postid($postURL1); }
if($postURL2) { $postID2 = url_to_postid($postURL2); }
if($postURL3) { $postID3 = url_to_postid($postURL3); }
$postIDs = array($postID1,$postID2,$postID3);
$args = array('post_type' =>'post', 'post__in' => $postIDs, 'orderby'=>'post__in');
$query = new WP_Query($args);
if($query->have_posts()): while($query->have_posts()): $query->the_post();
?>
(ループ内部)
<?php
endwhile; wp_reset_query(); endif;
?>

取得IDの数が少ないのでとりあえず羅列してますが、ID取得のあたりをfor構文にするのが最もスマートかもしれませんね。

前の記事

イオンの株主優待で7,734円(お買い物金額の3%)キャッシュバック

次の記事

新画像形式「WebP」への変換と導入