Salam, Java istifadə edərək WooCommerce API-a qoşulub məhsul əlavə edirəm. Məhsulların şəkilləri və s. hamısı düşür. Attributlar üçün belə bir məntiq yazmışam ki, əgər attribut saytda mövcuddursa onu əlavə etsin (filter funksiyası üçün), yoxdursa custom attribute kimi əlavə etsin. Bunların hamısını əlavə edir. Sadəcə məhsul səhifəsinə girdikdə görünmür, gərək edit product bölümündən həmin məhsulda heç nəyi dəyişmədən manual olaraq update sözünə vurulsun ki, məhsulu açanda görünsün. API-la heç bir parametr dəyişmədən update göndərirəm, yenə görünmür. Problem nə ola bilər?
Verilmiş cavablar və yazılan şərhlər (6 cavab var)
0
CURL nümunə qoysaydınız əla olardı, ki görək hansı endpointə nə göndərirsiniz. Məsələn attributu taksonomiya kimi davranaraq update etməyə çalışırsınız, yoxsa WC api ilə müvafiq attribut endpoinləri ilə.
0
Documentation’da qeyd edilən kimi göndərirəm, sadəcə position göndərmirəm. Sadəcə maraqlı olan olan budur ki, edit products-a daxil olduqda orada görünür, heç nə etmədən sadəcə update click etdikdə isə məhsulun öz səhifəsində də görünür.
1
Indi aydın oldu.
Təxminən belə bir format göndərməyiniz lazımdır:
Başqa field-lərin olmasına ehtiyac yoxdur və tam işlək data formatıdır bu.
Əsas məsələ burada id-dir. Əgər id düzgündürsə, bu zaman dediyiniz manual update-ə ehtiyac olmadan birbaşa işləməlidir hər şey.
Əks halda atribut custom attribute kimi qeydə alınır, yəni postmeta olaraq (id=0), bu da ola bilər sizin theme-də dəstəklənmir.
Siz manual qaydada update-ə basdıqda isə WooCommerce özü qarşılaşdırır postmeta və taksonomiyadakı atributları, əgər meta-dakı atribut term taksonomiyadakılara uyğun gəlirsə, sinxronlaşdırma edir. Ona görə də manual update ilə işləyir.
Yəni belə deyək, bir az kustar da olsa siz belə həll də tətbiq edə bilərsiniz:
Bir dənə custom endpoint yaradıb içində wp_update_post() hook-u run etmək. Və bu endpointi atribut daxil etdikdən sonra GET metodu ilə çağırmaq ki o manual edilən şey Java-dan çağırılaraq baş vermiş olsun.
İndi isə əsas metoda qayıdaq:
Troubleshoot üçün belə bir müqayisə apara bilərsiniz.
1. Atributu APİ ilə göndərin və /wp-json/wc/v3/products/123 GET metodu ilə çəkin attributes bölməsini saxlayın.
2. WP-Admində manual update basdıqdan sonra ki, hər şey düzəldi, dərhal /wp-json/wc/v3/products/123 GET metodu ilə bir də çəkin data, attributes bölməsini əvvəlki ilə müqayisə edin. Böyük ehtimal fərqin id-də olduğunu görəcəksiniz. Birincidə id=0, ikincidə id=hər hansı ədəd olacaq.
Burada bir diqqətəlayiq məsələ də odur ki, orada sözükeçən İD term İD deyil, atributun qiymətinin id-si deyil, atributun özünün id-sidir. Onu da məsələn wp_woocommerce_attribute_taxonomies mysql table-dan görə bilərsiniz.
0
Deməli yazdığım məntiq belədir ki, əvvəlcə bütün attributları götürürəm, göndərilən productun attributunun name-i mövcuddursa attributların içində, həmin attributun id-sini götürüb, termlərini döngüyə salıram (max 100 qayıdır 1 dəfəyə), əgər termlərdə də attributun value-su varsa, həmin attributun id-sini və optionsa dəyərini göndərirəm. Attribut ümumiyyətlə yoxdursa və ya attribut var, dəyər yoxdursa, custom attribut kimi name, option və visible paramatrlərini göndərirəm. Response-u return edib yoxlayacam, təşəkkürlər.
1
Dediyiniz halda əgər çox request yaradırsa bu məsələ, yəni hər dəfə atribut adlarını yoxlamaq – o zaman dediyim custom yol daha asan görə bilər işinizi.
Yəni hər zaman Custom atribut kimi göndərin – heç nəyi yoxlamadan, əziyyətsiz filansız.
Sonra da custom endpoint ilə həmin post üçün wp_post_update-un içindəki o həlledici hook-nu run edin.
Bu zaman Woo özü həll edəcək custom->woo term sync məsələsini.
Bu hook haqqında da əlavə məlumat verim ki, bu metodu run edir:
WC_Meta_Box_Product_Data::prepare_attributes($data);
Daha konkret desəm əgər siz bir endpoint yaratsanız ki bu sadə funksiyanı run eləsin, məsələ bitmiş sayılar.
0
Problem temada imiş, functions.php-də update edilərək həll edildi. Təşəkkürlər.
Sual verin
Cavab verin