Rumah > Soal Jawab > teks badan
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粉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; }