ワイヤード・パンチ

WordPressのget_postsで、post_authorによる絞り込みが効かないときの対処法。

仕事のうえで、様々なユーザが投稿可能なサイトを制作しています。

投稿者別に記事を見ていきたいこともあるので、画面に表示させる記事一覧を投稿者ごとに絞り込みする処理を作らないといけません。

しかし、投稿者による絞り込みをするときはユーザIDを入れるのですが、それなのになぜか全件表示されてしまいます。

広告

誤っているコード。

今回はとりあえず、ユーザIDが10のユーザが投稿した記事だけ絞り込む処理を作ります。

$args = [
	"post_type" => "post",
	"post_author" => 3,
];
$posts = get_posts($args);
var_dump($posts);

しかし、実際に上記のコードを実行しても、ユーザIDが3の投稿だけじゃなく、すべてのユーザの投稿が取得されてしまいました。

post_authorにはユーザのIDを入れるはずなので、オブジェクトを入れるわけでも、文字列型にした数値を入れるわけでもなく…。

投稿タイプの問題かとおもったのですが、別の投稿タイプに変えても、全ユーザの投稿を取得してしまうことには変わらず…。

正しいコード。

$args = [
	"post_type" => "post",
	"author" => 3,
];
$posts = get_posts($args);
var_dump($posts);

正解はこれ。

get_postsの引数としてユーザIDを入れるときは、「post_author」ではなくただの「author」にするのが正しかったのです。

これでようやく、ユーザIDが3の投稿だけ取得することができました。

get_postsの戻り値で得られる記事の情報だと、ユーザIDの値が「post_author」だったので、引数のときもてっきりそれかと勘違いしていたんです。

WordPressって、こういう名前がところどころ不揃いのところが多いのが、問題だと思うんですね…。

投稿IDだって、ただの「ID」のときもあったら「post_id」のときもあったり。

かといって今変えると、多大なサイトに影響が出てしまうので、変えたくても変えられないのかもしれません。