web-dev-qa-db-ja.com

WC()と$ woocommerceの違いは何ですか

WooCommerceセッション変数の設定を解除したいのですが、ページロード時に使用しているフックが起動されていないため、以前のセッションデータがチェックアウト配送テーブルに入力されています。

フックコールバックからアクセスされる関数内では、WooCommerceセッションのvarにアクセスできます。

WC()->session->get('foo');

ただし、これらのコールバックの外側では、WCは未定義です。設定してみました:

global $woocommerce;$woocommerce->session->__unset('foo');経由でアクセスしたが通知を受け取りました:

非オブジェクトのプロパティを取得しようとしています

そしてエラー:

致命的なエラー:捕捉されないエラー:nullのメンバ関数__unset()への呼び出し

ですから、明らかにこの$woocommerceグローバルはWCと同じではありません(フックによって公開されていると思いますか?)

私は、チェックアウトページで起動する最初のフックの1つを使用してこれらの変数を設定解除することができると思いますが、それは私が疑問に思ったのです:

WC()$woocommerceの違いは何ですか? WooCommerceのメソッドにアクセスするには両方の方法がありますか?

2
armadadrive

wc();は、グローバルを使用する必要性を防ぐためにWooCommerceのシングルトンインスタンスを返します。

WCは$woocommerceグローバルをこのように設定します:$GLOBALS['woocommerce'] = wc();、どちらか一方を使用することは同じように思われます...

_編集_

あなたのエラーについては、$woocommerce->sessionが設定されていないのでそれらを得ました。 WCはフロントエンドまたはCRONリクエストでのみWC_Session_Handlerを初期化します。それに応じてアクションフックを選択してください。

5
ClemC