Plugin Checkで「Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution」と指摘されるのはなぜ、対策方法は

公開日:2025(令和7)年3月14日/最終更新日:

WordPress Customize Ideas | Personal WP Customization Notes (PWCN)

【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています



WP_Query()の条件としてpost__not_inを使用して特定のIDを持つ投稿や自IDを除外するケースは結構多いと思います。

でも自作プラグインなどでこのpost__not_inで条件指定したコードを作成してPlugin Checkにかけると、以下のように指摘されることがあります。

Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://wpvip.com/documentation/performance-improvements-by-removing-usage-of-post__not_in/ for more information.

上記のリンク先ページによれば、WP_Query()で現在の投稿IDを除くものを〇件抽出して出力するよりも、全件取得した中で現在の投稿IDを除く〇件を出力したほうが効率がいいとのことなのですが、どう考えても個人的に前者の方が効率がいいのでは?と思ったのでどういうことなのか調べてみました。

結論としては、クエリーをキャッシュする機能を追加した時に違いがあるというのが正確なところのようです。

要はいわゆるキャッシュ系プラグインやCDNを使用した際には、一度条件指定して取り出したデータを一定期間保存してその中から条件によって絞り込んで出力することで処理速度を速めることをするので、その場合には、後者の方が効率がいいということです。

なかなか難しいところですが、このキャッシュ機能はWordPress標準で実装されているものではないようなので、逆にキャッシュ系プラグインを使用しない場合では後者だといちいち全件を取得することになるので処理に時間がかかったり、余計に負荷がかかってしまう可能性があるかも知れないということです。

あくまで個人の見解ですが、環境の分かる自身のサイトで使用する場合や、パフォーマンスに著しい影響がない(処理して表示するまでに時間がかかったり、サーバーに異常な負荷がかかったり)場合には素直にpost__not_inを使用したほうがコードも簡潔だし、確実に除外できると思います。



Lolipop ServerMoshimo Ad x-serverMoshimo Ad

How to create a plugin | Personal WP Customization Notes (PWCN)
自分専用のプラグインを作ろう