WordPressのテーマ作成に関わりそうな情報をメモ書きしています。。
※目次をクリックすると目次の下部にコンテンツが表示されます。
この処理においてはWordPressは関与せず、WebサーバーとWordPressが生成した.htaccessの設定内容によって処理内容が決まる。
②そのURLではWordPressのコアファイルをロードしない場合、どのコンテンツをロードするか決めるための解析が必要になる。
Webサーバーは、index.phpを介してWordPressコアをロードし、ループのセットアップを開始する。
例)URLが”www.example.com/tag/loop”の場合、ユーザーが”loop”というキーワードのタグページを要求していると認識し、タグのテンプレートをロードし、”loop”というタグで保存されている投稿を選択してコンテンツを読み出し、タグページを出力する。
③WP_Queryオブジェクトのparse_query()メソッドによってURLからコンテンツの選択への変換が行われる。
WordPressはURLを解析し、クエリパラメータを抽出する。URLから抽出したすべてのクエリ文字列はWordPressに渡され、どのコンテンツを表示するか決定される。
④WordPressは、WP_Queryオブジェクトのget_posts()を使ってクエリ文字列から抽出したパラメータからMySQLデータベースのクエリへ変換し、コンテンツを取得する。
データベースから取得したコンテンツは、WP_Queryオブジェクト内に保存され、Loop内で使用されたり、同じ投稿の他の参照に対する速度向上のためにキャッシュされたりする。
⑤コンテンツが取得されるとWordPressはis_home()やis_page()などのすべてのis_条件タグを設定する。
⑥WordPressは、クエリのタイプとリターンされる投稿の数に基づいてテーマからテンプレートを取得する。
投稿の数が一つの場合は、シングル投稿用のテンプレートを利用したり、特定のカテゴリーに属する複数の投稿を表示する場合のテンプレートなど、それぞれ異なるテンプレートを使用する。
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); //loop content (template tags, html, etc) endwhile; endif; ?>
●if ( have_posts() ) :
・現在のページ上で表示される投稿また固定ページがあるかどうかチェック。
指定したタグやカテゴリーに対する投稿が存在しない場合もある。
●while ( have_posts() ) :
・表示するコンテンツが存在する限りループする。
・have_posts()で、処理している投稿のリストが終了したかチェック。
●the_post();
・投稿データを構築。他のWordPress関数がこのデータを利用できるようになる。
・setup_postdata()関数をコールし、著者やタグなどの投稿単位のメタデータをセットアップする。
・投稿データをセットアップする際、該当するフィルターを適用する。
・投稿データがセットアップされると、ショートコードをJavaScriptのコードに変換するプラグインや投稿データを変換するプラグインコールされる。
・投稿データが一度構築されると指定したフォーマットでそのデータを表示する事ができる。
●グローバル変数$wp_query
・データベースのクエリーからの出力は、特にパラメータとして変数が指定されていない場合は、グローバル変数$wp_queryを介してLoop内の関数から参照される。
・$wp_queryは、WP_Queryのインスタンス。
・Loopのデフォルトのクエリとして利用される。
・WordPressのテーマテンプレート内のLoop処理などでコンテンツを表示するPHP関数をテンプレートタグと呼ぶ。
・テンプレートタグによって簡単にPHPのコードを実行する事が出来る。
●代表的なテンプレートタグ
・the_permalink()
投稿のURLを表示
・the_title()
投稿のタイトルを表示
・the_ID()
投稿のIDを表示
・the_content()
投稿の内容を表示
・the_excerpt()
投稿の抜粋を表示。投稿編集画面のExcerptがブランクの場合はWordPressが自動生成。
・the_time()
投稿日時を表示
・the_author()
投稿の著者を表示
・the_tags()
投稿に付与されているタグを表示
・the_category()
投稿に付与されているカテゴリーを表示
・comment_form()
投稿のコメントフォームを表示
・WP_Queryはwp-includes/query.phpに定義されているクラス。
・これを利用してカスタムLoopを簡単に作成することが出来る。
・$wp_queryグローバル変数がWP_Queryのインスタンスとして利用される。
●カスタムLoopの例
<?php $myPosts = new WP_Query( 'posts_per_page=5' ); while ( $myPosts->have_posts() ): $myPosts->the_post(); echo '<li>'; the_title(); echo '</li>'; endwhile; ?>
●主なWP_Queryオブジェクトを利用する関数
・query_posts()
ページ内のLoopを書き換え、新しいクエリーのインスタンスと置き換える。
・get_posts()
最近の投稿あるいはパラメータに一致した投稿を取得