WooCommerceの定期購入のAction hook -その1-

WooCommerceの定期購入のAction hook -その1-

定期購入のプラグインを色々と開発しているので備忘録がてら、こちらで公式サイトの内容を翻訳します。定期購入のプラグインを作ろうと思っている健気な方はご参考にいただければと思います。爆

結構大変です。ちなみに、一般的な決済に関する部分は2016年5月現在では頑張って下さい。私が将来余裕が出て作ることが出来たら説明ページを作るかもしれませんが、今の所作る予定がないので。

では、以下のページの翻訳(誤訳があったらゴメンなさい)です。

Subscriptions Action Reference

アクションフック名 : ‘scheduled_subscription_payment’

フック説明 : 定期決済が定期的に行われる際に必要です。例えば、毎年50ドルの定期購入の場合、このフックは1年に1回、最初の購入した時に実行されます。的購入のsubscription_key と user_id は、このアクションにフック関数を通して渡されます。


アクションフック名 : ‘scheduled_subscription_payment_{$gateway_id}’

フック説明 : ‘scheduled_subscription_payment’アクションのように定期購入の支払が行われる度に実行されます。違いはこれは決済方法ごとに対応を変えることができるということです。渡されるパラメーターも変わります。subscription_key と user_id の代わりに、$amount_to_chargeで支払総額(様々な商品代以外の価格を含んで)を渡し、購入された定期購入はWC_Order オブジェクトに含まれ、 WC_Product のIDが定期購入商品です。


アクションフック名 : ‘scheduled_subscription_expiration’

フック説明 : WP-Cron の処理が実行され、定期購入の期限が切れる場合に実行されます。 定期購入の subscription_key と user_id がこのアクションにフック関数を通して渡されます。


アクションフック名 : ‘woocommerce_subscriptions_activated’

フック説明 : WordPressのサイトで WooCommerce Subscription plugin が有効化された時に一度だけ実施されます。


アクションフック名 : ‘woocommerce_subscriptions_deactivated’

フック説明 : WooCommerce Subscription plugin が無効化された時に一度だけ実施されます。


アクションフック名 : ‘woocommerce_subscriptions_product_options_pricing’

フック説明 : 管理者ページで商品価格オプションが編集された時に実行されます。


アクションフック名 : ‘activated_subscription’

パラメーター :
$user_id Integer 定期購入が有効になった人のユーザーID。
$subscription_key String ユーザーアカウント上で有効になった定期購入のキー。

フック説明 : $subscription_keyで特定され、$user_idで有効であると特定された定期購入に関してこのアクションはトリガされます。


アクションフック名 : ‘cancelled_subscription’
パラメーター :
$user_id Integer 定期購入がキャンセルされた人のユーザーID
$subscription_key String 定期購入がキャンセルされた定期購入キー

フック説明 : 定期購入が管理者によってキャンセルされたり、決済システム側でキャンセルされたり、ユーザーアカウント上でキャン申された時に実行されます。


アクションフック名 : ‘subscription_end_of_prepaid_term’

パラメーター :
$user_id Integer 定期購入がキャンセルされた人のユーザーID
$subscription_key String 定期購入がキャンセルされた定期購入キー

フック説明 : 定期購入がキャンされるされた後に、現在稼働している定期購入が終了する時に実行されます。例えば、毎月更新の定期購入を3月1日に購入していた人が、3月15日にキャンセルするとその時に’cancelled_subscription’が実行され、購入完了している定期購入が終わる4月1日に’subscription_end_of_prepaid_term’が実行されます。バーチャルな商品、例えば会員費用などを定期購入で利用されている場合は’cancelled_subscription’フックよりも、このフックを使ったほうがいいです。’subscription_end_of_prepaid_term’フックは内部的にキャンセルの際のユーザーの権限を変更に使われています。


アクションフック名 : ‘subscription_expired’

パラメーター :
$user_id Integer 定期購入の有効期限が切れているユーザーID
$subscription_key String ユーザーアカウントでの有効期限が切れている定期購入キー

フック説明 : 定期購入を購入した時に設定されている期間が満了した時に実行されます。このイベントはWooCommerce Subscriptionsがcron-jobによって有効期限が切れているそれぞれの定期購入に対して、また決済プラグインによってWC_Subscriptions_Manager::expire_subscription()関数から直接実行されます。


アクションフック名 : ‘subscription_put_on-hold’

パラメーター :
$user_id Integer 定期購入の所有者のユーザーID
$subscription_key String 保留にされた定期購入のキー。

フック説明 : 定期購入が保留(一時停止)された時に実行されます。定期購入が捕虫される時とは以下です。

店舗管理者が手動で定期購入を一時停止した時。
購入者がアカウントページで手動で定期購入を一時停止にした時。
(定期購入が自動更新で一時停止になった際に、次に手動で支払いが行われるまで一時停止することもあります。詳細は定期購入の更新ガイドをごらんください。)

入院と結石と私〜2016 中編

入院と結石と私〜2016 中編

どうも、田中です。病院から書き込むという事態になっております。(笑)
なんだか、書いていたら結構な長文になっていました。ご容赦を。

尿路結石に苦しまされるだけならいざしらず、なんとインフルエンザにも苦しまされるという、とんでもない状態になってしまいました。泣きっ面に蜂とは、こういうことを言うのかなと心折れながら手術を待っております。そうなんです。本日再手術です。

さてさて、前回どこまで書いていたっけ?

そうそう、広島で痛みが出て、その後病院に行ったという話ですね。病院に行きましたら、Y先生から「これは、大きいね。もう、今日手術しちゃう?」的なナンパされるような感覚で手術を促されてしまって、一瞬「はい?」という状態だったのですが、「ナンパされる人はこんな風な感じだったのか?」とか、わけの分からないことを考えながら「早めに治るなら、さっさと手術した方が良いか」と思って手術しました。その手術が以下の手術です。

体外衝撃波結石破砕<ESWL>

簡単に説明すると、体の外(背中の下腹部)から衝撃波を毎秒1回程度で約1時間当て続けるという手術というか処置というか。一応れっきとした手術です。衝撃波を当てられる時の感覚は、背中にゴムパッチンされているような感じです。痛みに関しては個人差が激しいようで、私はまあまあ痛かった方なのか、最初は全然だったのですが、30分ぐらいしてくると急に痛くなってくるという、奇妙な痛み方を体験しました。やはりこの痛みに対しては個人差が激しいようで、先生曰く「痛い人は痛い、痛くない人は痛くないよ」と当たり前なんですけど、納得できるご説明を頂きました。

で、手術が終って、通常であれば半数以上が、結石が砕けて、オシッコで出てくるのを待つという状況なのですが、、、、。日頃の行いが悪いのでしょうか?見事にちょっと削れただけであまり変わらずで、強力な痛み止めを連日使って仕事をするという、集中力も持続できないし、痛みで睡眠時間も少ない上に薄いしという状態を1週間ほど我慢して病院に行った所、「こりゃ、硬いは。もう次の手術するしか無いね。」とあっさり『経尿道的尿管結石破砕術(TUL)』を実視することが決定。その準備として、『尿管ステント留置術』という手術をうけることになりました。また、こちらも、前回のナンパ的対応と同じ「今日やってく?」みたいな感じでその日にすることに。

尿管ステント留置術関連情報

これが、ちょっとだけ誤算。手術自体は予想通りの痛さだったのですが、手術は普通簡単に10分ぐらいで終わるらしいのですが、約40分ぐらい?先生二人で「おかしいねえ〜」「なんでかな~」とか言いながら手術。そうなんですよ、局部麻酔なので先生たちのやり取りが聞こえて、先生たちの実況中継付き。まあ、原因は手術の初期の段階で判明したのですが、私が大腸全摘手術をしていて、大腸って内臓の中では結構デカイものなので、それを全部取っちゃうと内臓の配置がやっぱり少し変わっちゃうんですね。それで尿管が通常なら真っ直ぐなのですが、グネグネ曲がっているということなんです。

「こうかな?こっちからかな?」「あ、先生痛い!」とかの艶めかしいやり取りをやりながら、最後に貫通した時は「おおおお!いった!」等と先生も喜ぶ始末。笑 現場で医者と患者の一体になった手術でした。爆

で、なんとなく予測できる方は出来るかと思うのですが、この処置は通常あまり副作用がないのですが、尿管が曲がりくねっている私の体では、予想はしていましたが、副作用として背中に激痛が走り続けるという事態が。手術後数日は特に問題なかったんですけど、ちょっと経ってからでしょうか、急に背中が痛くなって、ただの年で背中が痛む(40代超えた人には経験者が多いかと思います)のかなと思って、最初はシップを貼ったりしていたのですが、全然治らないし、加えて不思議な現象が。お昼起きている時は痛みが弱まってきて夜頃には少しの違和感しかなくなるのですが、一晩寝ると起き上がれないほど痛くなるという。最初は「俺は寝相がそんなに変なのか?」とか思ったのですが、ググってみたら尿管ステントが原因での背中痛があるとあったので、病院に電話して翌日に病院で検査を受けることに。ただ、この病院に検査に行くという事自体も次の悲劇の引き金に。(T_T)

それはさておき、病院で検査をしてもらったら、立っている時と寝込んでいる時で尿管の形が変わってしまっているようで、それで夜の間に悪化して痛むという。こんな所で昔の大手術の隠しワザが出てくるとは。これも、大腸が無い私特有の問題でして。まあ、手術する予定だし、それまで我慢しようかということで、痛み止めをもらって手術を待つことになったのですが、痛み止めをもらってもある程度は痛いわけで、睡眠もやっぱり浅くなってしまって仕事の集中力は低下しまくるという。手術するまでにやっておく予定の仕事が遅々として進まず。はい。この部分は納期が遅れてしまって、お詫びをさせて頂きました方々への言い訳です。すいません。m(_ _)mあと、ご理解頂いております皆様への感謝でございます。

そして、手術日の前日になったので入院することになったのですが。なんか、喉が少し痛いなと。急遽マスクをして、入院して先生にも「ちょっと喉が痛いので」と伝えた所、「腫れているね、風邪かな。」と言われて、「ちょっと困ったな〜」と。「ん?」と私が思っていた所、今回の手術は全身麻酔なので、息を自分で出来なくなるので人工呼吸器を付けるんですね。その時に喉が腫れていると人工呼吸器の喉に付ける部分が付けれないらしいんですよ。そうなると、半身麻酔で手術をしなくてはいけないらしくて、どうする?と。先生曰く「やったこと無いから分からないけど、痛い人は痛いと思うけど、痛くない人は痛くないと思うよ」とこれまた分かりやすい説明を受けて、私もこれ以上仕事が遅れるのも辛いと思って「我慢しますので、手術をお願いします。でも、本当に痛くなったら途中で止めてね。」という形で同意して手術をする方向で話が進んだんです。これだけでも、運が悪いなあ〜と言う感じなのですが、これだけで終わらないのが、ここ最近の私の不運さ。熱が何故か下がらないんですよ。37.5ぐらいだった熱が38.1ぐらいまで上がって、念の為にインフルエンザの検査もしてもらったのですが、入院当日は陰性。喉も腫れているので、ちょっと違うかなと。

と、痛みをガマンしないといけないと自分に言い聞かせつつも、熱が下がらずちょっとしんどい上に、背中の痛みが容赦なく襲ってきて、「でも負けない」とか思って翌朝になって、念の為のインフルエンザの再検査を行ったら『B型陽性』。(T_T)先生曰く「そういえば、この前診察に来た時、インフルエンザの患者さんが病院にすごい数来ていたんだよね。感染したのは、その時かな。」と。確かにその日は病院に行ったのに、3月だからと油断してマスクをしていなかった。今年のインフルエンザは3月も流行していたのでした。(T_T)

「インフルエンザだと、院内感染対策上、手術もできないし入院もできないから今日帰って。」と。私のあの固い決意も虚しく、すぐさま自宅療養へ。しかも、今回のインフルエンザ、高熱はある程度すぐに下がったのですが、微熱が収まらず。しかも、自宅の隔離部屋ので、子供達が近くにいるのに一緒に遊べないという悲しい時間。その上、背中の痛みが続いているしで、何も出来ないまま5日ほど病床に伏せっておりました。しかも、後半は血尿も出始めるし、心身喪失状態。1週間ほど寝たままだと、足の力も落ちてきて少し移動するのもしんどいという。一度、神戸に打合せに行くだけど、息切れするわ、血尿がひどくなるわで。でも、仕事もしなくてはいけないし。とあまり頭の使わない仕事をメインで1日ほどこなしつつ、再入院へ。

と本日に至るという感じです。
言い訳ですが、ほぼ1週間以上仕事らしい仕事が出来ていないかと。通常一日寝る時間と家族と過ごす時間以外は全て仕事をしているので、この仕事できない時間における損失はなかなかデカイものです。

本日、全身麻酔で手術が出来るのか、半身麻酔になるのか、まさにどういう形で手術するのか全くわからない状態です。

お分かりかと思いますが、今回のブログ、ご迷惑をお掛けした皆様へのお詫びも込めて、ある程度詳しく書かせて頂きました。こんな私ですが、手術が無事に終わった暁には、全力で対応致しますので、ご理解の上、よろしくお願い致します。

では、数日後に最終編になるはず、後編を書かせて頂きたいと思います。
それでは、しーゆー。

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>

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