Cum adaugam custom meta field pentru produsele variate din WooCommerce

Share

M-am lovit de aceasta problema acum cateva zile in timp ce lucram la un modul care face conversie din valuta in RON, pentru a obtine asta, aveam nevoie sa adaug la fiecare variatie a produsului doua campuri custom: un select si un text input.

Solutia a fost gasita initial de Remi Corson eu numai o traduc si o explic in limba Romana.

Incepem prin adaugarea a doua functii pe hook-urile oferite de WooCommerce.

Functia care inregistreaza field-urile trebuie sa fie adaugata pe hook-ul “woocommerce_product_after_variable_attributes” si functia care salveaza field-urile va fi adaugata pe hook-ul “woocommerce_save_product_variation”.

Pentru a inregistra un nou field, ne folosim de functiile deja disponibile in WooCommerce:

  • woocommerce_wp_text_input()
  • woocommerce_wp_textarea_input()
  • woocommerce_wp_select()
  • woocommerce_wp_checkbox()
  • woocommerce_wp_hidden_input()

Fiecare input are urmatorii parametri generici:

  • id – Id-ul field-ului, trebuie sa fie unic, in exemplu se adauga id-ul variatiei – string
  • label – Numele field-ului – string
  • desc_tip – bool
  • description – Daca dorim descriere o sa setam “desc_tip” pe true si aici v-om completa descrierea – string
  • value – valoarea actuala a field-ului – string

Salvarea field-urilor se face cu functia update_post_meta(), aici este si codul complet:

[gist id=”289e00a1bc3dcb3b3a26″]

Share

5 Comments on “Cum adaugam custom meta field pentru produsele variate din WooCommerce

  1. Inainte de salvarea in DB a optiunilor, as recomanda folosirea sanitize_text_field sau wc_clean (functie inclusa in woocommerce, fiind wrapper pt sanitize_text_field care sa permita sanitizarea elementelor unui array) pt inputs/selects si wp_kses_post pt textareas. Spun asta pentru ca am vazut folosit esc_attr si ar trebui folosit pt output sanitization.

    • Exista sanitize builtin pe update_post_meta, deci recomandarea ta nu prea e buna, se face esc la output in functie de tipul continutului si locul unde vrei sa-i faci output, dar la input se ocupa wp de tot.

      • Hm…haideti sa vedem
        – update_post_meta observ ca nu are sanitize, a se vedea in wp-inclus/post.php#1733 dar functia update_post_meta cheama functia update_metadata, a se vedea in wp-includes/meta.php#143
        – update_metadata nu are sanitize dar in functie intervine o alta functie la linia 167 care are rol de filtru, ci mai exact sanitize_meta ( https://codex.wordpress.org/Function_Reference/sanitize_meta ), a se vedea in wp-includes/meta.php#925, functia nu face sanitize la nimic, dar te poti folosi de filtru ca sa faci tu sanitize in functie de tipul de informatie pe care il pui in meta.

        Bine ca mi-ati dat idei pentru http://hapiucrobert.ro/2016/01/25/afisezi-timpul-estimativ-citire-unui-articol-blogul/, o sa fac o mica functie care face sanitize la datele mele si o s-o aplic pe respectivul filtru, corect sau incorect?

  2. Sanitizarea unei valori salvate ca post meta… se poate face in 2 feluri:
    1. cum am zis eu (de altfel cred ca este si cea mai raspandita metoda in randul developerilor)
    2. cu filtre (filtru aplicat in functia sanitize_meta)
    Ideea este ca trebuie facuta, ci nu trebuie sa te bazezi c-o face altul pentru tine. Cine nu crede, sa testeze. 😉

Leave a Reply

Your email address will not be published. Required fields are marked *