Maison > Questions et réponses > le corps du texte
Lors de la sauvegarde d'un produit, je souhaite vérifier si le produit possède un attribut spécifique. En ce qui me concerne, pa_region
. Sinon, je souhaite ajouter des ensembles d'attributs et des termes d'attribut au produit.
Si la propriété pa_region
est déjà définie, je ne souhaite pas la mettre à jour/la modifier.
Je vois qu'il existe une méthode appelée wp_set_object_terms
的函数(文档)。我尝试了一些方法,但我认为 update_post_meta
qui est la bonne méthode.
À partir de cette réponse, je sais comment vérifier si un produit a un attribut. J'ajouterai ce chèque plus tard.
Actuellement, j'essaie d'ajouter l'attribut en premier. Ne fonctionne pas encore correctement.
J'ai trouvé une question similaire ici et j'ai essayé d'utiliser ce code pour atteindre mon objectif. Mais cela ne fonctionne pas. Je suppose que la raison est que la fonctionnalité nécessite des propriétés qui sont déjà dans le produit ? !
Edit : J'ai vérifié. Même si l'attribut pa_region
est défini dans le produit, le code ne met pas à jour sa valeur.
Voici mon code actuel :
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
Le premier $post n'est pas un objet. renverra l'ID, ce qui est bien.
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; }