web-dev-qa-db-ja.com

get_posts - クエリ文字列ががらくたでフォールバックが使用されていたかどうかを調べる

Stringをget_postsのような関数に渡し、その文字列が意味のあるクエリ文字列ではない場合(get_posts( '')など)、この関数はデフォルトのクエリの結果(最後の5つの投稿など)を返します。文字列が意味のある問い合わせ文字列だったのか、それとも関数が単にデフォルトに戻ったのか、そうではなかったのか、この振る舞いを抑制することができますか。

メインのループには影響を与えたくないので、デフォルトのquery-settingsを変更することは解決策ではなく、プラグイン内のget_postsの関数呼び出しだけにします。

1
Paflow

クエリの動作を見ると 、これは当てはまりません...

  1. 渡されたクエリ条件が投稿を返すかどうかを確認します
  2. それ以外の場合はフォールバッククエリを実行します。

何が起こるかというと、あなたの条件は非常に複雑な一連の条件を使って特定のデフォルトとマージされるということです。それの終わりに、あなたはあなたの投稿を得るために走るSQLを持っています。システムはあなたの条件が「がらくた」であるかどうかを確認してからそれを使うかどうかを決定しません。これらの条件は、有効なSQLステートメントを生成する方法でクエリにマージされるだけです。とにかく「がらくた」ではないのか、クエリがどのようにしてわかるのかわからない。

私ができると思うことはpre_get_postsにフックし、あなたが "crap"または "not crap"を決定するためにあなたが定義するいくつかの条件のセットに従って問い合わせvarsをチェックすることでしょう。

あなたが提供する特定の例に関しては、 get_postsは引数を渡さなかった場合 意図的に最新の投稿を検索するために書かれています。

ちなみにnew WP_Query('')は何も返しませんが、基本的に@ toschoのコメントでの提案に同意します - サニタイズされた文字列を渡します。送信する前に、関数に送信している内容を知ってください。文字列が空の場合、または他の要件を満たしていない場合は、get_posts関数をまったく呼び出さないでください。

2
s_ha_dum