Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Hashtags
    3. woocommerce
    Accedi per postare
    • Topic
      Post
      View
      Votazioni
      Post
      Attività
    • L

      WooCommerce Blocks: traduzione in Italiano
      CMS & Piattaforme Self-Hosted • woocommerce polyglots • • LucaOrtu  

      12
      424
      Visualizzazioni
      0
      Votazioni
      12
      Post

      overclokk

      @lucaortu Qui ti posso aiutare poco per questo ti dico di chiedere direttamente ai #polyglots dal quale potrai ricevere un aiuto migliore del mio.

    • g.lanzi

      WooCommerce API: ordine senza alcuni metadati
      CMS & Piattaforme Self-Hosted • woocommerce api metadati • • g.lanzi  

      34
      1077
      Visualizzazioni
      0
      Votazioni
      34
      Post

      overclokk

      @g-lanzi Proviamo in questo modo:

      Per esempio la funzione wc_get_order( $the_order = false ) mi ritorna @return bool|WC_Order|WC_Order_Refund vedi che già qui abbiamo 3 controlli da fare:

      https://woocommerce.github.io/code-reference/files/woocommerce-includes-wc-order-functions.html#source-view.78

      Idem avremmo dovuto fare per $order_id, usare wc_get_order non ti da nessuna sicurezza sul risultato, troppe variabili, puoi benissimo rimanere su $order_id e fare il check su questo, ora so che la documentazione ti dice così ma siccome io non mi fido di nessuno e voglio essere sicuro al limite della paranoia che il risultato sia quello aspettato verifico tutto, come ho detto sono paranoico ma questo mi assicura di lavorare meno dopo.

      Torniamo a cosa vogliamo che sia $order_id, cosa ci promette la documentazione? Ci promette un integer o un post? Se parliamo di \WC_Order ci promette un integer https://woocommerce.github.io/code-reference/classes/WC-Data.html#method_get_id

      Quindi o mettiamo un type nella signature, int in questo caso:

      function aggiorna_campi_acf( int $order_id ) {}

      Ma questo ti potrebbe generare un TypeError da PHP https://www.php.net/manual/en/class.typeerror.php

      Che però sarebbe il sistema best practice.

      O fai un banalissimo:

      function aggiorna_campi_acf( $order_id ){ if( ! \is_int( $order_id ) ) { // E qui ritorni un errore o qualcosa che ti indichi il problema // Non fare altro, ritorna subito } ... il resto del tuo codice }

      Poi abbiamo il caso che l'ID sia 0, e come sappiamo 0 non esiste come post quindi devo controllare anche questo, raro ma può capitare.

      Volendo potresti fare un casting di $order_id su int:

      function aggiorna_campi_acf( $order_id ){ $order_id= (int) $order_id; ... il resto del tuo codice }

      In quest'ultimo caso verifica che l'ìID non sia 0 perche se ti passano valori strani hai uno 0.

      @g-lanzi ha detto in WooCommerce API: ordine senza alcuni metadati:

      Adesso non dovrei avere problemi.

      Non possiamo saperlo.

      @g-lanzi ha detto in WooCommerce API: ordine senza alcuni metadati:

      Se la thank you page non viene visualizzata, ma l'ordine creato, come detto anche prima, ho un filtro nell'algoritmo che coglie questa cosa e pone rimedio.

      A che livello hai questo check?

      @g-lanzi ha detto in WooCommerce API: ordine senza alcuni metadati:

      I campi sono creati da ACF e il plugin ha questo comportamento per cui non salva i campi a meno che non venga usata l'azione acf/save_post, che però non scatta alla creazione dell'ordine, ma quando viene salvato il post. (https://www.advancedcustomfields.com/resources/acf-save_post/).

      Tutti i fields sono slavati al salvataggio del post, è un comportamento normale di WP, ma quindi sono a livello di prodotto e non di ordine? Perché i fields che l'utente compila (indirizzo e così via) vengono salvati ad ogni ordine.

      @g-lanzi ha detto in WooCommerce API: ordine senza alcuni metadati:

      Quindi, il fatto che i metadati ACF non siano subito disponibili è un comportamento atteso, che ho aggirato con lo snippet qui sopra.

      Ma tu lo aggiri a valle, non a monte. se tu metti un default nella risposta non hai neanche bisogno di salvare nulla.

      @g-lanzi ha detto in WooCommerce API: ordine senza alcuni metadati:

      Per quello che riguarda i test, sono stati effettuati in un sito di test con le medesime impostazioni, da cui venivano estratti i dati ordine tramite API. Forse non la più elegante delle soluzioni, ma in fondo funzionale :-). Quello che potevo testare senza scrivere codice che avrebbe potuto rompere il sito, lo facevo in produzione.

      Quelli non sono i test di cui parlo, io dico questo genere di test fatti per esempio con PHPUnit https://phpunit.de/

    • g.lanzi

      Registrare campi personalizzati del checkout nelle API
      CMS & Piattaforme Self-Hosted • woocommerce api metadati integromat • • g.lanzi  

      12
      417
      Visualizzazioni
      0
      Votazioni
      12
      Post

      g.lanzi

      #woocommerce #api #integromat #metadati

      Ho trovato un modo più sicuro per selezionare il metadato corretto dalla risposta del modulo di WooCommerce. È applicabile a tutte le collezioni di array:

      Collezione array tipo:

      "metadata": [ { "Meta data ID": "23456", "key": "_billing_piva", "value": "IT-09876543210" } { "Meta data ID": "9873687", "key": "_billing_pec", "value": "[email protected]" } ]

      Usare l'indicizzazione dell'array è possibile, ma è sconsigliato. Per questo, si dovrebbe cercare dove si trova il valore corretto e poi prelevarlo. Con questa formula si ottiene questo:

      {{get(map(13.metaData; "value"; "key"; "_billing_pec"); 1)}}

      Qui una spiegazione dalla documentazione di Integromat che spiega sicuramente meglio di me: https://www.integromat.com/en/help/mapping?fbclid=IwAR0kAd_75itJ_LIpBDKNF7zWGNEANKOeO4c-s0Ss13q-i20n-bwzIOZB3H4

      In questo modo è possibile recuperare il dato desiderato dall'array metadati, a prescindere alla posizione nell'indice, ma basandosi sul nome (o sulla key) della collezione.