Rumah  >  Soal Jawab  >  teks badan

Tambahkan atribut pada simpan jika produk tidak ditetapkan: WooCommerce

Apabila menyimpan produk, saya ingin menyemak sama ada produk tersebut mempunyai atribut tertentu. Setahu saya, pa_region. Jika tidak, saya ingin menambah set atribut dan istilah atribut pada produk. Kalau property pa_region dah set, tak nak update/ubah.

Saya lihat ada kaedah yang dipanggil wp_set_object_terms 的函数(文档)。我尝试了一些方法,但我认为 update_post_meta iaitu cara yang betul.

Daripada jawapan ini saya tahu cara menyemak sama ada produk mempunyai atribut. Saya akan menambah cek itu kemudian.

Pada masa ini saya cuba menambah atribut terlebih dahulu. Belum berfungsi dengan betul.

Saya menemui soalan yang sama di sini dan saya cuba menggunakan kod itu untuk mencapai tujuan saya. Tetapi ini tidak berfungsi. Saya rasa sebabnya ialah ciri tersebut memerlukan sifat yang sudah ada dalam produk? ! Sunting: Saya telah menyemak. Walaupun atribut pa_region ditetapkan dalam produk, kod tidak mengemas kini nilainya.

Ini kod semasa saya:

add_action('woocommerce_update_product', 'save_product_region');
function save_product_region( $post )
{
    if( in_array( $post->post_type, array( 'product' ) ) ){

        $test = 'test';
        $product_id = $post->ID;

        $product_attributes = get_post_meta( $product_id ,'_product_attributes', true);
        var_dump($product_attributes);

        // Loop through product attributes
        foreach( $product_attributes as $attribute => $attribute_data ) {
            // Target specif attribute  by its name
            if( 'pa_region' === $attribute_data['name'] ) {
                // Set the new value in the array
                $product_attributes[$attribute]['value'] = $test;
                break; // stop the loop
            }
        }

        update_post_meta( $product_id ,'_product_attributes', $product_attributes );

    }
}

P粉555682718P粉555682718285 hari yang lalu449

membalas semua(1)saya akan balas

  • P粉520204081

    P粉5202040812023-12-14 10:05:21

    $post pertama bukan objek. akan mengembalikan ID, yang bagus.

    add_action('woocommerce_update_product', 'save_product_region');
    function save_product_region( $product_id ) {
    
        //Get product object from the ID
        $_product = wc_get_product($product_id);
        $attributes = $_product->get_attributes();
    
        $add_option = wp_set_object_terms( $product_id, 'canada', 'pa_region', true );
        $curr_options = $attributes['pa_region']['options'];
        
        //Check if we have this attribute set already 
        if(!in_array($add_option,$curr_options)):
            $updated_options = array_push($curr_options,$add_option);
            $data = array(
                'pa_region' => array(
                    'name'=>'pa_region',
                    'options'=> $updated_options,
                    'is_visible' => '1',
                    'is_variation' => '0',
                    'is_taxonomy' => '1'
                )
            );
            //First getting the Post Meta
            $_product_attributes = get_post_meta($product_id, '_product_attributes', TRUE);
            //Updating the Post Meta
            update_post_meta($product_id, '_product_attributes', array_merge($_product_attributes, $data));
        endif;
    }

    balas
    0
  • Batalbalas