WordPressの条件分岐をもちょっと便利にする関数作ったよ

2012年12月03日

さぁみなさん12月ですよ。師走です。しわっす(「あと2日しかないけど年末限定の挨拶 – 頭ん中」で知りました)。

12月といえばAdventCalenderの季節ですね。まだ2日目なんですが、読みたいブログが急増して困ってます。時間くれ!時間!どんなAdventCalenderがあるのかは「rgfx: 今年もTech系はアドベントカレンダーの季節」を見ると良いかもですね。全部書いてる訳じゃないでしょうが、参考にはなるかと思います。

と言うわけで、僕も何か書きたいと思うわけですが、今年もWordPress Advent Calendar 2012 : ATNDで書かせてもらいたいと思います。しかも今回はあのまがりんさんと同じ日ということで実はかなり光栄に思ってる次第です。「俺はまがりんさんと同日にAdventCalender書いたんだぜ!」って孫の代まで語り継いでやろうと思ってます。

本題

WordPressを使っていると、条件分岐って楽だなーとよく思います。例えば、is_home ( ) とか。ホームページだけに何かを表示したいケースは凄く多いですよね。こういう、「is_xxx ( )」で簡単に「このコードはここにだけ表示させたい」を簡単に実現できるのはステキだなぁと思います。

人間の業は果てしない

でも、色んな案件でWordPressを使い出すと、こういう条件分岐タグでは微妙に実現できないケースが色々とあるねー、とちょと思うようになりました。便利だ便利だってありがたがってたのは最初だけで、次々と要求を出すようになるわけですよ。

例えばこれができない

  • 特定のブラウザの場合
  • 特定の固定ページの子ページの場合
  • 特定の投稿タイプ

こんなのができないかなー、と思います。三個目の「特定の投稿タイプ」に関してはほとんど同じ事が「 get_post_type() === ‘カスタム投稿タイプ名’ 」でできるんですが、何となく「is_xxx()」にしたいなぁと思ってるので一応できないと仮にさせてもらいました。させてください、…今だけで、良いから。

だから作った

色々作ってみましたよ。まずはジャブ的にブラウザの条件判定。

ブラウザ判別

is_ie ( ) // IEだったらどのバージョンでも
is_ie6 ( )
is_ie7 ( )
is_ie8 ( )
is_ie9 ( )
is_ie10 ( )
is_firefox ( )
is_chrome ( )
is_safari ( )

これは単純に「IEにだけ表示させる」とかをいっぱい作りました。UserAgent
で判別してます。IEに関してはバージョン別もないとあんまり意味がないかな?と思っておまけ的に作りました。

端末判別

is_ios ( )
is_iphone ( )
is_ipad ( )
is_android ( )
is_androidtablet ( )
is_windowsphone ( )
is_smartphone ( )
is_tablet ( )

これは上のとあんま変わらなくて、モバイル端末用の条件分岐も作りました。

本家にも「 wp_is_mobile ( ) 」という関数があるんですが、確か細かい分岐はできなく、かつ iPad もモバイルとして扱われるので色んな分岐が出来るように作りました。これもUserAgentで判別してます。

一応結構細かめに作りましたが、RWDとかだったらあんまりいらないですかね。そんな事ないですよね。

機能サポート判別

is_svgSupport ( )
is_alphaPngSupport ( )
is_html5Support ( )

使うかどうか分からんけどせっかくブラウザ判定作ったし、「html5をサポートしているブラウザかどうか」とか作れるかな?と思って作りました。

WP関数の拡張

ここからがWordPressの関数を拡張する感じです。

is_post_type ( ) //←指定した投稿タイプか否か
is_single_type ( ) //←指定した投稿タイプの個別ページか否か
is_parent_cateogory ( ) //←指定された親カテゴリに属するか否か
in_page ( ) //←指定した固定ページか、その子ページか否か

なんだよ is だけじゃねーじゃんか! in もあるじゃねーか!

まぁ良いやん、気にせんといて。

で、なんでこれを作りたいと思ったかというのは、以下のような感じにしたかったから。

こんな感じにしたい

/*
 * // ホームページ
 * is_home() ホームか否か (既存)

 * // 投稿タイプ判別
 * is_post_type( ) 投稿タイプ判別

 * // 個別記事
 * is_single( )  個別記事か否か (既存)
 * is_single_type ( ) 個別記事か否か(投稿タイプ別)
 
 * // アーカイブページ
 * is_archive ( ) アーカイブページか否か (既存)
 * is_post_type_archive ( ) 記事タイプ毎のアーカイブページか否か(既存)

 * // カテゴリー関連
 * is_category( ) カテゴリーのアーカイブページか否か (既存)
 * in_category( ) 現在の投稿に指定したカテゴリーが割り当てられているか (既存)
 * is_parent_category( ) 指定された親カテゴリに属するか否か

 * // 固定ページ関連
 * is_page( ) 固定ページか否か (既存)
 * in_page( ) 指定された親固定ページに属するか否か
 * is_subpage( ) 指定された親ページの子ページか否か
 */

いかがでしょ。もしかしたらすでに関数が存在するのもあるとは思いますがまぁそん時は許して下さい。

プラグインにしました

ホントはPHPファイルだけぽいっと置こうかと思ったんですが、何となくプラグインにしてみました。なんかプロっぽいしね。

なんか、テーマで使う関数を拡張するプラグインってあんまり知らないんだけどこういうのって需要あるのかなぁ。まぁ良いか。使えると思う人がいれば良いなぁと思います。

sutekIS

ソースについても色々書こうと思ったんですが本気で書いたら誰も読んでくれない量になるので、お手すきの際に読んで頂ければ良いかなぁと思いました。

アドベントカレンダー

このブログはさっきも言ったけど「WordPress Advent Calendar 2012 : ATND」の3日目です。昨日の直子( @naokomc )さんの「WordPress テーマ開発4つのアプローチ #wacja2012 – ja.naoko.cc」とかすげーなぁと思いました。全然知らない手法が惜しみなく書かれていて、それが1ヶ月毎日出てくるわけですよ。すげくね?

僕はたいしたことが書けないので、今日書いてるもうひとかたのまがりん( @jim0912 )さんや、明日の星野( @khoshino )さん、Mizuno( @ounziw )さんをはじめ、他の方の記事はチェックすべきなのかと思いますね。2011年とか、何か一通り読んだらWordPressでサービス作れそうな勢いのクオリティ記事がいっぱいありましたよ。

ついでに

そんな僕ですが、そろそろ今の会社を辞めてフリーになることが大体決まった感じです。なんでそんなこと書いてるかというと、2011年のWordCampTokyoで知り合った @xxeimixx と一緒にユニットを組んでWeb制作全般をやっていく感じなので、WordPressすげくね?と思ったので何となくこじつけてみました。そんなこんなで今後ともなにとぞよろしくお願いしますね。

他にこんな事も書いてます

FBでコメント

27個のコメント

  1. WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/2CYUIyKm http://t.co/2CYUIyKm

  2. もうすぐ読む。 RT @anticyborg: WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/p3EziVvF http://t.co/p3EziVvF

  3. こういうことをやっているのをちょいちょい見ていて、PHPってイイな、と思う。/SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/UPMWyzNc @anticyborgさんから

  4. @gatespace_k より:

    たまには is_singular も思い出してあげてください。
    via. SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/3rKOnBq1 @anticyborgさんから

  5. SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/RfT8RhOx @anticyborgさんから ….後でゆっくり読む!

  6. @hisax23 より:

    欲しかったネタだw φ(..)メモメモ / “SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012” http://t.co/ddgDec4o

  7. @wPGnews より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/VhvDt2yW

  8. @aistear_tech より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/t5aPOyKm @anticyborgさんから 便利そうだ。

  9. @w3qreader より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012
    http://t.co/O3pvfSIX

  10. @lifehack_bot より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/kvf2ezSF #ライフハック #生活の知恵

  11. @WebDevelopBot より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/H6YLXACb

  12. @browser_news より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/B4jikx7Y

  13. @aWebprogrammer より:

    “SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012” http://t.co/NRz3uKXB

  14. SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/2oSwOUoW

  15. SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 さぁみなさん12月ですよ。師走です。しわっす(「あと2日しかないけど年末限定の挨拶 – 頭ん中」で知りました)。12月といえばAdv… http://t.co/KJERx8Z6

  16. @mo_u_kaeru より:

    WP:条件分岐を拡張するプラグイン!
    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/v4989sM4 @anticyborgさんから

  17. @kabochao より:

    “SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012” http://t.co/5cga5clY

  18. @PrimaryText より:

    [wordpress] / “SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012” http://t.co/7yWTsPqi

  19. @devolen より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/SShFUlra

  20. @waviaei より:

    「…2011年のWordCampTokyoで知り合った…」それは何より / SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/qy67EUZ3

  21. WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/DL02SrSY

  22. @yuuichi より:

    プラグイン化されてすぐに使えるのがいいですね。 / “SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012” http://t.co/BAPUKcUB

  23. @HissyNC より:

    似たことするけど、汎用的な名前の関数はアップデート時に衝突が不安だし他人が保守する際に気づきにくいので、できるだけプリフィクスを付けてる。 – WordPressの条件分岐をもちょっと便利にする関数作ったよ http://t.co/jluC3Bac via @anticyborg

  24. @nxworld_net より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/NROiMlLn via: @anticyborg

  25. [*wordpress] / “SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012” http://t.co/D2GKBeiX

  26. @yokotak0527 より:

    slug_to_idというメソッドがないっぽい? SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ #wacja2012 http://t.co/dayWetai @anticyborgさんから

  27. @wpcomnet より:

    SS | WordPressの条件分岐をもちょっと便利にする関数作ったよ http://t.co/QgpNRebT @anticyborgさんから

トラックバック/ピンバックはありません。