【WordPress】pre_get_postsを使ってハマりました。アプリIT顧問・アドバイザー契約NPOスターターキットプロフィールブログお問い合わせホームWordPress【WordPress】pre_get_postsを使ってハマりました。【WordPress】pre_get_postsを使ってハマりました。近頃、ちまたで噂になっております「pre_get_posts」。基本私は子テーマで開発することが多いので、出来る限り親のテンプレートは触りたくないです。出来れば、子テーマの中にはstyle.cssとfunctions.phpだけにしたいな〜って思ったり。※現実には難しいですが・・・pre_get_postsを使えばfunctions.phpに記載するのでテンプレートファイルへの記載が減るなぁ〜と。もって、ちまたで噂の「pre_get_posts」とは簡単に言うとメインクエリーの抽出条件を初回のデータを取得時に変更できるものです。ちまたで噂では、「query_posts」を使わずに「pre_get_posts」を使おう!って言うのを良く見聞きします。利点を簡単に書くと、「pre_get_posts」を使うと記事データを取得してブラウザーに表示するまでの間で記事取得の為のデータベースへのアクセエスが1回に抑えれます。「query_posts」を使ってしまうとデータ取得の為のデータベースへのアクセスが2回になります。データベースへのアクセスってのはサイトの表示の速度に関わってきますので、2回よりは1回の方がサイトの表示が当然早くなるってことです。良く「pre_get_posts」と「query_posts」を比較されることが多いのですが、この2つ実は全然違う性質?のものになります。「query_posts」は皆さん良くご存知だと思いますが、テンプレートファイルに書きます。」と記載されている直前に記載することが多いと思います。(記事の表示件数をデフォルトの10件から5件に変更しています。?>[/php]上記に書いたように「query_posts」を使うとデフォルトの記事10件を取得した後に5件の記事を再度取得をしに行くことになります。2回データベースにアクセスします。「query_posts」は「query_posts(‘記事取得の条件’)」の様に書きますが、「pre_get_posts」は「pre_get_posts()」というように書きません。テンプレートファイルにも記載しません。「query_posts」はWordPress関数なのですが、「pre_get_posts」はWordPress関数ではないからです。関数の場合は関数名の後に丸括弧をつけて上げれば実行できます。「pre_get_posts」は何なのかというと「アクションフック」というものになります。フックとは、簡単に言うとWordPressの処理の合間合間に横ヤリを入れれる感じです。サザエさんの朝食の食卓の準備風景を想像してください。サザエさんの一家は、波平、舟、さざえ、カツオ、ワカメ、タラ、マスオの7人で住んでます。サザエがカツオにお茶碗を取ってこいとお願いするとカツオはデフォルトの人数である7人分のお茶碗をとってきます。もって、カツオがテーブルにお茶碗をマトメて置いた時に、サザエさんが、「イヤイヤ、マスオさんは今日は朝帰りだからお茶碗は6人分でいいんだよ?」と再度いうのが「query_posts」です。「pre_get_posts」の場合は、カツオが7人分のお茶碗を取りに行ってる時、リビングから台所に向かってる最中に、「今日はマスオさんは朝帰りだからお茶碗は6人分ね!」と伝える感じです。するとカツオは1回の移動で6人分のお茶碗を食卓のテーブルに置いておくことが出来ます。こんな感じで横ヤリを入れれるのが「アクションフック」になります。前置きが長くなってしまいまたが、何にハマってしまったかと言うとですね。「pre_get_posts」フックをfunctions.phpに2つ記載をしました。以下、検索処理が動いた時に、横ヤリを入れる処理。);[/php]上記の2つの関数をfunctions.phpに定義しました。このプログラムだとバグになります。※仕事でも良くありますよね・・・あの人はこういう指示したけど、違う人が後でまた違う指示をしてきた・・・みたいな・・・指示系統が統一されてない。{」の処理が通ってしまったのかな?という思っています。以下のように修正し無事に解決しました。!is_search()」を追記して、検索処理の時は横ヤリを入れるな!とif分の条件を追加しました。);[/php]ってことで、今日はWordBench神戸の勉強会です。さんに今回の不具合を一緒に調べて頂きました。Copied!初めてのモロッコ料理♪WordPressの相談会でも良く聞かれるPHPでのIF文の書き方3パターン「エンジニアのためのWordPress開発入門」を執筆しました!WordPressを使った開発案件は依然多く、それに携わるWebエンジニアも多数存在します。モダンな開発手法に慣れたWebエンジニアがWordPressに初めて触れたとき、その独特のアーキテクチャやシステムの構成に戸惑いを感じることがあるかもしれません。WordPressは、それらを補ったうえにさらに強力なメリットを持ち合わせています。本書は、PHPプログラマがWordPressで開発する際に必要な基礎知識から、現場で役立つ具体的なカスタマイズ手法や開発のポイントについて詳しく解説しています。崇NPO法人のHP制作(WordPress)やkintoneを使った業務システムの構築をしています。メインサイトのデータは既存の、番号の付かないテーブルに格納される。12:14誤解の無いようにいうと、2つ記述したことが問題なのではなく、is_post_type_archiveの条件分岐が不十分であったことが問題ですね。これは、pre_get_postsだけではなく、通常の条件分岐タグにも当てはまるので、利用する条件分岐タグの該当条件をよく理解しておくことが重要です。ものがありますが、pre_get_postsの方がはるかに便利です。詳しくは下記の記事でめっさわかりやすく説明してくれております。→【WordPress】pre_get_postsを使ってハマりました。【WordPress】pre_get_postsを使ってハマりました。pre_get_postsも正しく使わないとハマります。上記の内容を送信をします。