Heim  >  Fragen und Antworten  >  Hauptteil

Attribut beim Speichern hinzufügen, wenn das Produkt nicht festgelegt ist: WooCommerce

Wenn ich ein Produkt speichere, möchte ich prüfen, ob das Produkt ein bestimmtes Attribut hat. Soweit es mich betrifft, pa_region. Wenn nicht, möchte ich dem Produkt Attributsätze und Attributbegriffe hinzufügen. Wenn die Eigenschaft pa_region bereits festgelegt ist, möchte ich sie nicht aktualisieren/ändern.

Ich sehe, es gibt eine Methode namens wp_set_object_terms 的函数(文档)。我尝试了一些方法,但我认为 update_post_meta, die der richtige Weg ist.

Aus dieser Antwort weiß ich, wie ich überprüfen kann, ob ein Produkt ein Attribut hat. Ich werde diesen Scheck später hinzufügen.

Derzeit versuche ich zuerst, das Attribut hinzuzufügen. Funktioniert noch nicht richtig.

Ich habe hier eine ähnliche Frage gefunden und versucht, diesen Code zu verwenden, um mein Ziel zu erreichen. Aber das funktioniert nicht. Ich vermute, der Grund liegt darin, dass die Funktion Eigenschaften erfordert, die bereits im Produkt vorhanden sind? ! Bearbeiten: Ich habe nachgesehen. Obwohl das Attribut pa_region im Produkt festgelegt ist, aktualisiert der Code seinen Wert nicht.

Das ist mein aktueller Code:

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 Tage vor445

Antworte allen(1)Ich werde antworten

  • P粉520204081

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

    第一个 $post 不是对象。将返回 ID,这很好。

    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;
    }

    Antwort
    0
  • StornierenAntwort