Submit Search
これからのpre_get_postsの話をしよう
38 likes
67,117 views
Hishikawa Takuro
第24回WordBench神戸で話した資料です。
Technology
Read more
1 of 99
Download now
Downloaded 41 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
More Related Content
DOC
It Project Workflow Document
cacmk5
PDF
Лекция 1. Введение в Big Data и MapReduce
Technopark
PDF
Trunk-Based Development and Toggling
Bryan Liu
PDF
Oracle Cloud Infrastructure:2021年12月度サービス・アップデート
オラクルエンジニア通信
PDF
SRE Conference 2022 - How to Build a Healthy On-Call Culture
smalltown
PDF
Business Requirement Analyse Requirement Document Requirements
SlideTeam
PPTX
스케일폼(Scaleform) ue4에 통합 및 간단한 사용법
Kiyoung Moon
PDF
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
Opennaru, inc.
It Project Workflow Document
cacmk5
Лекция 1. Введение в Big Data и MapReduce
Technopark
Trunk-Based Development and Toggling
Bryan Liu
Oracle Cloud Infrastructure:2021年12月度サービス・アップデート
オラクルエンジニア通信
SRE Conference 2022 - How to Build a Healthy On-Call Culture
smalltown
Business Requirement Analyse Requirement Document Requirements
SlideTeam
스케일폼(Scaleform) ue4에 통합 및 간단한 사용법
Kiyoung Moon
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
Opennaru, inc.
Viewers also liked
(20)
PDF
You Don't Know Query (WordCamp Netherlands 2012)
andrewnacin
PDF
WordPressで投稿記事情報の取得方法
regret raym
PDF
クライアントに感謝されるCMS導入のコツ
Hishikawa Takuro
PDF
CMS導入で企業のWebサイト運営はこう変わる!
Hishikawa Takuro
PDF
あなたがWordCamp Kansai 2014に行くべき5つの理由
Kojiro Fukazawa
PDF
WordPressがつくりだすCSSを利用する 初級編
Kojiro Fukazawa
PDF
a-blog cms 2.0 を活用した新しいWeb制作のワークフロー
Kazumich YAMAMOTO
PDF
ユーザーにやさしい管理画面をつくるために。テーマ制作者ができること 初級編【WordCamp Kansai 2014】
Kojiro Fukazawa
PDF
町のウェブ屋があえて 「CMSの機能をダイエットする」 ことから提案する理由
Kojiro Fukazawa
PDF
concrete5で実践するリードナーチャリング
株式会社ND&I しかたこうき
PDF
プロトタイプ時代の WordPressテーマの作り方・考え方
kenji goto
PDF
WordCamp Kansai 2015 - WordPress.org フォーラム参加のススメ
Kojiro Fukazawa
PDF
Concrete5で運用をデザイン
Atushi Sugiyama
PDF
これからのCMSマーケットトレンドとPHP (for fukuoka.php)
株式会社ミツエーリンクス
PDF
フリーランスの事務机&お財布事情
Kojiro Fukazawa
KEY
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
Yuji Nojima
PDF
ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜
Mignon Style
PDF
クライアントと同じ方向を向くという事
kenji goto
PPTX
HTML5/JavaScriptで作るAndroidアプリ開発seminar
kujirahand kujira
PDF
進化するオープンソース・エンタープライズCMSがWeb戦略を変える
Hishikawa Takuro
You Don't Know Query (WordCamp Netherlands 2012)
andrewnacin
WordPressで投稿記事情報の取得方法
regret raym
クライアントに感謝されるCMS導入のコツ
Hishikawa Takuro
CMS導入で企業のWebサイト運営はこう変わる!
Hishikawa Takuro
あなたがWordCamp Kansai 2014に行くべき5つの理由
Kojiro Fukazawa
WordPressがつくりだすCSSを利用する 初級編
Kojiro Fukazawa
a-blog cms 2.0 を活用した新しいWeb制作のワークフロー
Kazumich YAMAMOTO
ユーザーにやさしい管理画面をつくるために。テーマ制作者ができること 初級編【WordCamp Kansai 2014】
Kojiro Fukazawa
町のウェブ屋があえて 「CMSの機能をダイエットする」 ことから提案する理由
Kojiro Fukazawa
concrete5で実践するリードナーチャリング
株式会社ND&I しかたこうき
プロトタイプ時代の WordPressテーマの作り方・考え方
kenji goto
WordCamp Kansai 2015 - WordPress.org フォーラム参加のススメ
Kojiro Fukazawa
Concrete5で運用をデザイン
Atushi Sugiyama
これからのCMSマーケットトレンドとPHP (for fukuoka.php)
株式会社ミツエーリンクス
フリーランスの事務机&お財布事情
Kojiro Fukazawa
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
Yuji Nojima
ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜
Mignon Style
クライアントと同じ方向を向くという事
kenji goto
HTML5/JavaScriptで作るAndroidアプリ開発seminar
kujirahand kujira
進化するオープンソース・エンタープライズCMSがWeb戦略を変える
Hishikawa Takuro
Ad
Similar to これからのpre_get_postsの話をしよう
(8)
PPTX
デザイナーのためのPHP講座 for WordPress (初級)
佑 小田垣佑
PDF
ゼロからつくるWord pressテーマ第9回
Hitsuji
PDF
4時間まったりWordPressテーマ作成講座
Shinichi Nishikawa
PDF
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
Tsuyoshi.
PDF
WordPress実践 導入からカスタマイズまで
Takashi Uemura
PDF
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
Takashi Uemura
KEY
フラットなPHPからフレームワークへ
Masao Maeda
KEY
フラットなPHPからフレームワークへ
VOYAGE GROUP
デザイナーのためのPHP講座 for WordPress (初級)
佑 小田垣佑
ゼロからつくるWord pressテーマ第9回
Hitsuji
4時間まったりWordPressテーマ作成講座
Shinichi Nishikawa
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
Tsuyoshi.
WordPress実践 導入からカスタマイズまで
Takashi Uemura
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
Takashi Uemura
フラットなPHPからフレームワークへ
Masao Maeda
フラットなPHPからフレームワークへ
VOYAGE GROUP
Ad
More from Hishikawa Takuro
(20)
PDF
これから concrete5 を始める Web 制作者に伝えたい concrete5 と WordPress ここが一緒、ここが違う!
Hishikawa Takuro
PDF
エンジニアのための営業入門
Hishikawa Takuro
PDF
concrete5 CMS「運用」ケーススタディ
Hishikawa Takuro
PDF
Calypso動かしてみたよ!
Hishikawa Takuro
PDF
concrete5の紹介
Hishikawa Takuro
PDF
concrete5 最新事情 2015
Hishikawa Takuro
PDF
concrete5セミナー資料公開版
Hishikawa Takuro
PDF
WordPress使いのためのconcrete5入門
Hishikawa Takuro
PDF
concrete5で行なうcms導入提案のポイント
Hishikawa Takuro
PDF
concrete5.7のご紹介
Hishikawa Takuro
PDF
世界一即戦力なCMS
Hishikawa Takuro
PDF
はじめての concrete5 でウェブサイト作成〜入門チュートリアルガイド
Hishikawa Takuro
PDF
オープンソースCMSに学ぶ、前PSR時代のプロジェクトが脱レガシーする5つの方法
Hishikawa Takuro
PDF
Getting Started with WordPress JSON REST API
Hishikawa Takuro
PDF
concrete5 in Japan 2014
Hishikawa Takuro
PDF
concrete5 バージョン5.7のご紹介
Hishikawa Takuro
PDF
concrete5 5.6.3.1日本語版の紹介
Hishikawa Takuro
PDF
concrete5デザインカスタマイズに必要なPHPの知識
Hishikawa Takuro
PDF
concrete5って何?〜Web制作者対象〜2014年版
Hishikawa Takuro
PDF
コミュニティと仕事論
Hishikawa Takuro
これから concrete5 を始める Web 制作者に伝えたい concrete5 と WordPress ここが一緒、ここが違う!
Hishikawa Takuro
エンジニアのための営業入門
Hishikawa Takuro
concrete5 CMS「運用」ケーススタディ
Hishikawa Takuro
Calypso動かしてみたよ!
Hishikawa Takuro
concrete5の紹介
Hishikawa Takuro
concrete5 最新事情 2015
Hishikawa Takuro
concrete5セミナー資料公開版
Hishikawa Takuro
WordPress使いのためのconcrete5入門
Hishikawa Takuro
concrete5で行なうcms導入提案のポイント
Hishikawa Takuro
concrete5.7のご紹介
Hishikawa Takuro
世界一即戦力なCMS
Hishikawa Takuro
はじめての concrete5 でウェブサイト作成〜入門チュートリアルガイド
Hishikawa Takuro
オープンソースCMSに学ぶ、前PSR時代のプロジェクトが脱レガシーする5つの方法
Hishikawa Takuro
Getting Started with WordPress JSON REST API
Hishikawa Takuro
concrete5 in Japan 2014
Hishikawa Takuro
concrete5 バージョン5.7のご紹介
Hishikawa Takuro
concrete5 5.6.3.1日本語版の紹介
Hishikawa Takuro
concrete5デザインカスタマイズに必要なPHPの知識
Hishikawa Takuro
concrete5って何?〜Web制作者対象〜2014年版
Hishikawa Takuro
コミュニティと仕事論
Hishikawa Takuro
これからのpre_get_postsの話をしよう
1.
これからの by @HissyNC /
WordBench Kobe Group pre_get_posts: What's the Right Way to Use? pre_get_posts の話をしよう 1
2.
query_posts非推奨? 『query_postsを捨てよ、pre_get_postsを 使おう』というブログ記事を公開したとこ ろ、はてブなどでバズる。「いつの間にこ んなことになっていたんだよ…」「非推奨 だなんて!いますぐ直さなきゃ!」「急に 言われても困る」「query_posts使いまく ってたぜマジかよ…」「初心者にこの説明 はキツイでしょ」等々の意見が噴出。 2
3.
pre_get_postsとは何か? 結局、Codexのquery_postsのページに非 推奨の文字が入ったのは一時的なもので、 その後表現が修正され、「query_postsの 代わりにpre_get_postsフィルターを使う ことを強く推奨する」となった。ではなぜ 数多のWordPress本でも紹介されている query_postsが推奨されないのだろうか。 pre_get_postsフィルターとは何なのか。 3
4.
まず テンプレート とは何か 4
5.
データベースから 目的のデータを 取得して 表示するためのもの 5
6.
ではない 6
7.
テンプレートとは 表示するデータを 整形する ためのもの 7
8.
データを取得する 目的には 本来使わない 8
9.
どんなデータを 取得するかを 決定するのは 9
10.
URL 10
11.
?p=1 ?cat=1 ?cat=1&post_type=book&paged=2 クエリー・ストリングという $query_string 11
12.
URLで どのデータを取得 するかが決まる どんな処理を行う かが決まる 12
13.
ほかのCMS でも同じ 13
14.
URLがページの 内容を表している = インターネットの 基本的な概念 14
15.
ここで疑問 15
16.
Webページには たくさんのデータ が表示されており 各ページで共通の ものもある 16
17.
たとえば サイドバーに 新着記事を5件表示 URLとは関係なく どのページにもある 17
18.
記事の下に 関連記事を5件表示 URLとは間接的に関係 があるが 直接示しているもの ではない 18
19.
これらを サブクエリー と呼ぶ 19
20.
?p=1 ?cat=1 ?cat=1&post_type=book&paged=2 クエリー・ストリングと直接対応し ているデータのことを 20
21.
メインクエリー と呼ぶ 21
22.
メインクエリー と サブクエリー 違いを理解しよう 22
23.
トップページの内容と してニュースカテゴリ ーの記事を表示する メインクエリー or サブクエリー? 23
24.
トップページの内容と してニュースカテゴリ ーの記事を表示する メインクエリー or サブクエリー? 24
25.
WordPressでは、フロントページ は新着投稿か、固定ページか、 2択です。CMSとしてはそれだ け?と違和感がありますが、そう いう設計ですので、本来特定のカ テゴリーの記事をトップページで 表示するのはWordPressではでき ません。get_postsを使うか、ウ ィジェットを使いましょう 25
26.
query_posts の 迷宮 26
27.
query_postsとは 本来 メインクエリーを 改変するためのもの 27
28.
http://example.com/?cat=1 28
29.
http://example.com/?cat=1 カテゴリーID が 1 28
30.
http://example.com/?cat=1 have_posts() = 投稿が存在する? カテゴリーID
が 1 28
31.
http://example.com/?cat=1 have_posts() = 投稿が存在する? カテゴリーID
が 1 the_post() = テンプレートタグを有効化 28
32.
http://example.com/?cat=1 have_posts() = 投稿が存在する? カテゴリーID
が 1 the_post() = テンプレートタグを有効化 <a href= <?php the_permalink(); ?> > <h2> <?php the_title(); ?></a> </h2> 28
33.
http://example.com/?cat=1 have_posts() = 投稿が存在する? カテゴリーID
が 1 the_post() = テンプレートタグを有効化 <a href= <?php the_permalink(); ?> > <h2> <?php the_title(); ?></a> </h2> ↓次の投稿へ have_posts() = 投稿が存在する? 28
34.
カテゴリーを指定している が、それ以外は? 表示件数(10件?) 並び順(投稿日が新しい順) 投稿タイプ(投稿) デフォルト設定がある 29
35.
メインクエリーには デフォルト設定 がある 30
36.
メインクエリーの デフォルト設定を 変更したい = query_posts 31
37.
32
38.
?cat=1 32
39.
?cat=1 デフォルト設定 32
40.
?cat=1 デフォルト設定 クエリーストリングの生成 32
41.
?cat=1 条件分岐タグの設定 デフォルト設定 クエリーストリングの生成 32
42.
?cat=1 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 クエリーストリングの生成 32
43.
?cat=1 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み クエリーストリングの生成 32
44.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 <a href= <?php the_permalink(); ?> > <h2> 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み クエリーストリングの生成 32
45.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み クエリーストリングの生成 32
46.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 クエリーストリングの生成 32
47.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 クエリーストリングの生成 32
48.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 クエリーストリングの生成 32
49.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 クエリーストリングの生成 クエリーストリングの再生成 32
50.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 クエリーストリングの生成 クエリーストリングの再生成 条件分岐タグの再設定 32
51.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 クエリーストリングの生成 クエリーストリングの再生成 条件分岐タグの再設定 データベースから投稿を再取得 32
52.
?cat=1 have_posts() = 投稿が存在する? the_post()
= テンプレートタグを有効化 条件分岐タグの設定 デフォルト設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 クエリーストリングの生成 クエリーストリングの再生成 条件分岐タグの再設定 データベースから投稿を再取得 query_posts以前のアレコレが消えてしまった! 32
53.
大丈夫! 戻す手段が あります 33
54.
wp_reset_query() query_posts 発動前の状態に戻す 34
55.
query_posts 何が問題なのか? 35
56.
ページ送りが効かない (頻出) 原因 = $query_string と結合していない global
$query_string; query_posts( $query_string . '&order=ASC' ); 36
57.
条件分岐タグの設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 query_posts()以前の条件で テンプレートが選ばれてしまう =意図せず404になる 37
58.
条件分岐タグの設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 条件分岐タグの再設定 2回DBから投稿データを取得 =非効率、表示遅速の原因 38
59.
条件分岐タグの設定 データベースから投稿を取得 使用するテンプレートの読み込み query_posts() = 投稿の再取得 条件分岐タグの再設定 条件分岐タグが上書きされる =混乱のもと 39
60.
条件分岐タグの上書き と、query_posts()を サブクエリーの取得に 使ってしまう間違いが 重なるとカオス 40
61.
header.php footer.php category.php is_category() = true sidebar.phpで query_posts()を使用 wp_reset_query() 書き忘れ is_category()
= false テンプレートファイルをま たいで影響が出る 41
62.
まとめ 42
63.
query_postsは 便利だが、影響範囲が 大きすぎる 43
64.
条件分岐の上書きは 初心者には分かりにくい 44
65.
これからの 推奨される 方法 45
66.
メインクエリー の改変 = pre_get_posts 46
67.
サブクエリー の作成 = get_posts 47
68.
サブクエリー の作成 = get_posts 条件分岐タグが書き換わらない 47
69.
用途によって 使いわけよう 48
70.
メインクエリー の改変 = pre_get_posts 49
71.
function 関数( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( クエリーの改変を適用する条件 ) { $query->set( パラメーター , 値 ); return; } } add_action( 'pre_get_posts', '関数名' ); pre_get_posts基本文法 50
72.
function 関数( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( クエリーの改変を適用する条件 ) { $query->set( パラメーター , 値 ); return; } } add_action( 'pre_get_posts', '関数名' ); pre_get_posts基本文法 管理画面とメインクエリー以外 には適用しない 51
73.
function 関数( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( クエリーの改変を適用する条件 ) { $query->set( パラメーター , 値 ); return; } } add_action( 'pre_get_posts', '関数名' ); pre_get_posts基本文法 表示条件を変更したい ページを絞り込む 52
74.
function 関数( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( クエリーの改変を適用する条件 ) { $query->set( パラメーター , 値 ); return; } } add_action( 'pre_get_posts', '関数名' ); pre_get_posts基本文法 メインクエリーの パラメーターを設定 53
75.
function 関数( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( クエリーの改変を適用する条件 ) { $query->set( パラメーター , 値 ); return; } } add_action( 'pre_get_posts', '関数名' ); pre_get_posts基本文法 関数の名前は 自由につけて良い 54
76.
function 関数( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( クエリーの改変を適用する条件 ) { 処理 return; } } add_action( 'pre_get_posts', '関数名' ); pre_get_posts基本文法 【最重要】 テーマのfunctions.phpに記載する query_postsの様に 各テンプレートには書かない 55
77.
?cat=1 デフォルト設定 条件分岐タグの設定 have_posts() =
投稿が存在する? the_post() = テンプレートタグを有効化 <a href= <?php the_permalink(); ?> > <h2> データベースから投稿を取得 使用するテンプレートの読み込み クエリーストリングの生成 56
78.
?cat=1 デフォルト設定 条件分岐タグの設定 have_posts() =
投稿が存在する? the_post() = テンプレートタグを有効化 データベースから投稿を取得 使用するテンプレートの読み込み クエリーストリングの生成 56
79.
?cat=1 デフォルト設定 条件分岐タグの設定 have_posts() =
投稿が存在する? the_post() = テンプレートタグを有効化 データベースから投稿を取得 使用するテンプレートの読み込み クエリーストリングの生成 pre_get_posts フィルター = クエリーストリングに無い条件の追加 56
80.
function exclude_category_at_home( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( $query->is_home() ) { $query->set( 'cat', '-1,-1347' ); return; } } add_action( 'pre_get_posts', 'exclude_category_at_home' ); メインページから特定のカテゴリーを除外する 57
81.
function exclude_category_at_home( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( $query->is_home() ) { $query->set( 'cat', '-1,-1347' ); return; } } add_action( 'pre_get_posts', 'exclude_category_at_home' ); メインページから特定のカテゴリーを除外する メインページのみに制限 注意:is_home() ではなく $query->is_home() 58
82.
function exclude_category_at_home( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( $query->is_home() ) { $query->set( 'cat', '-1,-1347' ); return; } } add_action( 'pre_get_posts', 'exclude_category_at_home' ); メインページから特定のカテゴリーを除外する $query->set( パラメーター , 値 ); 使えるパラメーターはCodexの 関数リファレンス/WP_Queryを参照 59
83.
function search_exclude_cat_1( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( $query->is_search() ) { $query->set( 'category__not_in', array(1) ); return; } } add_action( 'pre_get_posts', 'search_exclude_cat_1' ); 検索結果から特定のカテゴリーを除外する 60
84.
function search_exclude_cat_1( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( $query->is_search() ) { $query->set( 'category__not_in', array(1) ); return; } } add_action( 'pre_get_posts', 'search_exclude_cat_1' ); 検索結果から特定のカテゴリーを除外する 検索結果で IDが1のカテゴリーを除外 配列で指定することもできる 61
85.
function search_only_post( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( $query->is_search() ) { $query->set( 'post_type', 'post' ); return; } } add_action( 'pre_get_posts', 'search_only_post' ); 検索結果から固定ページを除外(投稿のみ) 62
86.
function search_only_post( $query
) { if ( is_admin() ¦¦ ! $query->is_main_query() ) return; if ( $query->is_search() ) { $query->set( 'post_type', 'post' ); return; } } add_action( 'pre_get_posts', 'search_only_post' ); 検索結果から固定ページを除外(投稿のみ) 検索結果のみに制限 Codexのサンプルは$query->is_search プロパティを見るより関数で書こう $query->is_search() → ○ 63
87.
function set_post_per_page( $query
) { if ( is_admin() || ! $query->is_main_query() ) return; if ( $query->is_home() ) { $query->set( 'posts_per_page', 1 ); return; } if ( $query->is_post_type_archive( 'movie' ) ) { $query->set( 'posts_per_page', 50 ); return; } } add_action( 'pre_get_posts', 'set_post_per_page'); 条件にしたがって表示件数を変更 64
88.
function set_post_per_page( $query
) { if ( is_admin() || ! $query->is_main_query() ) return; if ( $query->is_home() ) { $query->set( 'posts_per_page', 1 ); return; } if ( $query->is_post_type_archive( 'movie' ) ) { $query->set( 'posts_per_page', 50 ); return; } } add_action( 'pre_get_posts', 'set_post_per_page'); 条件にしたがって表示件数を変更 メインページでは 1件表示 65
89.
function set_post_per_page( $query
) { if ( is_admin() || ! $query->is_main_query() ) return; if ( $query->is_home() ) { $query->set( 'posts_per_page', 1 ); return; } if ( $query->is_post_type_archive( 'movie' ) ) { $query->set( 'posts_per_page', 50 ); return; } } add_action( 'pre_get_posts', 'set_post_per_page'); 条件にしたがって表示件数を変更 movie 投稿タイプのアーカイブでは 50件表示 66
90.
注意点 あくまでパラメーターの追加 固定ページをアーカイブに等 根本的に変更するのは厳しい = サブクエリーを使う 67
91.
注意点 一部の条件分岐は pre_get_postsのタイミ ングでは動作しない 例:is_front_page() 68
92.
サブクエリー の作成 = get_posts 69
93.
global $post; $args =
array( 'posts_per_page' => 5, 'cat' => 1 ); $myposts = get_posts( $args ); foreach( $myposts as $post ) { setup_postdata($post); ?> <h1><?php the_title(); ?></h1> <?php } wp_reset_postdata(); get_posts記述例 70
94.
global $post; $args =
array( 'posts_per_page' => 5, 'cat' => 1 ); $myposts = get_posts( $args ); foreach( $myposts as $post ) { setup_postdata($post); ?> <h1><?php the_title(); ?></h1> <?php } wp_reset_postdata(); get_posts記述例 テンプレートタグのセットアップ テンプレートタグのリセット 71
95.
Codexで get_posts のサンプルの書き方 が微妙にまちまち Codexの改善に期待 72
96.
$args = array( 'posts_per_page'
=> 5, 'offset' => 0, 'cat' => 0, 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'post', 'post_status' => 'publish', 'suppress_filters' => true, 'ignore_sticky_posts' => true, 'no_found_rows' => true ); WP_Query記述例 $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); ?> <h1><?php the_title(); ?></h1> <?php } } wp_reset_postdata(); 上級者向けかも 73
97.
まとめ 74
98.
メインクエリーの変更は pre_get_posts サブクエリーの作成は get_posts (or WP_Query) 使い分ける 75
99.
Thanks! 質問は公式フォーラム または Twitter: @HissyNC
まで 76
Download