言語:英語※ティチュ-フランセパリ本部•Italiano•ループ。Português do Brasil•Русский•中文(简体)•中文(繁體)•(追加-言語)
のループはPHPのコードを使用WordPressを表示します。 ループを使用して、WordPressは現在のページに表示される各投稿を処理し、ループタグ内の指定された基準にどのように一致するかに応じてフォーマットします。 ループ内のHTMLまたはPHPコードは、各投稿で処理されます。
特定のテンプレートタグやプラグインなど、WordPressのドキュメントに”このタグはループ内になければなりません”と書かれている場合、タグは投稿ごとに繰り たとえば、ループでは、各投稿に対して既定で次の情報が表示されます:
- タイトル(the_title())
- 時間(the_time())
- カテゴリ(the_category())。
適切なテンプレートタグを使用するか、(上級ユーザーの場合)ループの実行中に現在の投稿の情報で設定されたpost post変数にアクセスすることで、各投稿に関す
ループの初心者の外観については、動作中のループを参照してください。
ループを使用する
ループはテーマのインデックスに配置する必要があります。phpとポスト情報を表示するために使用される他のテンプレートで。
テーマのテンプレートの上部にヘッダーテンプレートの呼び出しを含めるようにしてください。 独自のデザイン内でループを使用している場合(および独自のデザインがテンプレートではない場合)、WP_USE_THEMESをfalseに設定します:
<?php define( 'WP_USE_THEMES', false ); get_header(); ?>
ループはここから始まります:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
そしてここで終わります:
<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>
これは制御構造のためのPHPの代替構文を使用しており、次のように表現することもできます:
<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>
ループの例
いくつかのカテゴリから異なるスタイルの投稿
この例では、各投稿のタイトル(投稿のパーマリンクへのリンクとして使用されます)、カテゴ また、カテゴリIDが”3″のカテゴリ内の投稿のスタイルを変更することもできます。 これを実現するために、in_category()テンプレートタグが使用されます。 コメントを注意深く読んで、コードの各部分が何をしているのかを確認してください。
注:すべてのHTMLコードは<の外側になければなりませんか?php?> そして、PHPコード(中括弧:}のような単純なものでさえ)は<の中になければなりませんか?php?> 上記の例に示すように、PHPコードのブロックを開始および停止して、IF文およびelse文内にHTMLコードを散在させることができます。
一部のカテゴリから投稿を除外
この例では、特定のカテゴリまたはカテゴリが表示されないようにする方法を示します。 この場合、カテゴリ3と8の投稿は除外されます。 この例は、クエリ自体に変更を加えるという点で、上記の例とは異なります。
注:メインページにこの例を使用する場合は、カテゴリアーカイブに別のテンプレートを使用する必要があります。 ただし、同じテンプレートファイルを使用する場合は、is_home()タグを使用して、カテゴリ3とカテゴリ8の投稿がメインページからのみ除外されるようにす:
...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...
要求されたページに関して特定の条件が真であるかどうかに応じて、出力を制御するために使用できる他の条件付きタグがあります。
オブジェクト指向
ループは、オブジェクト指向とグローバルな動作の組み合わせです。 これは最初は混乱しています。
ループのための二つの重要なグローバル変数は次のとおりです:
- $wp_queryクラスWp_Queryのオブジェクトであり、WPデータベースクエリの結果を保持し、その中にposts wp_query->posts、個々のWp_Postsの配列。
- W postクラスWp_Postの現在のオブジェクト
覚えておいてください:すべてのテンプレートタグはデフォルトで$postグローバル変数に依存し、the postグローバル変数はthe wp_queryグローバル変数からデータを取得するthe_post()によって設定/変更されます。 secondary postはまた、Wp_Query::the_post()によって二次ループで使用されるように設定/変更されます。
複数のループ
このセクションでは、ループの高度な使用について説明します。 それは少し技術的ですが、それはあなたを怖がらせてはいけません。 簡単な例から始めて、そこから作業します。 少し常識、忍耐、そして熱意で、あなたも複数のループを行うことができます。
まず、なぜ複数のループを使いたいのですか? 一般的に、答えは、ある投稿グループで何かをし、別の投稿グループとは異なる何かをしたいが、両方のグループを同じページに表示したいということです。 “何か”はほとんど何かを意味する可能性があります; あなたはあなたのPHPのスキルとあなたの想像力によってのみ制限されます。
以下の例に入りますが、最初に基本について読む必要があります。 基本的なループを見てみましょう。 それはから成っています:
<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>
Do stuffについて少し脇に:この例では、ページ上の各投稿の書式設定と表示方法を決定するコードの束のプレースホルダーです。 このコードは、WordPressの外観に応じて変更できます。 キューブリックのテーマのインデックスを見ると。php do stuffセクションは以下のすべてになります:
<?php while ( have_posts() ) : the_post(); ?>
上へ:
<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>
そこにあるコーダーの説明:have_posts()とthe_post()は、すべてのアクションがあるグローバルな$wp_queryオブジェクトの便利なラッパーです。 Blog wp_queryはブログヘッダーで呼び出され、GETとPATH_INFOを介して入力されるクエリ引数が供給されます。 P wp_queryは引数を取り、投稿の配列になるDBクエリを構築して実行します。 この配列はオブジェクトに格納され、ブログヘッダーに返され、グローバルな$posts配列に詰め込まれます(古いpostループとの下位互換性のため)。
WordPressがブログヘッダーの読み込みを完了し、テンプレートに下降すると、ポストループに到着します。 Have_posts()はpost wp_query->have_posts()を呼び出すだけで、ループカウンタをチェックしてpost配列に投稿が残っているかどうかを確認します。 そして、the_post()はloop wp_query->the_post()を呼び出し、ループカウンタを進め、グローバルpost post変数とすべてのグローバルpostデータを設定します。 ループを使い果たしたら、have_posts()はfalseを返し、完了です。
ループの例
以下は、複数のループを使用する3つの例です。 複数のループを使用するための鍵は、p wp_queryは一度だけ呼び出すことができるということです。 これを回避するには、rewind_posts()を呼び出すか、新しいクエリオブジェクトを作成することによって、クエリを再利用することができます。 これについては、例1で説明します。 例2では、変数を使用してクエリの結果を格納する方法について説明します。 最後に、”アクションで複数のループ”は、あなたのブログのホームページ上の特定のカテゴリの投稿を促進するために複数のループを使用しての一つの方法を文書化するために一緒にアイデアの束をもたらします。
複数のループ例1
同じクエリをもう一度ループするには、rewind_posts()を呼び出します。 これにより、ループカウンタがリセットされ、別のループを実行できます。
<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>
元のクエリの投稿が終了し、別のクエリを使用する場合は、query_posts()を呼び出してループバックすることで$wp_queryオブジェクトを再利用できます。 Query_posts()は、新しいクエリを実行し、新しいposts配列を構築し、ループカウンタをリセットします。
元のクエリを保持する必要がある場合は、新しいクエリオブジェクトを作成できます。
複数のループ例2
複数のループを使用する別のバージョンは、have_posts()とthe_post()を使用できないことを回避するための別のタックを取ります。 これを解決するには、元のクエリを変数に格納し、それを他のループに再割り当てする必要があります。 このようにして、すべてのグローバルに依存するすべての標準関数を使用できます。
例:
注:PHP5では、オブジェクトはPHP4のように”=”ではなく”=clone”演算子で参照されます。 例2をPHP5で動作させるには、次のコードを使用する必要があります:
ただし、この2番目の例はWordPress2.1では機能しません。
動作中の複数のループ
複数のループの使用方法を理解する最良の方法は、実際にその使用例を示すことです。 おそらく、複数のループの最も一般的な使用法は、1つのページに2つ(またはそれ以上)の投稿リストを表示することです。 これは、ウェブマスターが書かれた最新の投稿だけでなく、特定のカテゴリからの投稿も特集したいときによく行われます。
すべての書式設定とCSSの問題はさておき、私たちは二つの投稿のリストを持っていると仮定しましょう。 最新の投稿(最近追加された標準の10件の投稿)を一覧表示するものと、カテゴリ”おすすめ”の投稿のみを含むものがあります。 “おすすめ”カテゴリの投稿は、最初に表示され、その後に投稿の第二のリスト(標準)が続きます。 キャッチは、ポストは両方のカテゴリに表示されるべきではないということです。
ステップ1. “注目”カテゴリから一つだけの投稿を取得します。
英語では、上記のコードは次のようになります。
set my my_queryは、カテゴリがfeaturedという名前のすべての投稿を照会した結果に等しく、ところで、私に1つの投稿 また、変数do do_not_duplicateを、返された単一の投稿のID番号に等しく設定します。 Do stuff行は、取得した投稿に関連するすべての書式設定オプションを表していることを思い出してくださ
同じ投稿が両方のリストに表示されないようにするには、次のステップで$do_not_duplicateの値が必要であることに注意してください。
ステップ2。 2番目のループは、Xの最新の投稿を取得します(1つを除く)。
次のコードは、最初のループから既に表示されているものを保存し、Do stuffに従って表示します(WordPressの設定で定義されている)X最近の投稿を取得します。
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>
英語では、上記のコードは次のようになります。
すべての投稿を取得し、投稿がpost do_not_duplicateに等しい場合は何もしません(continue)、そうでない場合はDo stuffに従って他のすべての投稿を表示します。 また、キャッシュを更新して、タグ付けとキーワードプラグインがうまくいくようにします。 リコール、do do_not_duplicate変数は、すでに表示された投稿のIDが含まれています。
最終結果
ここでは、コードの最後の部分は、任意のフォーマットなしでどのように見えるかです。
最終結果は、二つのリストを持つページになります。 最初のリストには、”機能”カテゴリの最新の投稿が一つだけ含まれています。 2番目のリストには、最初のリストに既に表示されている投稿を除いて、X最近の投稿(WordPressの環境設定で定義されています)が含まれます。 そのため、機能の投稿が新しいものに置き換えられると、前の機能が下の標準投稿リストセクションに表示されます(表示する投稿の数と投稿頻度に この技術(または同様の)は、家のための別の外観を作成するために、テンプレート階層の知識と一緒に多くの人によって使用されてきました。phpとインデックス。php。 このページの下部にある関連リソースを参照してください。
最初のカテゴリに複数の投稿のための注意
posts_per_page=2以上の場合は、コードを少し変更する必要があります。 変数do do_not_duplicateは、単一の値ではなく配列に変更する必要があります。 それ以外の場合、最初のループは終了し、変数do do_not_duplicateは最新の投稿のidのみと等しくなります。 これにより、2番目のループで重複した投稿が発生します。 この問題を解決するには、
を
に置き換えます。”posts_per_page”は任意の数にすることができます。これにより、array do_not_duplicateが配列に変更されます。 次に、
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>
を
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>
に置き換えます。posts_per_pageが(この場合は2)に設定されている場合は、パターンを続行します。
または、entire do_not_duplicate配列全体をpass wp_queryに渡すことができ、条件に一致するエントリのみが返されます:
<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
文字列の代わりに、クエリパラメータはpost__not_inオプションを設定する連想配列であったことに注意してください。
ネストされたループ
ネストされたループは、最初のループを終了する前に第二のループを実行していることを意味します。 これは、例えば、ショートコード付きの投稿リストを表示するのに便利です。
$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();
いくつかのグローバル変数が再び正しい値を保持するように、ネストされたループの後にメインループデータをリセットする必要があります。
ソース
複数のループに関するセクションは、Hackersメーリングリストのループに関するRyan BorenとAlex Kingの議論の組み合わせです。 ネストされたループの例は、メーリングリストに関する別の議論とNicolas Kuttlerによる投稿に触発されました。
リソース
- WordPress Wp_Queryジェネレータ
- ループに入る-(スライド)プラグインやテーマがループを変更する方法の紹介
- WordPressカスタムループ
- WordPress Wp_Queryループジェネレータ
関連
ループについての詳細
- article:The Loop In Action
- Article:テンプレートタグ
- Article:The Loop In Action
- Article:テンプレートタグ
- Article:The Loop In Action
- Article:The Loop In Action
- Article:The Loop In Action
- Article:The Loop In Action
- Article:The Loop In Action<:>
記事
- 記事:ループ-WordPressループ内でのクエリの使用の基本的な概要。
- 記事:クエリの概要-どのクエリがWordPressを生成するかを決定する方法の説明。
- 記事:フックを使用したクエリのカスタマイズ
- 記事:カスタムを使用したMYSQLクエリの表示
- 記事:分類法に関する高度なクエリのビルド
- 記事:オフセットとページネーションを使用したカスタムクエリのビルド
コードドキュメント
- クラス: Wp_query-クラスの詳細な概要Wp_Query
- Class:Wp_Comment_Query-コメント関連クエリのクラス
- Class:Wp_User_Query-ユーザー関連クエリのクラス
- Object:$wpdb-$wpdbオブジェクトの使用の概要
- Function:set_query_var()
- Function:set_query_var()
- Function:set_query_var()
- Function:set_query_var()
- Function:set_query_var()
- Function:set_query_var()
- Function:set_query_var()
- 関数:Get_Query_Var()
- 関数:Query_posts()-追加のカスタムクエリを作成
- 関数:Get_post()-項目のidを取得し、その記事のデータベース内のレコードを返します
- 関数:Query_posts()-追加のカスタムクエリを作成
- 関数:Get_post()-項目のidを取得し、その記事のデータベース内のレコードを返します
- 関数: get_posts()-項目の配列を返す特殊関数
- 関数:get_pages()-ページの配列を返す特殊関数
- 関数:have_posts()-クエリが記事を返したかどうかを決定する条件
- 関数:the_post()-クエリの後にループを自動的に設定するために使用される
- 関数:rewind_posts())-現在のループをクリアする
- function:setup_postdata()-ループ内の単一のクエリ結果のデータを設定する
- function: wp_reset_postdata()-前のクエリを復元します(通常は別のループ内のループの後)
- Function:wp_reset_query()
- Function:is_main_query()-変更されているクエリがメインクエリだけであることを保証します
- Action Hook:pre_get_posts-実行される前にWordPressのクエリを変更します
- Actionフック:the_post-クエリの後にポストオブジェクトを変更
- フィルタフック:found_posts-オブジェクトの値を変更found_posts wp_query