WordPressはCMSであるため、コンテンツ操作はツールの主要な柱の1つです。 この記事では、WPが表示する必要があるものを取得するために使用されるプロセスと、このプロセスを変更する方法を理解します。
このテキストの目的は、決して公式文書に代わるものではなく、常に相談する必要があります。 あなたの目標は、彼らがより多くの情報を検索を開始する前に、初心者が知っておくべきものを一つの場所に置くことです。
ワードプレスのクエリとは何ですか?
英語のQueryはqueryを意味し、通常はSQL(Structured Query Language)のステートメントを参照するために使用される用語です。 WordPressでは、wp_queryクラスを介して行われたコンテンツのクエリをクエリと呼びます。
Wp_Queryとは何ですか?
Wp_Queryは、WordPressのコンテンツのすべての検索の背後にあるPHPクラスです。 ポストタイプ、メタデータ、分類法、日付など、いくつかのパラメータを構築することができ、カスタムパラメータを作成することが可能になります。
wp_queryクラスは、通常のフローを中断するプラグイン制御アドレスの非常にまれな例外を除いて、サイトに行われたすべての要求でトリガーされます。 ページ、投稿、分類用語などを呼び出すたびに。 WordPressは、rewrite APIを介して要求されたアドレスを解釈し、解釈された引数に基づいてWp_Queryを作成します。
条件付きタグとWp_Query
独自のループの作成:Wp_Queryとget_posts()
WordPressでループを参照するとき、選択した投稿による反復(nなし)について話しています。 通常、ループは1つだけで、常に以下のコードに似ています。
投稿がある場合は、それらを反復処理します。 while
内の最初のステートメントはthe_post()
で、wp_queryクラスのsetup_postdata()
メソッドを介して、ループの次の投稿の変数をグローバル変数$post
に入れるようにWordPressに指示します。
これは、メインループの外観、つまり、リクエストをデコードし、対応する内容を検索するときにWordPressが見つけた一連の投稿による反復です。 別の一連の投稿(関連コンテンツ、ファイル外の特定のカテゴリのコンテンツ、表示されているものの後に公開された投稿など)が必要な場合は、新しいwp_queryオブジェクトを作成するか、get_posts()関数を呼び出すという二つの方法でこれを行うことができます。 彼らは両方とも同じことをしますが、彼らはあなたに別のものを返します。
Wp_Queryでループを作成する
Wp_Queryでループを作成する方法の簡単な例:
have_posts()
のテストと反復がthe_post()
のように残っていることに注意してください。
関数wp_reset_postdata()は、グローバル変数$post
をクエリの前の状態に復元する役割を果たします。
get_posts()でループを作成する
関数get_posts()
を使用した同じ例:
関数get_the_title()は、グローバル変数$post
とは異なるpostをパラメータとして受け入れます。 たとえば、the_content()関数を使用する必要がある場合は、次のようにグローバルなものを変更する必要があります。
Wp_Queryとget_posts()の違い
基本的な違いは、アクセス権 Wp_Queryを使用すると、合計で見つかった投稿の数($query->found_posts
)と可能なページの数($query->max_num_pages
)にアクセスできます。 一方、get_posts()
関数は、デフォルトではわずかに高速であることに加えて、すでに入力された引数をいくつかもたらします。no_found_rows
パラメータをtrueとして渡し、最終クエリにSQL_CALC_FOUND_ROWS
オプションが含まれないようにし、これにより、MySQLが見つかった行の合計量を渡すことを免除します。
グローバルWordPress wp_queryとWordPress wp_the_query
要求を解釈し、wp_queryクラスオブジェクトを生成するこのプロセスでは、WordPressは二つのグローバル変数を作成します: おそらくどこかで見たことのある$wp_query
と、常にユーザーが要求したものの元のコピーになります$wp_the_query
。 誰かが$wp_query
を台無しにした場合、少なくとも$wp_the_query
で通常の状態に戻すことができます。 これはまさにwp_reset_query()関数が行うことです。
テーマファイルでquery_posts()を使用しないのはなぜですか?
これは、ダッシュボード外のサイトのアドレスへの要求のデフォルトのフローです:
以前に呼び出されたため、query_posts()を使用しないでください。 再度呼び出すことで、処理を複製し(WordPressに別のクエリを作成するように要求します)、さらにいくつかのプラグインが既に使用しているものを無視す
ページングは、query_posts()
を使用して作業を中断する方法の別の例です。 特定のカテゴリのページごとに15件の投稿を表示し、query_posts()
を介してデフォルトのWP量を上書きしようとすると、2ページ目の最初の項目が16番目になる状況がありますが、実際には11番目に過ぎません。
メインクエリを変更するには? Use pre_get_posts
usingquery_posts()
はしばらくの間お勧めできませんでした。 それ以来、多くの人が理由を説明し、開発者がアクションpre_get_postsを使用することを奨励してきました。preguetinhoという愛称を持つLeo Bahianoに特に重点を置いています(preguetinho do Leo Bahianoとの駄洒落の使用はコメントで承認されています)。
使い方は簡単です。 たとえば、検索でのページングを排除するには、テーマのfunctions.php
で次のコードを使用します :
コードはその関数をhookpre_get_posts
に割り当てるので、その関数はクエリが処理されるたびに実行されます。 その中で、必要なクエリのみに取り組むことを確認する必要があるので、実際にサイトの”フロント”部分にいるかどうかをテストします(この方法では、パ
: ブログ記事のリストからカテゴリを削除する
あなたは多くの変更が必要な場合は、単一の機能でそれらすべてを結合することができます: