WordPressで記事URLからIDを取得し、配列に入れてループを作成、任意の記事一覧を表示する方法
関連する記事などを手動でやりたい場合などに向いてるかと。
Advanced Custom FieldsでURLを記入させ、それをget_fieldで取得するのがスマートかなーと思います。
任意の記事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構文にするのが最もスマートかもしれませんね。
MovableType/WordPressを使ったホームページ制作、機能追加や設置代行などの改修、システム開発、サイトの保守を手掛けております。
アナタが実現させたい機能、やりたい事をお聞かせいただけませんか? そのイメージを一緒に実現しましょう!
お問い合わせは以下のページから!!