web-dev-qa-db-fra.com

Quelle est la différence entre WC () et $ woocommerce

Je souhaite supprimer certaines variables de session WooCommerce car, lors du chargement de la page, les points d'ancrage que j'utilise n'ont pas été déclenchés, ce qui laisse les données de la session précédente remplies dans la table d'envoi.

Au sein de toutes les fonctions accessibles à partir des points d'ancrage, je peux accéder à des vars de session WooCommerce tels que:

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

Cependant, en dehors de ces rappels, WC n'est pas défini. J'ai essayé de mettre en place:

global $woocommerce; et en accédant via $woocommerce->session->__unset('foo'); mais avec le message suivant:

Essayer d'obtenir une propriété de non-objet

et l'erreur:

Erreur fatale: Erreur non capturée: appel à un membre fonction __unset () sur null

Donc, clairement, ce $woocommerce global n’est pas le même que WC (qui, je suppose, est exposé par les crochets?)

Je pense que je peux désélectionner ces variables en utilisant l'un des premiers hooks qui se déclencheront sur la page de paiement, mais je me suis demandé:

Quelle est la différence entre WC() et $woocommerce? Ne sont-ils pas les deux moyens d'accéder aux méthodes WooCommerce?

2
armadadrive

wc(); renvoie l'instance singleton de WooCommerce afin d'éviter l'utilisation de globals.

WC définit le $woocommerce global de la manière suivante: $GLOBALS['woocommerce'] = wc();, donc utiliser l’un ou l’autre semble identique….

MODIFIER

A propos de vos erreurs, vous les avez obtenues parce que $woocommerce->session n'a pas été défini. WC initialise WC_Session_Handler uniquement sur les requêtes frontales ou CRON. Choisissez votre crochet d'action en conséquence.

5
ClemC