Найти функцию, которая сохраняет изображение варианта продукта-WooCommerce - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь обновить функцию, которая обрабатывает загрузку изображения в вариационный продукт! [Вариация изображения] https://i.imgur.com/reNn6x7.png

Я думал, что код, который обрабатывает это:

   protected function set_variation_image( $variation, $image ) {
    $attachment_id = isset( $image['id'] ) ? absint( $image['id'] ) : 0;

    if ( 0 === $attachment_id && isset( $image['src'] ) ) {
        $upload = wc_rest_upload_image_from_url( esc_url_raw( $image['src'] ) );

        if ( is_wp_error( $upload ) ) {
            if ( ! apply_filters( 'woocommerce_rest_suppress_image_upload_error', false, $upload, $variation->get_id(), array( $image ) ) ) {
                throw new WC_REST_Exception( 'woocommerce_variation_image_upload_error', $upload->get_error_message(), 400 );
            }
        }

        $attachment_id = wc_rest_set_uploaded_image_as_attachment( $upload, $variation->get_id() );
    }

    if ( ! wp_attachment_is_image( $attachment_id ) ) {
        /* translators: %s: attachment ID */
        throw new WC_REST_Exception( 'woocommerce_variation_invalid_image_id', sprintf( __( '#%s is an invalid image ID.', 'woocommerce' ), $attachment_id ), 400 );
    }

    $variation->set_image_id( $attachment_id );

    // Set the image alt if present.
    if ( ! empty( $image['alt'] ) ) {
        update_post_meta( $attachment_id, '_wp_attachment_image_alt', wc_clean( $image['alt'] ) );
    }

    // Set the image name if present.
    if ( ! empty( $image['name'] ) ) {
        wp_update_post(
            array(
                'ID'         => $attachment_id,
                'post_title' => $image['name'],
            )
        );
    }

    return $variation;
} `

внутри class-wc-rest-product-variations-controller.php

, но любая модификация этой функции не меняет способ загрузки файла.

идея состоит в том, чтобы загрузить изображение и применить тот же вариантизображение для каждого варианта доступно, но не может найти функцию, которая сохраняет изображение в продукте.

@ edit после ответа itzmekhokan

я создал плагин, который добавляет действие к woocommerce_save_product_variation

add_action('woocommerce_save_product_variation', 'salvarfoto',10,2);


function salvarfoto($variation_id,$i){

    $variation = new WC_Product_Variation($variation_id);
    $produto_pai =wc_get_product( $variation->get_parent_id() );
    foreach( $produto_pai->get_children() as $variation_values ){
        //  $variation_id = $variation_values['variation_id']; // variation id
        $product = new WC_Product_Variation( $variation_values );
        if( $product->get_attribute( 'pa_cor' ) == $variation->get_attribute('pa_cor'))
        {
            $id_img = $variation->get_image_id();
            $product->set_image_id($id_img);
        }
        $product->save();
    }



}

этот код применяет один и тот же image_id ко всем вариантам с одинаковым атрибутом цвета

1 Ответ

1 голос
/ 18 октября 2019

Его WC_Meta_Box_Product_Data::save_variations( $post_id, $post ) в файле class-wc-meta-box-product-data.php.

И -

$errors = $variation->set_props(
    array( 
        'image_id'          => isset( $_POST['upload_image_id'][ $i ] ) ? wc_clean( wp_unslash( $_POST['upload_image_id'][ $i ] ) ) : null,
        )
);

image_id, в основном сохраняющих каждый идентификатор вариационного изображения. Сначала проверьте функциональность, а затем, я думаю, вы можете вносить изменения, используя этот do_action( 'woocommerce_save_product_variation', $variation_id, $i ); хук.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...