Несколько миниатюр в разделе оформления заказа на дизайнере woocommerce / fancy product - PullRequest
0 голосов
/ 14 февраля 2019

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

Веб-сайт Я пытаюсь сделать это возможным.

enter image description here (пример фото)


class-wc-cart.php

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML( $thumbnail );
$xpath = new DOMXPath( $dom );
libxml_clear_errors();

$doc = $dom->getElementsByTagName("img")->item(1);
$src = $xpath->query(".//@src");
$srcset = $xpath->query(".//@srcset");

// custom image from customer 
foreach ( $src as $s ) {
    $s->nodeValue = $fpd_data['fpd_product_thumbnail'];
}
foreach ( $srcset as $s ) {
    $s->nodeValue = $fpd_data['fpd_product_thumbnail'];
}
return $dom->saveXML( $doc );

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

Любая идея, если это вообще возможно, или я должен использовать другой подход в файле class-wc-cart.php в woocommerce.


class-wc-product.php

//the additional form fields
public function add_product_designer_form() {

        global $post;
        $product_settings = new FPD_Product_Settings($post->ID);

        if( $product_settings->show_designer() ) {
            ?>
            <input type="hidden" value="<?php echo esc_attr( $post->ID ); ?>" name="add-to-cart" />
            <input type="hidden" value="" name="fpd_product" />
            <input type="hidden" value="" name="fpd_product_thumbnail[]" />
            <input type="hidden" value="<?php echo isset($_GET['cart_item_key']) ? $_GET['cart_item_key'] : ''; ?>" name="fpd_remove_cart_item" />
            <?php

            if( !fpd_get_option('fpd_wc_disable_price_calculation') )
                echo '<input type="hidden" value="" name="fpd_product_price" />';

            do_action('fpd_product_designer_form_end', $product_settings);
        }
}

В коде есть функция " after_product_designer ", в которую я добавляю некоторый код jquery, чтобы получить поле ввода, которое должно публиковать несколько fpd_thumbnails из FPD.

В if (order.product! = False)

    var values = [];

if(<?php echo fpd_get_option('fpd_cart_custom_product_thumbnail'); ?>) {
    // $cartForm.find('input[name="fpd_product_thumbnail"]').val(dataURL); (OLD/Original)

    $('input[name="fpd_product_thumbnail[]"]').each(function(){ // NEW 
     values.push($(this).val(dataURL));
    });
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я нашел решение для извлечения изображений base64 из модного дизайнера и перечислил их в моей кассе.Каким-то образом они все объединены в один вертикальный файл base64.Пока не нашли решения для этого.Но это не относится к этой теме.

Изменить: class-wc-product.php и изменить fancyProductDesigner.viewInstances[0].toDataURL на fancyProductDesigner.getProductDataURL Это создает все представления в одном URL-адресе данных.Различные виды будут расположены ниже друг друга, как указано в документации FPD jquery .

Изменение: class-wc-order.php функция add_order_item_meta для кода ниже.

public function add_order_item_meta( $item_id, $item ) {

        $fpd_data = null;
        if( isset( $item->legacy_values['_fpd_data'] ) )  // WC 3.0+
            $fpd_data = $item->legacy_values['_fpd_data'];
        else if( isset( $item['_fpd_data'] ) )  // WC <3.0
            $fpd_data = $item['_fpd_data'];

        if( !is_null($fpd_data) ) {
            wc_add_order_item_meta( $item_id, '_fpd_data', $fpd_data);
        }
    }

Это мое решение.

0 голосов
/ 21 февраля 2019

1) Вы должны были задавать вопросы, связанные с WP, WP.SE

2) Ваше решение должно быть ниже кода (добавьте functions.php и измените в соответствии с вашими потребностями):

// Product thumbnail in checkout
add_filter( 'woocommerce_cart_item_thumbnail', 'product_thumbnail_in_checkout', 200, 3 );
function product_thumbnail_in_checkout( $thumbnail, $cart_item, $cart_item_key )
{
    $use_product_thumb = false;   //true or false
    if (array_key_exists('fpd_data', $cart_item))
    {
        $thumbnail =""; //clear existing thumb
        if ($use_product_thumb)
        {
            $fp = json_decode( stripslashes($cart_item['fpd_data']['fpd_product']) , true);
            foreach($fp['product'] as $each)
            {
             $thumb = $each["thumbnail"];
             $thumbnail .= '<img src="'.$thumb.'" style="width:50px; float:left; margin:5px;" />';
            }
        }
        else{
            $thumbnail = '<img src="'.$cart_item['fpd_data']['fpd_product_thumbnail'].'" style="float: left; margin: 5px; width: 200px; max-width: 550px;" />'; 
        }
    }
    return $thumbnail;
}
...