Di woocommerce saya mengubah teks "In Stock" untuk menampilkan teks yang berbeda untuk nomor stok yang berbeda. Jadi untuk stok nomor diatas 3 tertulis : " 5 in stock " (warna hijau dengan css) dan untuk stok nomor 3 atau dibawahnya tertulis " sisa 2 saja" (warna merah dengan css). Sama seperti amazon melakukannya.

Ini berfungsi sempurna dengan produk sederhana seperti yang Anda lihat di sini: https://edelmix .de/superdry-urban-blau-limette-quarzuhr-syg164un/

Tetapi pada produk variabel kode saya tidak memiliki hasil yang diinginkan. Yang tentu saja untuk menunjukkan teks yang sama seperti yang dijelaskan di atas dengan jumlah stok variasi yang tepat.

Apa yang saya dapatkan adalah teks dengan jumlah total semua variasi. Saya mengaktifkan kelola kuantitas produk di tingkat produk di backend untuk semua variasi dan memiliki jumlah stok yang berbeda pada variasi.

Hasil dari variabel product sampai saat ini dapat dilihat disini: https://stage.edelmix.de/buddha -to-buddha-blue-lace-agate-ring-603ba/

Jumlah yang ditampilkan adalah 5 (setelah Anda memilih variasi dari dropdown). Yang merupakan jumlah total untuk semua variasi bersama-sama. Ukuran cincin yang berbeda memiliki jumlah stok 1/3/1 (seperti yang Anda lihat dari pengujian saya yang menggemakan variabel stok di sebelah harga), dan inilah yang ingin saya tunjukkan ketika setiap variasi dipilih (dengan teks kustom seperti dengan produk sederhana).

Kode saya sejauh ini adalah:

add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2);

function custom_get_availability( $availability, $_product ) {
    global $woocommerce, $product;
    if ($_product->is_type( 'variable' ))  {
        $available_variations = $product->get_available_variations();
        foreach ($available_variations as $variation) 
            {
                $variation_id = $variation['variation_id'];
                $variation_obj = new WC_Product_Variation($variation_id);
                $stock = $variation_obj->get_stock_quantity();
                echo $stock;  // <-- for testing purpose to see if I do get the individual variation-quantities = works!!
            }
        } else {
            $stock = $product->get_stock_quantity();
        }

    // change text "In Stock' to 'Auf Lager' when quantity more than 3
    if ($_product->is_in_stock() && $stock > 3 ) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce');

    // change text to n Left, where n is the quantity
    if ($_product->is_in_stock() && ($stock <= 3 )) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr( $availability['class'] ) . '">' .  __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>';  

    // change text "Out of Stock' to 'SOLD OUT'
    if (!$_product->is_in_stock()) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce');

    // change text "In Stock' to 'Special Order' for products with unmanaged stock
    if ( !$_product->managing_stock() && $_product->is_in_stock() ) $availability['availability'] = __('Auf Lager', 'woocommerce');

  return $availability;
}

Mengapa ini tidak berhasil?

Saya telah mencoba semuanya selama beberapa jam terakhir dan tidak tahu mengapa ini tidak berfungsi sebagaimana mestinya.

Bantuan apa pun sangat dihargai.

2
Visualpro 11 Desember 2017, 22:55

1 menjawab

Jawaban Terbaik

Itu tidak berhasil karena Anda telah membuat komplikasi untuk apa-apa. Dalam fungsi yang dikaitkan, argumen $product adalah variasi Produk yang dipilih saat ini (dalam produk variabel), jadi Anda tidak memerlukan loop foreach untuk mendapatkan variasi dari produk Variabel.

Jadi kode Anda akan lebih kompak sekarang. Coba ini sebagai gantinya:

add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2);
function custom_get_availability( $availability, $_product ) {
    $stock = $_product->get_stock_quantity();

    // change text "In Stock' to 'Auf Lager' when quantity more than 3
    if ( $_product->is_in_stock() && $stock > 3 ) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce');

    // change text to n Left, where n is the quantity
    if ( $_product->is_in_stock() && $stock <= 3 ) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr( $availability['class'] ) . '">' .  __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>';

    // change text "Out of Stock' to 'SOLD OUT'
    if (! $_product->is_in_stock() ) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce');

    // change text "In Stock' to 'Special Order' for products with unmanaged stock
    if ( ! $_product->managing_stock() && $_product->is_in_stock() ) $availability['availability'] = __('Auf Lager', 'woocommerce');

    return $availability;
}

Kode masuk ke file function.php dari tema anak aktif Anda (atau tema) atau juga di file plugin apa pun.

Diuji dan bekerja

2
LoicTheAztec 23 Februari 2019, 21:12