Pluggable関数について【WordPress】

最近、ずっとWordPressのプラグインを作り続けているのですが、まだまだ知らないお作法や関数が多数あり、奥が深いなと思う今日このごろです。

今日、ちょっと勉強になって、今後利用しようと思った関数のお作法があったので共有。

WordPressって、フックがあるから非常に便利と思っていたのですが、フックがないと不便な部分もあるよなと思っていたのですが、テーマやプラグインの作者が自由に関数を上書きしても良いよと宣言していれば、他の方が自由にカスタマイズが出来る様になるのだなと。

それが、Pluggable関数。

詳細の説明は以下で。

Pluggable Functions(英語)

プラガブル関数(日本語)

これって、関数の競合を防止する機能がメインかと思っていたのですが、単純にこのコードを元に上書きして書き換えてもらっても良いよという宣言でもあるんですね。そういえば、過去にPluggable関数に対応しているものを上書きしてカスタマイズしたことがあったけど、本来の意味をあまり理解していなかったです。

今、自分で作っているプラグインではあまりフックとかを入れていなかったので、入れて他の人がカスタマイズしやすいように改良しようと思っていたので、合わせてカスタマイズできたら便利そうな関数もPluggable関数で対応して作るようにしようと思った今日このごろです。

 

入院と結石と私〜2016 前半

入院と結石と私〜2016 前半

どうも、この忙しい時に尿路結石という病気に苦しまされている田中です。

さて、皆様尿路結石というのを御存知でしょうか?
そうです、非常に痛い思いをする病気です。詳細の説明は以下で。

尿路結石[wikipedia]

実は私、これで4回目です。手術まで行ったのは2回。基本的には、最初の2回は手術するまでは行かなかったのですが、4年ほど前の結石と今回の結石で2回も手術する状態になってしまいました。

ちなみに初めて手術した際は約半年苦しみまして、(最初はガンの可能性があるとビビらされましたが、尿路結石だったという)出口の近くまで来たのですが、出ないので麻酔しての手術となりました。経尿道的尿管砕石術という手術です。

経尿道的尿管砕石術(けいにょうどうてきにょうかんさいせきじゅつ)

出口に近かったので下半身麻酔で済んだ分、手術中の先生たちのやり取りなどを聞けるという、ちょっと面白い経験をしました。明石では有名な先生で流石の手際と言う感じで、「こりゃ、大きくて出ないわな。今から砕くからね」と言う感じで状況を説明してくれつつ、安心して手術が出来ました。
約1週間ほど入院して、退院しました。手術後が少しだけ痛かったですが、結石が動く時の痛さに比べたら楽なもので、安定して退院出来たかなと。

んでもって、今度は4度目です。1月末に強い腰痛を覚えて、「もしかしたら!」と思ったのですが、血尿等の症状が出なかったので、違うかなと思ったら1週間後に血尿が出たので、やっぱりかなと思ってかかりつけの病院に行ったら、予想通りの展開。(爆)

「これは1cm以上あるので、市民病院で診てもらうしか無いですね」と言う事でかかりつけの病院から明石市民病院に診察に行くことに。一応、痛み止めをもらって、その日は帰って翌週に行くことに。

翌週の月曜日は広島への出張があったので、出張に行ったのですが、・・・。

そうです。痛みました。

仕事中は問題なかったのですが、夜になって急に激痛が!おう!
フロントにお願いして、救急車を呼んでもらって、宿泊費を支払って、広島市民病院に搬送されたのが午前1時。それから、自分に大腸がない事などを説明して、座薬の痛み止めが効かないことを説明して筋肉注射などの痛み止め対応をして頂いて、痛みが引いて落ち着いたのが午前6時。まあ、痛みながら数時間は処置室で寝させて頂きました。

で、朝6時に病院から放り出されて、その日も仕事があったので、時間があったのでネットカフェに入って仕事しながら時間を潰したという。プログラムとかを色々と組む予定だったのですが、遅れてしまっているという。しかも、仕事が終ってから、ちょっと痛みがありプログラムなんて組めない状態が継続で、翌朝から明石市民病院に行くことにしたのです。

ということで、前半はここまで。

WooCommerce固有ページでの条件関数

WooCommerceのプラグインを作っていたのですが、ちょっとバグが発生して、お!という事が起こって、その解決方法をみつけたので、書いておきます。

ちょっと決済周りのページで決済処理をするプログラムを書いていて、エラー処理の必要があって、エラーしたらユーザーに分かるようにwc_add_noticeという関数を使って、表示する処理をしていたのです。普通に使っていれば、問題なかったのですが、CSVファイルで注文データを取り込もうとするとStatusを登録する処理をする際に決済処理をしてしまうのでその際にエラーが出るという状態だったので。

なるほど、じゃあ、決済ページの時だけ wc_add_notice を出す処理をしないといけないという事で、WordPressでは、is_home()とかあるので、WooCommerceでも定義関数があるんじゃないかなと思って調べてみたらやっぱりありました。

ここからはこちらのページの日本語説明だと思ってください。

Conditional Tags

固有ページの条件分岐関数

基本的に以下の関数は、該当した場合はtrueを返して、違う場合はfalseを返します。

また、条件詳細指定が出来る関数はis_product_category()is_product_tag()is_wc_endpoint_url()の3つだけです。

A WooCommerce page(WooCommerceのテンプレートでshortcodeなど使われるページ全部)
is_woocommerce()

The main shop page(ショップページ)
is_shop()

A product category page(商品カテゴリーアーカイブページ)
is_product_category()
is_product_category( ‘shirts’ )
is_product_category( array( ‘shirts’, ‘games’ ) )

A product tag page(商品タグアーカイブページ)
is_product_tag()
is_product_tag( ‘shirts’ )
is_product_tag( array( ‘shirts’, ‘games’ ) )

A single product page(商品詳細ページ)
is_product()

The cart page(カートページ)
is_cart()

The checkout page(支払いページ)
is_checkout()

Customer account pages(マイアカウントページ)
is_account_page()

An endpoint(エンドポイント)
is_wc_endpoint_url()
エンドポイント全ての場合
is_wc_endpoint_url( ‘order-pay’ )
注文支払いを表示した時
is_wc_endpoint_url( ‘order-received’ )
注文受信を表示した時
is_wc_endpoint_url( ‘view-order’ )
注文表示を表示した時
is_wc_endpoint_url( ‘edit-account’ )
アカウント編集を表示した時
is_wc_endpoint_url( ‘edit-address’ )
住所編集を表示した時
is_wc_endpoint_url( ‘lost-password’ )
パスワードの再発行ページを表示した時
is_wc_endpoint_url( ‘customer-logout’ )
ログアウトページを表示した時
is_wc_endpoint_url( ‘add-payment-method’ )
支払い方法を追加(選択)した時

An ajax request(Ajaxを呼び出しているページ)
is_ajax()

関数の使用例

カテゴリーが違う場合に表示する内容を変える形での関数の例です。

if ( is_product_category() ) {
    if ( is_product_category( 'shirts' ) ) {
        echo 'Hi! Take a look at our sweet tshirts below.';
    } elseif ( is_product_category( 'games' ) ) {
        echo 'Hi! Hungry for some gaming?';
    } else {
        echo 'Hi! Check our our products below.';
    }
}

WordPress.comのサイトでコードを表示

昨日、記事を書いていたんだけど、プログラムコードを書こうと思ったんだけど、どうするんだろうと調べて分かったので、こちらも備忘録的に。

知らない皆様には情報までに。

単純にショートコードですね。以下のようなコードを書いてもらえれば大丈夫。

[code]〜〜〜[/code]

ブログ内での表示のために上記かっこは全角にしています。これを半角に変更してあげてください。

細かな言語を指定する場合は以下のようにします。

[code language=”javascript”]〜〜〜[/code]

ちなみに、ほとんどのプログラムコードに対応出来ています。

そして、ショートコードなのでわかるかと思いますが、色々とパラメーターも使えます。

詳細は以下のURLで説明されています。時間が出来たら詳細に説明してみようかなと思っています。結構技術系のブログを描く人には必須の知識だよね。

Code »Posting Source Code

javascritpで今年の表示(フッターのCopyrightとかに使う時)

基本中の基本のJavascriptなんですが、ついつい忘れてしまうというか、考えて書くのが面倒な時があるので、備忘録的にここにアップしておきます。

改行して見やすくしているバージョン

<script type="text/javascript">
<!-- 
today=new Date(); 
y=today.getFullYear(); 
document.write( y ); 
// -->
</script>

一行でやる場合。

<script type="text/javascript">
<!--
today=new Date(); y=today.getFullYear(); document.write( y );
// -->
</script>

簡単なんですが、一から書くと面倒なので。これでコピペで出来ると。

外部でWordPressの関数を使う場合の方法

いつも、覚えていようと思うのですが、ついつい忘れてしまうので備忘録として登録しておきます。

WordPressの一覧を外部で取りたいなと思った時とか、テストで取得したいなという時にPHPで呼び出す事ができます。もちろん、今はWP APIも実装されたので、APIで抜き出す事も出来るので、そちらでも良いのですが、古典的なPHPで呼び出す方法を書いておきます。

参考にしたサイトの記事
wordpress関数を外から使うにはwp_load.phpを読み込む

なんだか、タイトルのまんまなんですけど、「wp_load.php」をrequire_onceで読み込んだら大抵の関数が使えます。

これ、本当に簡単、便利。ただ、それだけ。(爆)

ブログを再開します。

ブログを再開します。

どうも、2016年になりました。と言う事で、心機一転、ブログをサーバー移行して再開することにしました。

今まで、がっつりとWordPress.comのサービスを使ったことがなかったので、実際に使ってみようかと。

色々と制限があるということは知っているのですが、やっぱり使ってみないとわからないですからね。

ということで、色々と情報を配信していこうかと思います。