Advertisement
Advertisement

More Related Content

Slideshows for you(20)

Advertisement
Advertisement

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

  1. WordPressで投稿情報の取得方法 第6回ゆるふわ勉強会
  2. プロフィール • Yuu / Yuji Tsukaguchi • Web Designer Community • WordBench 東京 at GMO(STAFF) • Movable Type Developer Meet up Twitter : regret_raym Tokyo 2012(LT) blog : creator-life.net • WordCamp Tokyo 2012 (Session&Handson)
  3. WordPressで投稿情報の取得
  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. 表示させるために • タグだけを張っても、「え、それどこの記事の タイトルなの?」ってなります。 • 記事が1000件あったとしたら、どれを表示する とか、どれだけ表示するとか条件を指定してあ げなければなりません。 • WordPressでは表示するために、ループ処理を 書く必要があります。
  6. 最新記事10件の タイトルと内容を表示する
  7. 投稿情報を読み込む <?php the_post(); // 投稿情報を読み込む ?>
  8. 読み込んだ情報を表示させる <?php the_post(); // 投稿情報を読み込む the_title(); // タイトルを表示する the_content(); // 本文を表示する ?>
  9. 記事が投稿されているか調べる <?php have_posts(); // 投稿があるか調べる the_post(); // 投稿情報を読み込む the_title(); // タイトルを表示する the_content(); // 本文を表示する ?>
  10. if文を使おう <?php if ( have_posts() ) { // 記事があったらここの記述が表示 } else { // なかったらここの記述が表示される } ?>
  11. 調べた結果で表示を変える <?php if ( have_posts() ) { // 記事があったら the_post(); the_title(); the_content(); } else { // 記事がなかったら echo ’<p>記事がありませんでした</p>’; } ?>
  12. 調べた記事分を繰り返す <?php if ( have_posts() ) { while ( have_posts() ) { // 記事あるだけ繰り返す the_post(); the_title(); the_content(); } } else { echo ’<p>記事がありませんでした</p>’; } ?>
  13. ループ完成 <?php if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title(); the_content(); } } else { echo ’<p>記事がありませんでした</p>’; } ?>
  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. ちょっと整理する <?php if ( have_posts() ) { ?> <?php while ( have_posts() ) { the_post(); ?> <h2><?php the_title(); ?> <?php the_content(); ?> <?php } ?> 改行とか空白を消して整理 <?php } else { ?> <p>記事がありませんでした</p> <?php } ?>
  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. ループ完成 <?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. ここまでのまとめ • ここまでがWordPressのメインループと 呼ばれる記述部分 • 次のページからは、メインループの表示 条件を変えたり、表示する条件を変えて ループを複数作りたい場合の変更方法
  19. 表示条件を変更しよう WordPressでは、$wp_query の値を変更する ことで、表示する条件を変えることができます。
  20. 表示条件の変更方法 • query_posts関数を使う • get_posts関数を使う • WP_Queryクラスを使う • クエリーの改変 – pre_get_postsとis_main_query(WP3.3以上)
  21. query_posts関数
  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. 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. query_postsの注意点 • query_postsは、表示条件を上書き処理している。 • ページ送りのナビゲーションやカテゴリ選択を無効化し てしまう。query_postsの引数に、$query_stringを与 えれば無効化された情報が参照できる。 • wp_reset_query() を呼び出して変更した条件をきちん とリセットすること。 • データベースへのアクセスが増える。
  25. get_posts関数
  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. 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. get_postsの注意点 • get_postsはグローバル変数$wp_queryを上書 きをせずに、新たなクエリーを作成する • query_postsと初期値の値が異なる – suppress_filtersの初期値がtrue – ignore_sticky_postsの初期値がtrue – no_found_rowsの初期値がtrue
  29. WP_Queryクラス
  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.8B WP_Queryクラスは、WP_Query オブジェクトを新たに生成するため、 get_post関数同様に複数のループを作ることができます。
  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. クエリーの改変 pre_get_postsとis_main_query
  33. デフォルトの表示条件の変更 • メインループしか使わない場合かつ、その表示を変えた い場合は、query_postsを使わずに、pre_get_posts アクションを使う。 • is_main_queryで条件判定することにより、アクション の影響をメインクエリーのみに指定することができる
  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. ここまでのまとめ • メインループの条件を変更するなら、query_postsを使う • メインループ以外にループがあるなら、get_postsを使う • メインループしかそもそも使わないのであれば、query_postsは使 わずに、pre_get_postsアクションでデフォルト値を変えてしまお う。 • WP_Queryクラスを使えば、get_postsと同じように独自ループが 作れる。
  36. query_postsとget_postsの違い メインループとサブループ
  37. メインループという箱がありました。 この箱の色は白色です。 この箱の色を赤色に塗り替えたい。 そう願ったある日のこと。
  38. query_posts メインループを塗るための専用筆 「query_posts」を貰いました。
  39. 箱はめでたく赤色に染まりました。
  40. 箱を違う色で量産したいと 思いましたが、query_posts は使い切りなので、新しい 箱と筆が必要になりました。
  41. get_posts 新しい箱「サブループ」を塗るための専用筆 「get_posts」を貰いました。
  42. get_postsという筆を使って 色を塗りました。 しかもこの筆は、何度でも 使うことができます。
  43. いろいろな箱が量産できました
  44. おしまい
Advertisement