0
WordPressで投稿情報の取得方法    第6回ゆるふわ勉強会
プロフィール                             • Yuu / Yuji Tsukaguchi                             • Web Designer                     ...
WordPressで投稿情報の取得
投稿の基本項目とタグ     項目                表示用関数タグ                  フィールドタイプタイトル        <?php the_title();?>             テキストフィールド本文...
表示させるために• タグだけを張っても、「え、それどこの記事の  タイトルなの?」ってなります。• 記事が1000件あったとしたら、どれを表示する  とか、どれだけ表示するとか条件を指定してあ  げなければなりません。• WordPressでは...
最新記事10件のタイトルと内容を表示する
投稿情報を読み込む<?php the_post();   // 投稿情報を読み込む?>
読み込んだ情報を表示させる<?php the_post();      // 投稿情報を読み込む the_title();     // タイトルを表示する the_content();   // 本文を表示する?>
記事が投稿されているか調べる<?php have_posts();    // 投稿があるか調べる the_post();      // 投稿情報を読み込む the_title();     // タイトルを表示する the_content(...
if文を使おう<?php if ( have_posts() ) {     //   記事があったらここの記述が表示 } else {     //   なかったらここの記述が表示される }?>
調べた結果で表示を変える<?php if ( have_posts() ) {   // 記事があったら     the_post();     the_title();     the_content(); } else {         ...
調べた記事分を繰り返す<?php if ( have_posts() ) {     while ( have_posts() ) { // 記事あるだけ繰り返す      the_post();         the_title();   ...
ループ完成<?php if ( have_posts() ) {     while ( have_posts() ) {         the_post();         the_title();         the_content...
PHPの記述を分ける<?php                                       分かりやすいように、  if ( have_posts() ) { ?>             カッコの後ろなどに     <?php...
ちょっと整理する<?php if ( have_posts() ) { ?>    <?php while ( have_posts() ) { the_post(); ?>             <h2><?php the_title();...
WordPressの書き方に倣う<?php if ( have_posts() ) : ?>    <?php while ( have_posts() ) : the_post(); ?>            <h2><?php the_t...
ループ完成<?php if ( have_posts() ) : ?>    <?php while ( have_posts() ) : the_post(); ?>            <h2><?php the_title(); ?> ...
ここまでのまとめ• ここまでがWordPressのメインループと  呼ばれる記述部分• 次のページからは、メインループの表示  条件を変えたり、表示する条件を変えて  ループを複数作りたい場合の変更方法
表示条件を変更しようWordPressでは、$wp_query の値を変更することで、表示する条件を変えることができます。
表示条件の変更方法• query_posts関数を使う• get_posts関数を使う• WP_Queryクラスを使う• クエリーの改変 – pre_get_postsとis_main_query(WP3.3以上)
query_posts関数
query_postsとは? query_posts は WordPressループ(メインループ)で表示される投稿 を変更するために使います。• 使用例  – 指定した期間の投稿すべてを表示する。  – 投稿の表示順序を変更する。• 指定できる...
query_posts<?php  $args = array( ここに条件書く );           // ループ条件を書く  query_posts( $args ); ?>            // ループ条件セット<?php if...
query_postsの注意点• query_postsは、表示条件を上書き処理している。• ページ送りのナビゲーションやカテゴリ選択を無効化し  てしまう。query_postsの引数に、$query_stringを与  えれば無効化された情...
get_posts関数
get_postsとは?get_postsは、複数のループ(マルチループ・サブループ)を作成するために使います。• 使用例     – query_postsループ以外のループを作成する     – 現在の記事の添付ファイルを表示する• 指定で...
get_posts<?php   $args = array( ここに条件書く );            // ループ条件を書く                                        // ループ条件セット   $my...
get_postsの注意点• get_postsはグローバル変数$wp_queryを上書  きをせずに、新たなクエリーを作成する• query_postsと初期値の値が異なる – suppress_filtersの初期値がtrue – igno...
WP_Queryクラス
WP_Queryクラスとは?•   WP_Query は wp-includes/query.php に定義されているクラスで、WordPress    ブログへの複雑なリクエストを取り扱います。 wp-blog-header.php (バージ...
WP_Queryクラス<?php  $args = array( ここに条件書く );  $my_query = new WP_Query( $args ); ?><?php if ( $my_query->have_posts() ) : ?...
クエリーの改変pre_get_postsとis_main_query
デフォルトの表示条件の変更• メインループしか使わない場合かつ、その表示を変えた  い場合は、query_postsを使わずに、pre_get_posts  アクションを使う。• is_main_queryで条件判定することにより、アクション ...
functions.phpに追記例)カテゴリーアーカイブだったら表示する件数を5件にするfunction category_display_five_articles( $wp_query ) {   if ( $wp_query->is_ma...
ここまでのまとめ• メインループの条件を変更するなら、query_postsを使う• メインループ以外にループがあるなら、get_postsを使う• メインループしかそもそも使わないのであれば、query_postsは使  わずに、pre_ge...
query_postsとget_postsの違い  メインループとサブループ
メインループという箱がありました。この箱の色は白色です。この箱の色を赤色に塗り替えたい。そう願ったある日のこと。
query_postsメインループを塗るための専用筆「query_posts」を貰いました。
箱はめでたく赤色に染まりました。
箱を違う色で量産したいと思いましたが、query_postsは使い切りなので、新しい箱と筆が必要になりました。
get_posts新しい箱「サブループ」を塗るための専用筆「get_posts」を貰いました。
get_postsという筆を使って色を塗りました。しかもこの筆は、何度でも使うことができます。
いろいろな箱が量産できました
おしまい
Upcoming SlideShare
Loading in...5
×

WordPressで投稿記事情報の取得方法

16,486

Published on

第6回ゆるふわ勉強会。メインループとサブループ。

Transcript of "WordPressで投稿記事情報の取得方法"

  1. 1. WordPressで投稿情報の取得方法 第6回ゆるふわ勉強会
  2. 2. プロフィール • Yuu / Yuji Tsukaguchi • Web Designer Community • WordBench 東京 at GMO(STAFF) • Movable Type Developer Meet upTwitter : regret_raym Tokyo 2012(LT)blog : creator-life.net • WordCamp Tokyo 2012 (Session&Handson)
  3. 3. WordPressで投稿情報の取得
  4. 4. 投稿の基本項目とタグ 項目 表示用関数タグ フィールドタイプタイトル <?php the_title();?> テキストフィールド本文 <?php the_content();?> テキストエリア抜粋 <?php the_excerpt(); ?> テキストエリアタグ <?php the_tags(); ?> テキストフィールドカテゴリ <?php the_category?> チェックボックスサムネイル画像(アイキャッチ) <?php the_post_thumbnail(); ?> 参照フィールドファイル名(ス <?php echo $post- テキストフィールドラッグ/slug) >post_name; ?>公開日付 <?php the_date(); ?> テキストフィールド※抜粋、サムネイルなどは予め、テーマのfunctions.phpで機能を有効化する必要があります。※実際はif文や、変数に入れたり使いまわしたりするので、上記以外にもタグはいっぱいあります。
  5. 5. 表示させるために• タグだけを張っても、「え、それどこの記事の タイトルなの?」ってなります。• 記事が1000件あったとしたら、どれを表示する とか、どれだけ表示するとか条件を指定してあ げなければなりません。• WordPressでは表示するために、ループ処理を 書く必要があります。
  6. 6. 最新記事10件のタイトルと内容を表示する
  7. 7. 投稿情報を読み込む<?php the_post(); // 投稿情報を読み込む?>
  8. 8. 読み込んだ情報を表示させる<?php the_post(); // 投稿情報を読み込む the_title(); // タイトルを表示する the_content(); // 本文を表示する?>
  9. 9. 記事が投稿されているか調べる<?php have_posts(); // 投稿があるか調べる the_post(); // 投稿情報を読み込む the_title(); // タイトルを表示する the_content(); // 本文を表示する?>
  10. 10. if文を使おう<?php if ( have_posts() ) { // 記事があったらここの記述が表示 } else { // なかったらここの記述が表示される }?>
  11. 11. 調べた結果で表示を変える<?php if ( have_posts() ) { // 記事があったら the_post(); the_title(); the_content(); } else { // 記事がなかったら echo ’<p>記事がありませんでした</p>’; }?>
  12. 12. 調べた記事分を繰り返す<?php if ( have_posts() ) { while ( have_posts() ) { // 記事あるだけ繰り返す the_post(); the_title(); the_content(); } } else { echo ’<p>記事がありませんでした</p>’; }?>
  13. 13. ループ完成<?php if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title(); the_content(); } } else { echo ’<p>記事がありませんでした</p>’; }?>
  14. 14. PHPの記述を分ける<?php 分かりやすいように、 if ( have_posts() ) { ?> カッコの後ろなどに <?php while ( have_posts() ) { 「?>」を入れる the_post(); ?> <h2><?php the_title(); ?></h2> <?php the_content(); ?> <?php } ?><?php } else { ?> <p>記事がありませんでした</p><?php }?>
  15. 15. ちょっと整理する<?php if ( have_posts() ) { ?> <?php while ( have_posts() ) { the_post(); ?> <h2><?php the_title(); ?> <?php the_content(); ?> <?php } ?> 改行とか空白を消して整理<?php } else { ?> <p>記事がありませんでした</p><?php } ?>
  16. 16. WordPressの書き方に倣う<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <h2><?php the_title(); ?> <?php the_content(); ?> <?php endwhile; ?> { → : に変更 } → end~~に変更<?php else : ?> <p>記事がありませんでした</p><?php endif; ?>
  17. 17. ループ完成<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <h2><?php the_title(); ?> <?php the_content(); ?> <?php endwhile; ?><?php else : ?> <p>記事がありませんでした</p><?php endif; ?>
  18. 18. ここまでのまとめ• ここまでがWordPressのメインループと 呼ばれる記述部分• 次のページからは、メインループの表示 条件を変えたり、表示する条件を変えて ループを複数作りたい場合の変更方法
  19. 19. 表示条件を変更しようWordPressでは、$wp_query の値を変更することで、表示する条件を変えることができます。
  20. 20. 表示条件の変更方法• query_posts関数を使う• get_posts関数を使う• WP_Queryクラスを使う• クエリーの改変 – pre_get_postsとis_main_query(WP3.3以上)
  21. 21. query_posts関数
  22. 22. query_postsとは? query_posts は WordPressループ(メインループ)で表示される投稿 を変更するために使います。• 使用例 – 指定した期間の投稿すべてを表示する。 – 投稿の表示順序を変更する。• 指定できる条件 – 投稿者、カテゴリ、タグ、タクソノミー、投稿・固 定ページ、ページ送り、オフセット、並び順・並び 替え、先頭固定投稿、日時、カスタムフィールド – 条件の組み合わせと除外テンプレートタグ/query posts よりhttp://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts
  23. 23. query_posts<?php $args = array( ここに条件書く ); // ループ条件を書く query_posts( $args ); ?> // ループ条件セット<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> ~省略~ <?php endwhile; ?><?php else : ?> <p>記事がありませんでした</p><?php endif; ?><?php wp_reset_query(); ?> // ループ条件をリセット
  24. 24. query_postsの注意点• query_postsは、表示条件を上書き処理している。• ページ送りのナビゲーションやカテゴリ選択を無効化し てしまう。query_postsの引数に、$query_stringを与 えれば無効化された情報が参照できる。• wp_reset_query() を呼び出して変更した条件をきちん とリセットすること。• データベースへのアクセスが増える。
  25. 25. get_posts関数
  26. 26. get_postsとは?get_postsは、複数のループ(マルチループ・サブループ)を作成するために使います。• 使用例 – query_postsループ以外のループを作成する – 現在の記事の添付ファイルを表示する• 指定できる条件 – WP_Queryクラスを利用しているため、gets_posts のほうが指定できる条件が細かい• wp-includes/post.phpにソースコードがあるテンプレートタグ/get posts よりhttp://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts
  27. 27. get_posts<?php $args = array( ここに条件書く ); // ループ条件を書く // ループ条件セット $my_posts = get_posts( $args ); // グローバル変数を読み込む global $post; ?><?php if ( have_posts() ) : ?> <?php foreach ( $my_posts as $post ) : setup_postdata( $post ); ?> ~省略~ // foreach文を使って <?php endforeach; ?> 配列の数だけループ<?php else : ?> <p>記事がありませんでした</p><?php endif; ?><?php wp_reset_postdata(); ?> // ループ条件をリセットする
  28. 28. get_postsの注意点• get_postsはグローバル変数$wp_queryを上書 きをせずに、新たなクエリーを作成する• query_postsと初期値の値が異なる – suppress_filtersの初期値がtrue – ignore_sticky_postsの初期値がtrue – no_found_rowsの初期値がtrue
  29. 29. WP_Queryクラス
  30. 30. WP_Queryクラスとは?• WP_Query は wp-includes/query.php に定義されているクラスで、WordPress ブログへの複雑なリクエストを取り扱います。 wp-blog-header.php (バージョン 2.0 では WP クラス) が $wp_query オブジェクトに現在のリクエストを定義する 情報を与えることで、$wp_query はどのタイプのクエリを扱っているのか (カテゴ リーアーカイブ、年月別アーカイブ、フィード、検索など) を確定し、要求された投 稿を取り出します。$wp_query はリクエスト上の情報を多く保持していて、後から でも利用することができます。 関数リファレンス/WP Query より http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83% 95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query#WP_Query.E 3.81.AB.E5.83.8D.E3.81.8D.E3.81.8B.E3.81.91.E3.82.8BWP_Queryクラスは、WP_Query オブジェクトを新たに生成するため、get_post関数同様に複数のループを作ることができます。
  31. 31. WP_Queryクラス<?php $args = array( ここに条件書く ); $my_query = new WP_Query( $args ); ?><?php if ( $my_query->have_posts() ) : ?> <?php while ( $my_query->have_posts() ) : $my_query- >the_post(); ?> <?php endwhile; ?><?php else : ?> <p>記事がありませんでした</p><?php endif; ?><?php wp_reset_postdata(); ?>
  32. 32. クエリーの改変pre_get_postsとis_main_query
  33. 33. デフォルトの表示条件の変更• メインループしか使わない場合かつ、その表示を変えた い場合は、query_postsを使わずに、pre_get_posts アクションを使う。• is_main_queryで条件判定することにより、アクション の影響をメインクエリーのみに指定することができる
  34. 34. functions.phpに追記例)カテゴリーアーカイブだったら表示する件数を5件にするfunction category_display_five_articles( $wp_query ) { if ( $wp_query->is_main_query() && $wp_query->is_category() ) { $wp_query->set( posts_per_page, 5 ); }}add_action( pre_get_posts, category_display_five_articles );3.3の新しい関数 is_main_query を使おう よりhttp://www.warna.info/archives/1964/
  35. 35. ここまでのまとめ• メインループの条件を変更するなら、query_postsを使う• メインループ以外にループがあるなら、get_postsを使う• メインループしかそもそも使わないのであれば、query_postsは使 わずに、pre_get_postsアクションでデフォルト値を変えてしまお う。• WP_Queryクラスを使えば、get_postsと同じように独自ループが 作れる。
  36. 36. query_postsとget_postsの違い メインループとサブループ
  37. 37. メインループという箱がありました。この箱の色は白色です。この箱の色を赤色に塗り替えたい。そう願ったある日のこと。
  38. 38. query_postsメインループを塗るための専用筆「query_posts」を貰いました。
  39. 39. 箱はめでたく赤色に染まりました。
  40. 40. 箱を違う色で量産したいと思いましたが、query_postsは使い切りなので、新しい箱と筆が必要になりました。
  41. 41. get_posts新しい箱「サブループ」を塗るための専用筆「get_posts」を貰いました。
  42. 42. get_postsという筆を使って色を塗りました。しかもこの筆は、何度でも使うことができます。
  43. 43. いろいろな箱が量産できました
  44. 44. おしまい
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×