SlideShare a Scribd company logo
1 of 20
Download to read offline
YAH! System Service
クエリを攻略しよう!
WordPress
環境
✤ テーマ:sample-theme140416

勉強会用の不完全なテーマデータ。その他のテーマでOK!
✤ テーマテストデータ:theme-test-data-ja-master

https://github.com/jawordpressorg/theme-test-data-ja

右下のDownload ZIP
✤ プラグイン:

Show Current Template:参照テンプレートを確認

Debug Bar:クエリ文字列を確認

クエリを確認する
✤ 各種変数の値を確認する方法:var_dump($variable);

echo '<pre>';

var_dump();

echo </pre> ;
✤ 特定のカテゴリアーカイブページを開いて、WPが認識しているクエリ
を確認してみる
✤ 変数$query_stringの値をvar_dumpで表示してみる
✤ プラグインDebug Barで確認してみる
✤ WPがアーカイブ記事を表示するまでのステップは?
✤ URLからクエリを取得→クエリ実行→$wp_queryに格納→結果
表示
クエリを確認する
✤ 各種変数の値を確認する方法:var_dump($variable);

echo '<pre>';

var_dump();

echo </pre> ;
✤ 特定のカテゴリアーカイブページを開いて、WPが認識しているクエリ
を確認してみる
✤ 変数$query_stringの値をvar_dumpで表示してみる
✤ プラグインDebug Barで確認してみる
✤ WPがアーカイブ記事を表示するまでのステップは?
✤ URLからクエリを取得→クエリ実行→$wp_queryに格納→結果
表示
このステップ、大事!
特定のカテゴリだけ表示を変えたい
✤ 特定のページだけ表示件数を変えたい
✤ 記事の並び順を変えたい
✤ ユーザーごと、このカテゴリは表示したくない
!
✤ 他には?
ってあるでしょ?
特定のカテゴリだけ表示を変えたい
✤ 特定のページだけ表示件数を変えたい
✤ 記事の並び順を変えたい
✤ ユーザーごと、このカテゴリは表示したくない
!
✤ 他には?
ってあるでしょ?
クエリを操作する関数は?
特定のカテゴリだけ表示を変えたい
✤ 特定のページだけ表示件数を変えたい
✤ 記事の並び順を変えたい
✤ ユーザーごと、このカテゴリは表示したくない
!
✤ 他には?
ってあるでしょ?
クエリを操作する関数は?
query_posts(); get_posts(); wp_query();
特定のカテゴリだけ表示を変えたい
✤ 特定のページだけ表示件数を変えたい
✤ 記事の並び順を変えたい
✤ ユーザーごと、このカテゴリは表示したくない
!
✤ 他には?
ってあるでしょ?
クエリを操作する関数は?
query_posts(); get_posts(); wp_query();
この使い分けが今日のテーマ!
query_posts();
✤ WordPressが投稿を表示するのに使用しているメインクエリーを置き
換える手段
✤ query_posts('posts_per_page=1'); 投稿→1件/ページ
query_posts();
✤ WordPressが投稿を表示するのに使用しているメインクエリーを置き
換える手段
✤ query_posts('posts_per_page=1'); 投稿→1件/ページ
問題が発生する!
query_posts();
✤ WordPressが投稿を表示するのに使用しているメインクエリーを置き
換える手段
✤ query_posts('posts_per_page=1'); 投稿→1件/ページ
✤ カテゴリアーカイブページで$wp_query(メインクエリ)を確認

category_nameは?
✤ ページ送りも迷子に(方法はあるけど) 問題が発生する!
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() は決して使うべきではありません。
以上のことをしっかり理解し、この関数を賢く活用してください。
問題が発生する!
get_posts(); と wp_query();
✤ wp_query()はquery_posts()と同じパラメータを使用できる
✤ wp_queryのほうが高機能
get_posts(); と wp_query();
✤ wp_query()はquery_posts()と同じパラメータを使用できる
✤ wp_queryのほうが高機能
メインクエリを変更しない
pre_get_posts();をマスターしよう!
✤ メインクエリ実行時のアクションフック

アクションフックとは:コアのプログラムの途中に挟み込むプログラム
✤ functions.phpに記述する
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に格納→結果表示
練習問題
✤ トップページに特定のカテゴリの最新記事のタイトルを記事へのリンク
付で5つ表示しなさい
練習問題
✤ トップページに特定のカテゴリの最新記事のタイトルを記事へのリンク
付で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(); を使った例:
<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(); を使った例(小久保 勇樹さん提供):
YAH! System Service
クエリを攻略しよう!
WordPress
ありがとうございました

More Related Content

Similar to WordPress クエリを攻略しよう!

Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010stomita
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Yo Takezawa
 
WordPressのためのphp基礎の基礎
WordPressのためのphp基礎の基礎WordPressのためのphp基礎の基礎
WordPressのためのphp基礎の基礎Yusuke Hayasaki
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法regret raym
 
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックjQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックJun-ichi Sakamoto
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
 

Similar to WordPress クエリを攻略しよう! (9)

Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010
 
Haikara
HaikaraHaikara
Haikara
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
 
WordPressのためのphp基礎の基礎
WordPressのためのphp基礎の基礎WordPressのためのphp基礎の基礎
WordPressのためのphp基礎の基礎
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法
 
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックjQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 

More from Yusuke Hayasaki

WordPress オリジナルテーマを作ろう!
WordPress オリジナルテーマを作ろう!WordPress オリジナルテーマを作ろう!
WordPress オリジナルテーマを作ろう!Yusuke Hayasaki
 
WordBench千葉 テーマをちょっとかっこよくするスライダー
WordBench千葉 テーマをちょっとかっこよくするスライダーWordBench千葉 テーマをちょっとかっこよくするスライダー
WordBench千葉 テーマをちょっとかっこよくするスライダーYusuke Hayasaki
 
WordPress — パーマリンクとクエリ
WordPress — パーマリンクとクエリWordPress — パーマリンクとクエリ
WordPress — パーマリンクとクエリYusuke Hayasaki
 
WordPress — テーマ構成について理解しよう
WordPress — テーマ構成について理解しようWordPress — テーマ構成について理解しよう
WordPress — テーマ構成について理解しようYusuke Hayasaki
 
WordPressはGPLライセンス
WordPressはGPLライセンスWordPressはGPLライセンス
WordPressはGPLライセンスYusuke Hayasaki
 
体験してみようWordPress.com
体験してみようWordPress.com体験してみようWordPress.com
体験してみようWordPress.comYusuke Hayasaki
 

More from Yusuke Hayasaki (6)

WordPress オリジナルテーマを作ろう!
WordPress オリジナルテーマを作ろう!WordPress オリジナルテーマを作ろう!
WordPress オリジナルテーマを作ろう!
 
WordBench千葉 テーマをちょっとかっこよくするスライダー
WordBench千葉 テーマをちょっとかっこよくするスライダーWordBench千葉 テーマをちょっとかっこよくするスライダー
WordBench千葉 テーマをちょっとかっこよくするスライダー
 
WordPress — パーマリンクとクエリ
WordPress — パーマリンクとクエリWordPress — パーマリンクとクエリ
WordPress — パーマリンクとクエリ
 
WordPress — テーマ構成について理解しよう
WordPress — テーマ構成について理解しようWordPress — テーマ構成について理解しよう
WordPress — テーマ構成について理解しよう
 
WordPressはGPLライセンス
WordPressはGPLライセンスWordPressはGPLライセンス
WordPressはGPLライセンス
 
体験してみようWordPress.com
体験してみようWordPress.com体験してみようWordPress.com
体験してみようWordPress.com
 

WordPress クエリを攻略しよう!