🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3385閲覧

WP:記事取得の際に post__in に空配列を入れると、全ての記事が取得されるのはなぜ?

ringorin

総合スコア40

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/11/29 18:31

###質問
WordPressのWP_Queryで記事を取得する際、post__inに空配列を入れると全ての記事が取得されるのはどういう理屈ですか?

###例
例えば次の場合だと1と2が取得されるのに対して
'post__in' => [1,2],

次の場合だと全てが取得されるって、整合しないと感じるのですが…
'post__in' => [],

なぜこんな仕様なのでしょうか?

###特に困ること
例えば$post_idsという配列があったとして、

'post__in' => $post_ids,

とすると、もし$post_ids[]のときにすべてが取得されてしまうので、次のようにしてわざわざ存在しないIDである[0]を指定しなければならないという点が特に不満です。

args['post__in'] = $post_ids ?? [0];

###まとめ
なぜ空配列を指定するとすべての記事が取得される仕様なのでしょうか?
何か利便性があるのでしょうか?
またはある理屈によって仕方なくこうなっているのでしょうか?
あと[0]を指定する以外にいい方法があればそれも伺いたいです。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Takumiboo

2019/11/30 02:21

検索して引っ張ってくるというより、フィルターだと思えば納得できますかね。何もフィルターをかけなければすべてが出てくる、post_idでフィルタをかければ該当のもののみ出てくる。
Takumiboo

2019/11/30 02:23

また逆のアプローチで、すべての投稿を出したいときに、すべてのpost_idを指定するのは不可能ですよね。そう考えると、何も指定しないときは全て出るという方が理にかなっていると考えられます。
ringorin

2019/11/30 07:41

フィルターというお考えに大変納得いきました。ありがとうございました。
guest

回答1

0

ベストアンサー

仕様ですね。
Ticket #28099にてそのあたりのやり取りをしているようです。(未確認)

【WP_Query | Class | WordPress Developer Resources】
https://developer.wordpress.org/reference/classes/wp_query/#post-page-parameters

NOTE: Ticket #28099: Passing an empty array to post__in will return has_posts() as true (and all posts will be returned). Logic should be used before hand to determine if WP_Query should be used in the event that the array being passed to post__in is empty.

投稿2019/11/29 18:51

kei344

総合スコア69596

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Takumiboo

2019/11/30 02:20

空検索をしたらすべてが出てくるって、割と一般的によくある実装な気もするんですけどね。
ringorin

2019/11/30 07:41

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問