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 クエリを攻略しよう!

1,800 views

Published on

WordPress クエリを攻略しよう!

  1. 1. YAH! System Service クエリを攻略しよう! WordPress
  2. 2. 環境 ✤ テーマ:sample-theme140416
 勉強会用の不完全なテーマデータ。その他のテーマでOK! ✤ テーマテストデータ:theme-test-data-ja-master
 https://github.com/jawordpressorg/theme-test-data-ja
 右下のDownload ZIP ✤ プラグイン:
 Show Current Template:参照テンプレートを確認
 Debug Bar:クエリ文字列を確認

  3. 3. クエリを確認する ✤ 各種変数の値を確認する方法:var_dump($variable);
 echo '<pre>';
 var_dump();
 echo </pre> ; ✤ 特定のカテゴリアーカイブページを開いて、WPが認識しているクエリ を確認してみる ✤ 変数$query_stringの値をvar_dumpで表示してみる ✤ プラグインDebug Barで確認してみる ✤ WPがアーカイブ記事を表示するまでのステップは? ✤ URLからクエリを取得→クエリ実行→$wp_queryに格納→結果 表示
  4. 4. クエリを確認する ✤ 各種変数の値を確認する方法:var_dump($variable);
 echo '<pre>';
 var_dump();
 echo </pre> ; ✤ 特定のカテゴリアーカイブページを開いて、WPが認識しているクエリ を確認してみる ✤ 変数$query_stringの値をvar_dumpで表示してみる ✤ プラグインDebug Barで確認してみる ✤ WPがアーカイブ記事を表示するまでのステップは? ✤ URLからクエリを取得→クエリ実行→$wp_queryに格納→結果 表示 このステップ、大事!
  5. 5. 特定のカテゴリだけ表示を変えたい ✤ 特定のページだけ表示件数を変えたい ✤ 記事の並び順を変えたい ✤ ユーザーごと、このカテゴリは表示したくない ! ✤ 他には? ってあるでしょ?
  6. 6. 特定のカテゴリだけ表示を変えたい ✤ 特定のページだけ表示件数を変えたい ✤ 記事の並び順を変えたい ✤ ユーザーごと、このカテゴリは表示したくない ! ✤ 他には? ってあるでしょ? クエリを操作する関数は?
  7. 7. 特定のカテゴリだけ表示を変えたい ✤ 特定のページだけ表示件数を変えたい ✤ 記事の並び順を変えたい ✤ ユーザーごと、このカテゴリは表示したくない ! ✤ 他には? ってあるでしょ? クエリを操作する関数は? query_posts(); get_posts(); wp_query();
  8. 8. 特定のカテゴリだけ表示を変えたい ✤ 特定のページだけ表示件数を変えたい ✤ 記事の並び順を変えたい ✤ ユーザーごと、このカテゴリは表示したくない ! ✤ 他には? ってあるでしょ? クエリを操作する関数は? query_posts(); get_posts(); wp_query(); この使い分けが今日のテーマ!
  9. 9. query_posts(); ✤ WordPressが投稿を表示するのに使用しているメインクエリーを置き 換える手段 ✤ query_posts('posts_per_page=1'); 投稿→1件/ページ
  10. 10. query_posts(); ✤ WordPressが投稿を表示するのに使用しているメインクエリーを置き 換える手段 ✤ query_posts('posts_per_page=1'); 投稿→1件/ページ 問題が発生する!
  11. 11. query_posts(); ✤ WordPressが投稿を表示するのに使用しているメインクエリーを置き 換える手段 ✤ query_posts('posts_per_page=1'); 投稿→1件/ページ ✤ カテゴリアーカイブページで$wp_query(メインクエリ)を確認
 category_nameは? ✤ ページ送りも迷子に(方法はあるけど) 問題が発生する!
  12. 12. query_posts(); ✤ WordPressが投稿を表示するのに使用しているメインクエリーを置き 換える手段 ✤ query_posts('posts_per_page=1'); 投稿→1件/ページ ✤ カテゴリアーカイブページで$wp_query(メインクエリ)を確認
 category_nameは? ✤ ページ送りも迷子に(方法はあるけど) 使いません! 注 1: この関数はプラグインまたはテーマの中で使われることを想定されていません。後ほど出てくる説明にあるように、メインク エリーを変更するにはパフォーマンス面でも優れたより良いオプションが存在します。 注 2: query_posts() はページ内のメインクエリーを書き換え、新しいクエリーのインスタンスと置き換えるために使う関数として は過度に単純化され、問題が発生しやすい方法です。非効率的で(SQL クエリを再実行します)、一部の状況では適切に実行する こともできません(特にページング処理)。モダンな WordPress コードではもっと安定したメソッドを使うべきです。例えば pre_get_posts フックを使った方法などです。ひとことで言うと、query_posts() は決して使うべきではありません。 以上のことをしっかり理解し、この関数を賢く活用してください。 問題が発生する!
  13. 13. get_posts(); と wp_query(); ✤ wp_query()はquery_posts()と同じパラメータを使用できる ✤ wp_queryのほうが高機能
  14. 14. get_posts(); と wp_query(); ✤ wp_query()はquery_posts()と同じパラメータを使用できる ✤ wp_queryのほうが高機能 メインクエリを変更しない
  15. 15. pre_get_posts();をマスターしよう! ✤ メインクエリ実行時のアクションフック
 アクションフックとは:コアのプログラムの途中に挟み込むプログラム ✤ functions.phpに記述する
  16. 16. pre_get_posts();をマスターしよう! ✤ メインクエリ実行時のアクションフック
 アクションフックとは:コアのプログラムの途中に挟み込むプログラム ✤ functions.phpに記述する /**! * pre_get_postsの演習! */! function change_posts_per_page($query) {! if ( $query->is_category('magazines') ) {! $query->set( 'posts_per_page', '2' );! }! }! add_action( 'pre_get_posts', 'change_posts_per_page' ); URLからクエリを取得→クエリ実行(ここをフックしている) →$wp_queryに格納→結果表示
  17. 17. 練習問題 ✤ トップページに特定のカテゴリの最新記事のタイトルを記事へのリンク 付で5つ表示しなさい
  18. 18. 練習問題 ✤ トップページに特定のカテゴリの最新記事のタイトルを記事へのリンク 付で5つ表示しなさい <dl>! <?php! $args = array(! ! 'posts_per_page' => 5,! ! 'category_name' => 'books'! ! );! $dtfmt = get_option('date_format');! $myposts = get_posts( $args );! foreach ( $myposts as $post ) :! ! ?>! ! <dt><?php echo date($dtfmt, strtotime($post -> post_date)); ?></dt>! ! <dd><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post -> post_title; ?></a></dd>! <?php endforeach; ?>! ! </dl> get_posts(); を使った例:
  19. 19. <dl>! <?php! $wp_query = new WP_Query(); //WP_Queryの新しいインスタンスを作成! $param = array(! 'category_name' => 'books', //カテゴリ名! 'posts_per_page' => '5', //表示件数! 'post_type' => 'post', //投稿タイプ! 'orderby' => 'date', //日付でソート! 'order' => 'DESC' //新しい順! );! $wp_query->query($param); //上記のパラメータを代入! if( $wp_query->have_posts() ) : while( $wp_query->have_posts() ) : $wp_query- >the_post(); //ループ開始! ?>! ! <!-- 日付を表示 -->! <dt><?php the_time('Y年m月d日'); ?></dt>! ! <!-- パーマリンクを表示 -->! <dd><a href="<?php the_permalink(); ?>">投稿記事へのリンク</a></dd>! ! <?php! endwhile; endif; //ループ終了! wp_reset_postdata(); //メインクエリーを元に戻す! ?>! </dl> wp_query(); を使った例(小久保 勇樹さん提供):
  20. 20. YAH! System Service クエリを攻略しよう! WordPress ありがとうございました

×