Woo-poly-integration: Masalah WooCommerce 3.6

Dibuat pada 3 Apr 2019  ·  19Komentar  ·  Sumber: hyyan/woo-poly-integration

Membuka tiket ini untuk potensi masalah kompatibilitas WooCommerce 3.6.

Lihat posting untuk peningkatan di 3.6:
https://woocommerce.wordpress.com/2019/04/01/performance-improvements-in-3-6/

Perubahan ekstensif cenderung memperkenalkan beberapa bug halus.
Misalnya sinkronisasi Meta Produk menggunakan sinkronisasi meta pos Polylang standar, itu tidak menggunakan api Produk, jadi meta yang diperbarui untuk bahasa sekunder tidak akan disalin ke tabel pencarian produk woo3.6 baru yang mungkin membuat bug halus pada penyortiran dan laporan produk saat tidak menggunakan bahasa utama situs.
Demikian pula, data produk yang di-cache untuk bahasa sekunder mungkin tidak dihapus saat memperbarui produk dalam bahasa utama.

Komentar yang paling membantu

Ini adalah topik umum untuk masalah woo3.6 yang tidak mengacu pada satu masalah. Masalah spesifik yang dilaporkan sejauh ini telah diperbaiki dari rilis 3.4 pertama plugin ini di github. Sumbernya sekarang 3.4.3 yang akan saya rilis di github setelah memeriksa kembali beberapa poin lagi.

Itu selalu lebih baik untuk memiliki lebih banyak umpan balik dari pengadopsi awal sebelum rilis penuh di WordPress: ada begitu banyak pengaturan dan skenario penggunaan yang berbeda sehingga pengujian penuh sebenarnya tidak mungkin terutama ketika plugin lain dipertimbangkan - saya sudah harus mengembalikan satu perubahan setelah menerimanya karena perubahan kompatibilitas untuk kepentingan satu plugin merusak kompatibilitas untuk plugin lain (sebutkan harga Anda vs pengalih mata uang).

Kemarin WooCommerce menolak salah satu permintaan tarik terkait saya ke WooCommerce 3.6+ setelah sebelumnya menerimanya - dengan pertimbangan mereka tidak ingin mengizinkan plugin lain untuk dapat menyinkronkan ulang tabel pencarian produk - jadi dalam jangka panjang setiap plugin wordpress yang memperlakukan produk sebagai posting menggunakan WordPress API akan mengalami masalah. Pada saat yang sama, satu-satunya cara yang dapat diandalkan sejauh ini untuk menyalin data produk untuk produk apa pun (termasuk jenis produk khusus yang memiliki data yang tidak kami ketahui) adalah dengan menyalin semua data meta dan taksonomi yang ada (sesuai dengan pengaturan dan filterable dari kursus).
Solusi yang ditambahkan di 3.4 masih akan berfungsi tetapi saya akan melihatnya lagi sebelum rilis apa pun.

Semua 19 komentar

Halo. Berikut adalah bug yang terkait dengan apa yang Anda sebutkan di atas.

Bisakah Anda mereproduksi masalah ini pada tema Wordpress default (misalnya Storefront)?
YA

Bisakah Anda mereproduksi masalah ini ketika semua plugin lain dinonaktifkan kecuali Integrasi WooCommerce, Polylang, dan Hyyan WooCommerce Polylang?
YA

Versi dan pengaturan produk apa yang Anda gunakan saat masalah ini terjadi?
PHP: 7.3.1
WordPress: 5.1.1
WooCommerce: 3.6.1
Polilang: 2.5.3
Integrasi Hyyan WooCommerce Polylang: 1.3.0
Peramban: Chrome, Firefox

Langkah-langkah untuk Reproduksi
Setel Polylang dengan setidaknya 2 bahasa
Buat produk Variabel dalam bahasa default
Buat terjemahan produk

Apa yang saya harapkan
Produk yang diterjemahkan juga bervariasi.

Apa yang Terjadi Sebagai gantinya
Ketika saya mengklik untuk menambahkan terjemahan produk, jenis produk terjemahan itu diatur ke SEDERHANA.
Jenis produk tidak disinkronkan.

Jenis Produk Dikonfirmasi Masalah 3.6.x - Saya juga dapat mereproduksi ini dan juga dilaporkan di https://wordpress.org/support/topic/variable-products-change-to-simple-in-translated-version/

Masalah jenis produk kemungkinan disebabkan oleh caching yang ditambahkan ke jenis produk https://github.com/woocommerce/woocommerce/pull/22612/commits/57ccde66437ade8e91d12890245d9d4c5e5e1892
ini artinya dimana jenis produk yang diupdate oleh woopoly, cache tidak divalidasi sehingga kemudian muncul sebagai Simple..

Ini adalah masalah yang berbeda tetapi serupa dengan Tabel Pencarian Data Produk baru: pada dasarnya semua pembaruan sekarang harus melalui api woocommerce untuk memastikan tabel caching dan pencarian diperbarui.
Saat ini plugin memperluas kemampuan Polylang untuk menyalin meta pos dan taksonomi, dengan pemahaman minimum yang diperlukan tentang meta dan taksonomi mana yang perlu disalin atau diterjemahkan.
Sekarang item WooCommerce yang telah ditentukan sebelumnya harus ditangani melalui api WooCommerce itu sendiri.

Saya tidak punya banyak pengalaman berurusan dengan kode WooCommerce, tetapi apakah ada info tentang caching WooCommerce di suatu tempat sehingga kami dapat mencoba menemukan cara untuk memperbaiki masalah ini? Menurut temuan Anda, apakah fungsi copyTerms() di Meta.php perlu diperbarui?

https://github.com/hyyan/woo-poly-integration/blob/1d83ef23e96f35c2bb008b5fa37e5157bfc388e4/src/Hyyan/WPI/Product/Meta.php#L341

Idealnya, semua pembaruan harus menggunakan objek Produk woocommerce daripada objek Posting wordpress, untuk memastikan caching level woocommerce dan tabel perantara (dan tabel Produk di masa mendatang) selalu konsisten. Ini mungkin tidak sesulit kedengarannya.

Sebagai alternatif, juga dimungkinkan untuk memperbarui apa adanya dan memaksa woocommerce untuk men-cache ulang dan menghitung ulang objek yang relevan, tetapi memperbarui melalui api akan lebih tahan masa depan, dan kita semua dapat melakukannya dengan lebih sedikit pemeliharaan dan lebih sedikit masalah dari rilis woocommerce di masa mendatang .

Info tentang perubahan ada di tautan pertama di utas ini dan catatan rilis dari versi poin sejak saat itu. Tautan github woocommerce di atas saya temukan dengan melihat melalui catatan rilis yang ditautkan ke perbaikan github.

Dalam versi plugin yang sangat lama, ada panggilan ke $this->syncSelectedproductType($ID); di akhir fungsi syncProductsMeta() di Meta.php . Jika saya menambahkan kembali ini, terjemahan baru dari produk Variabel pilih opsi yang benar di dropdown jenis produk.

@mrleemon ya itu memperbaiki masalah variasi jenis produk, bagus sekali!

Ini sedikit pekerjaan peretasan - itu tidak benar-benar memperbaiki masalah yang mendasarinya tetapi sebaliknya menggunakan sedikit javascript untuk menyinkronkan bentuk produk baru yang diterjemahkan dengan sedikit meta woopoly, sehingga berfungsi dengan baik ketika produk disimpan.

Sinkronisasi produk umum tampaknya juga baik-baik saja (tergantung pada pengujian lebih lanjut), hanya tabel wc_product_meta_lookup baru yang tidak diperbarui dan saya percaya bahwa saat ini hanya memengaruhi penyortiran.

Jadi, kita perlu langsung menyalin properti produk menggunakan fungsi WooCommerce CRUD daripada mengandalkan filter pll_copy_post_metas seperti sekarang, bukan?

Yah meta itu sendiri tampaknya berfungsi, hanya saja ada risiko bahwa itu dapat di-cache misalnya di sini adalah caching woocommerce yang ditambahkan untuk atribut variasi:

    public function read_variation_attributes( &$product ) {
        global $wpdb;

        $variation_attributes = array();
        $attributes           = $product->get_attributes();
        $child_ids            = $product->get_children();
        $cache_key            = WC_Cache_Helper::get_cache_prefix( 'product_' . $product->get_id() ) . 'product_variation_attributes_' . $product->get_id();
        $cache_group          = 'products';
        $cached_data          = wp_cache_get( $cache_key, $cache_group );

Entah bagaimana saya pikir cache sedang dibersihkan dan ini berfungsi, itu mungkin keberuntungan daripada desain.
Tabel wc_product_meta_lookup masih perlu diperbarui dan ini dapat dilakukan secara terpisah dengan memperbarui bidang tertentu melalui kelas produk, tetapi akan lebih efisien jika semua pembaruan dilakukan melalui kelas produk _relevant_ untuk menghindari panggilan database berulang. Mungkin perlu kelas produk _relevant_ meskipun karena jenis produk yang berbeda memiliki penanganan yang berbeda..

Saya tidak tahu apakah fungsi WC berikut dapat berguna untuk menyalin data produk saat membuat terjemahan baru:

https://docs.woocommerce.com/wc-apidocs/source-class-WC_Admin_Duplicate_Product.html#134

Ini menggunakan filter woocommerce_duplicate_product_exclude_meta untuk mengecualikan bidang meta agar tidak disalin dan kait woocommerce_product_duplicate_before_save untuk memodifikasi objek produk lebih lanjut sebelum dibuat.

@mrleemon terima kasih.. kami tidak menduplikasi produk seperti itu tapi mungkin kami bisa.....?

Sementara itu saya punya solusi lain yang akan saya periksa.

@mrleemon Saya menerima saran Anda untuk $this->syncSelectedproductType($ID); dan menambahkan fungsi untuk memastikan bahwa cache produk terjemahan dibersihkan dan tabel pencarian diperbarui.

Ini membahas semua 3,6 masalah yang dilaporkan sejauh ini.
Tapi itu bukan ulasan kode lengkap ...

@mrleemon terima kasih.. kami tidak menduplikasi produk seperti itu tapi mungkin kami bisa.....?

Ya saya tahu. Namun, mungkin dalam jangka panjang perlu mempertimbangkan untuk menduplikasi produk menggunakan fungsi inti WC, mengingat tim WC berencana untuk memindahkan semua metadata produk dari tabel wp_postmeta di masa mendatang.

Pos produk baru dibuat oleh Polylang sebagai pos kosong dengan data taksonomi untuk bahasa dan terjemahan tertaut dan meta yang dipilih dan plugin ini memperluasnya dengan cara umum untuk menangani opsi meta dan istilah serta taksonomi tambahan.

Sebenarnya lebih baik jika istilah dan taksonomi disalin secara umum karena kemudian (umumnya) berfungsi (atau dapat dibuat untuk bekerja dengan filter) pada semua jenis produk (termasuk jenis produk yang tidak kita ketahui) dan plugin apa pun yang menambahkan data meta atau taksonomi ke produk (yang tidak diketahui oleh objek woocommerce standar).

Tujuan jangka panjang WooCommerce tampaknya adalah untuk memindahkan data produk dari tabel posting itu sendiri, tetapi itu merusak setiap plugin ekstensi jadi itu sebabnya mereka membuat tabel pencarian ini untuk mengurangi batasan kinerja untuk bidang data utama yang digunakan untuk menyortir.

Hai! Apakah bug ini telah diperbaiki? Entri changelog terakhir menyebutkan bahwa kompatibilitas dengan WC 3.6 telah diperbaiki, tetapi masalah ini masih terbuka. Apa statusnya? Juga, apakah mungkin untuk memperbarui plugin yang didistribusikan oleh WP (https://wordpress.org/plugins/woo-poly-integration/)?

BTW, banyak terima kasih telah memelihara plugin ini untuk semua orang yang terlibat!

Ini adalah topik umum untuk masalah woo3.6 yang tidak mengacu pada satu masalah. Masalah spesifik yang dilaporkan sejauh ini telah diperbaiki dari rilis 3.4 pertama plugin ini di github. Sumbernya sekarang 3.4.3 yang akan saya rilis di github setelah memeriksa kembali beberapa poin lagi.

Itu selalu lebih baik untuk memiliki lebih banyak umpan balik dari pengadopsi awal sebelum rilis penuh di WordPress: ada begitu banyak pengaturan dan skenario penggunaan yang berbeda sehingga pengujian penuh sebenarnya tidak mungkin terutama ketika plugin lain dipertimbangkan - saya sudah harus mengembalikan satu perubahan setelah menerimanya karena perubahan kompatibilitas untuk kepentingan satu plugin merusak kompatibilitas untuk plugin lain (sebutkan harga Anda vs pengalih mata uang).

Kemarin WooCommerce menolak salah satu permintaan tarik terkait saya ke WooCommerce 3.6+ setelah sebelumnya menerimanya - dengan pertimbangan mereka tidak ingin mengizinkan plugin lain untuk dapat menyinkronkan ulang tabel pencarian produk - jadi dalam jangka panjang setiap plugin wordpress yang memperlakukan produk sebagai posting menggunakan WordPress API akan mengalami masalah. Pada saat yang sama, satu-satunya cara yang dapat diandalkan sejauh ini untuk menyalin data produk untuk produk apa pun (termasuk jenis produk khusus yang memiliki data yang tidak kami ketahui) adalah dengan menyalin semua data meta dan taksonomi yang ada (sesuai dengan pengaturan dan filterable dari kursus).
Solusi yang ditambahkan di 3.4 masih akan berfungsi tetapi saya akan melihatnya lagi sebelum rilis apa pun.

Saya masih mengalami bug ini di Hyyan WooCommerce Polylang Integration Versi 1.4.3 di wp5.2.2

Memuat editor untuk produk variabel menghapus data produk variabel, bahkan menyimpan ulang data produk variabel tidak efektif.

Menonaktifkan dan mengaktifkan kembali Hyyan tidak mengubah perilaku ini
baru-baru ini ada pembaruan untuk Polylang
https://wordpress.org/plugins/polylang/#developers
2.6.2 (2019-07-16)
Pro: Perbaiki admin yang lambat jika server pembaruan terjemahan tidak dapat dijangkau
Pro: Perbaiki nilai yang tidak diterjemahkan dengan benar untuk bidang klon ACF di repeater
Perbaiki terjemahan string yang tercampur saat didaftarkan melalui kompatibilitas WPML. #381

Hai, @Oclair harap dicatat bahwa perbaikannya masih berfungsi bahkan dengan pembaruan Polylang dan WooCommerce terbaru, jadi jika Anda mengalami masalah, silakan angkat sebagai masalah github terpisah dengan detail lengkap.

Harap dicatat bahwa solusinya tidak termasuk javascript jadi selain memeriksa kesalahan sisi server, ada baiknya Memeriksa dengan alat pengembang Chrome dan memeriksa konsol javascript untuk kesalahan apa pun.

Ada kemungkinan masalah lain atau plugin lain memengaruhi ini dalam beberapa cara.

Hai terima kasih atas tanggapan dan solusinya, bukan peringatan sepele yang memungkinkan javascript!
Mungkin plugin mungkin memberi tahu admin jika javascript ini mengalami masalah? karena kebanyakan orang tidak memeriksa variabel produk jika mereka hanya perlu memperbarui beberapa teks....

Terima kasih sekali lagi, semoga menyenangkan!

Hai, @Oclair harap dicatat bahwa perbaikannya masih berfungsi bahkan dengan pembaruan Polylang dan WooCommerce terbaru, jadi jika Anda mengalami masalah, silakan angkat sebagai masalah github terpisah dengan detail lengkap.

Harap dicatat bahwa solusinya tidak termasuk javascript jadi selain memeriksa kesalahan sisi server, ada baiknya Memeriksa dengan alat pengembang Chrome dan memeriksa konsol javascript untuk kesalahan apa pun.

Ada kemungkinan masalah lain atau plugin lain memengaruhi ini dalam beberapa cara.

Mungkin plugin mungkin memberi tahu admin jika javascript ini mengalami masalah?
ini mungkin situasi yang sulit untuk dideteksi dan ditindaklanjuti: jika masalah javascript tidak pernah dijalankan maka itu tidak akan dapat membuat peringatan..

Saya benar-benar menghapus solusi ini beberapa versi yang lalu karena saya tidak menyukainya dan ternyata tidak perlu. Sayangnya perubahan WooCommerce membuatnya diperlukan lagi dan saya tidak dapat menemukan alternatif yang lebih baik..

Apakah halaman ini membantu?
0 / 5 - 0 peringkat