Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

29,102 views

Published on

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

  • Follow the link, new dating source: ♥♥♥ http://bit.ly/2Qu6Caa ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❤❤❤ http://bit.ly/2Qu6Caa ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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. おしまい

×