Tambahkan atribut pada simpan jika produk tidak ditetapkan: WooCommerce
P粉555682718
P粉555682718 2023-12-13 15:49:42
0
1
539

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粉555682718
P粉555682718

membalas semua(1)
P粉520204081

$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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan