WooCommerce 住所変更 あれっ ?

今、開発を進めているのは

WooCommerce バージョン 3.1.2

現時点での最新バージョンを使用しています

商品の購入者となってテストしていて、気が付いたのですが

マイアカウント で 請求先や配送先の住所情報を変更して保存しても

注文するときに表示される住所情報に反映されてない (>_<)

試しに一度ログアウトして再ログインしてみると

今後は反映されてました わぁお~ びっくりした


ネットでいろいろ調べてみると

英語の投稿に同様の問題に遭遇した人がいて

あれやこれやとアドバイスしている内容が結構面白いです。。。

どうも

/woocommerce/includes/data-stores/class-wc-customer-data-store-session.php

のコードを修正することで対処できるとのこと

Github に修正コードが掲載されてました

https://github.com/woocommerce/woocommerce/commit/f2b90d61639f5eeec07c09844d1e0b86aef52669?diff=split

実際、この通り 修正して確かめてみると 確かに問題が解消されました !!!


話はこれで終わりではなく

さきほどの「アドバイスが面白い」ですが

  • プラグインのコアのファイルを直接触るな・・・
  • なら、どうすりゃいいの・・・
  • 子テーマに配置したら・・・
    • ★ テンプレート (templates)配下のファイルであればこれが有効打のよう
    • でも、includes配下のクラスファイルでは、この手は使えないようです
  • フック(Hook) のアクションかフィルターを 使ったら・・・
    • 具体的な方法までは言及されてませんでした

話はここで終ってました


少し時間があったので

これまで耳にはしたけど、あまり真面目に見てなかった フック(Hook)を勉強してみました

  • フックの概念をかじって
  • WooCommerce で Action and Filter Hook Reference というのに辿り着きました
    • class-wc-customer-data-store.php には action hook が定義されてました が・・・
    • class-wc-customer-data-store-session.php には、action も filter Hook も定義されてませんでした・・・
  • フックが無い時はどうすればいいの。。。と思いつつフックの動作を試してみようということで 
  • class-wc-customer-data-store-session.php の function read に do_action( 'woocommerce_xxxx' ); でフックを加えてみました(コアのファイルを修正するので本末転倒ですが。。。)
  • 子テーマのfunctions.php に add_action と  適当な function を 定義(メッセージをecho )して実行してみると
    • 確かに、呼び出されて メッセージが画面に表示されました 
    • なるほど、これがフック (Action)ですね
  • ただ、この方法でも、実際の修正は、元々あるロジックを上書きしないといけないので、インサートというよりはオーバーライドになります
    • いろいろ引数を渡したりしてやってみましたが、なかなか思うように動いてくれません

とりあえず、何となくフックが分かったところで一旦休憩


まぁ本番に入る前には WooCommerceがバージョンアップされて、修正コードが適用されるでしょう・・・

適当な上書き方法がまだ分かっていませんが、とりあえず コアファイルを直接修正しました (;^ω^)

 




おすすめ