読者です 読者をやめる 読者になる 読者になる

アイデアの甕

アイデアを放り込んでおくと甕は腐臭を発しない

WordPressプラグイン『WPtouch』でカスタム投稿タイプを指定して記事を取得する際に気を付けたい事

f:id:bukki:20140803192403p:plain

 

レスポンシブデザインを意識したWordPressサイト構築を自力で行う知恵も体力もないので、とっても便利なプラグインWPtouch』にお世話になっています。

 

使用環境:

 

WPtouch無料版でもカスタム投稿タイプが利用可能

大変喜ばしいことに、かつてはプロ版のみ使用可能であったカスタム投稿サポートが今では無料版(上記環境)でも利用可能です。

 

プラグイン設定ページの「テーマ設定」にて、カスタムポストタイプサポートを有効にし、利用したいカスタム投稿タイプを有効にするだけ。

 

WPtouchのカスタマイズでハマる

WPtouchの無料版では設定ページから設定できる項目がプロ版と比較して制限されているようです。もし、何らかのカスタマイズを行おうと思えば、設定ファイルに書き加えるしかありません(が、もっとも良い方法は、Pro版にアップグレードすることです。たぶん)。

同一投稿タイプの記事を取得したい

今回、wptouch/themes/bauhaus/default/footer-top.phpファイルにて、関連記事を表示させるために同一カスタム投稿タイプを取得しようとしました。

 


【WordPress】カスタム投稿タイプの記事一覧を取得して表示するソースコード

 

上記記事を参考に、'post_type'を指定して記事一覧の取得を試みるも…うまくいかず。何故だか、'post'を含む全ての投稿タイプが取得されているようで、'post_type'が書き換えられてしまうようでした。

投稿タイプ書き換えの原因

get_posts()で取得される記事が書きかえられるのは、フィルターフックが存在しているためみたいです。

 

wptouch/themes/foundation/modules/custom-posts/custom-posts.phpの11行目

add_filter( 'pre_get_posts', 'wptouch_custom_posts_pre_get_posts' );

 

この記載によってget_posts実行前に'post_type'が全投稿タイプを指定するように書き換えられているように読める…のですが、生憎詳しいことは分かりません。

 

suppress_filtersパラメータ

色々と方法を探っている内に、下記の記載に辿り着きました。

 

suppress_filtersはフィルタリングを有効にするパラメータである。suppress_filters=trueの場合フィルタリングが有効にならない。

query_posts()とWP_Query()の場合はディフォルトがfalse(正確にはパラメーター領域は存在しない)なので問題はない。
だが、get_posts()の場合はディフォルトがtrueであり、この値も$wp_queryオブジェクトに保持される。

よって、先ほど指摘したように、pre_get_postsフィルターにフックする時などは、この点を考慮してsuppress_filterパラメーターをfalseにする処理が必要である。

query_posts(), get_posts(), WP_Query()による$wp_queryオブジェクトの違い | hijiriworld web

 

これを読むと、get_posts()の場合にはデフォルトでpre_get_postsフィルター(上記の書き換えフィルター)を適用しないことになっているそうですが、何故だか上手くいかず…なぜ?

 

属性を付加する

'post_type'が書き換えられてしまうのなら、カテゴリーやタグなど他の属性を用いて指定するのもアリかと考えましたが、カスタム投稿タイプを利用しておきながら、わざわざカテゴリーやタグなどを付加するのも楽しくないので、別の方法を考えたい。

 

フィルターフックを除去するだけで、OK!

結局、色々と方法を探し回った挙句、

 

add_filter( 'pre_get_posts', 'wptouch_custom_posts_pre_get_posts' );

 

動作前にこのフィルターフックを除去すれば良いという単純明快な答えに辿り着き、get_posts()の前に以下の記載をすることで問題は解決しました。

 

remove_filter( 'pre_get_posts', 'wptouch_custom_posts_pre_get_posts' );

 

ワードプレス初心者の理想的な学習課程?

基礎的な事柄の大枠を理解した上で応用に取り組む。そんな強いやり方が望ましいようにも思われますが、実際のところ実現は難しいですね。

 

いつだって学習は、必要から行われた方が効率が良いように思われます。もちろん今回の解決法が最善かどうか判断もつきませんが、とりあえずやりたいことが達成できれば上出来、上出来(本職の人に言えばドヤされるかもしれませんが…)。

 

という訳で、フィルターフック、アクションフック周りのことをもっと知る必要があると思いましたので、後学習として下記サイトを読んでみる。

 


WordPressをカスタマイズするなら覚えておきたいアクションフックとフィルターフック

 

事前にこれを知ってたら2日がかりで解決した今回のカスタマイズも、2時間かからず終わってたかもな、と“強い方法”への憧れは消えませんが、まぁそれもご愛嬌ってことで。

 

※追記

今回の記事で行った操作の副作用、かもしれない(違うかもしれない)。


WordPressプラグイン『WPtouch』のカスタム投稿タイプ記事でシングル表示(single.php)がおかしい - アイデアの甕

 

目だけは大事に

日常的にパソコンを見つめ続けているウェブマスターさん、ウェブデザイナーさん、ブロガーさん。イライラしがちなWordPressのカスタムをカフェインなど摂取しながら自らの精神に鞭打ちつつ粛々とこなされていることかもしれません。が、しかし。

 

目を休めることだけは忘れないでください。五年十年、いやもっと働かないといけないのならば、目の疲れからくる身体のダルさを侮ってはいけません。

 

 

身体が資本とはよく言いますが、視力も大事な資産です。ぼやけてヤバい、目を薄めないと画面が見づらいなどの症状が現れる前に、早めの対処を。