Woocommerce: рекомендуемое изображение отличается от требуемой версии изображения продукта

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

Но, похоже, это не работает с последней версией woocommerce v2.4.7. У кого-нибудь есть идеи, как это исправить?

Вот текущий код из версии 2.4.7, который я пытаюсь заменить. когда исправление применяется, оно разрывает страницу.

<div class="images">

    <?php
        if ( has_post_thumbnail() ) {

            $image_title    = esc_attr( get_the_title( get_post_thumbnail_id() ) );
            $image_caption  = get_post( get_post_thumbnail_id() )->post_excerpt;
            $image_link     = wp_get_attachment_url( get_post_thumbnail_id() );
            $image          = get_the_post_thumbnail( $post->ID, apply_filters( 'single_product_large_thumbnail_size', 'shop_single' ), array(
                'title' => $image_title,
                'alt'   => $image_title
                ) );

            $attachment_count = count( $product->get_gallery_attachment_ids() );

            if ( $attachment_count > 0 ) {
                $gallery = '[product-gallery]';
            } else {
                $gallery = '';
            }

            echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '<a href="%s" itemprop="image" class="woocommerce-main-image zoom" title="%s" data-rel="prettyPhoto' . $gallery . '">%s</a>', $image_link, $image_caption, $image ), $post->ID );

        } else {

            echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '<img src="%s" alt="%s" />', wc_placeholder_img_src(), __( 'Placeholder', 'woocommerce' ) ), $post->ID );

        }
    ?>

    <?php do_action( 'woocommerce_product_thumbnails' ); ?>

</div>

А вот исходный модифицированный код с упомянутой выше страницы:

<div class="images">

<?php

    $attachment_ids = $product->get_gallery_attachment_ids();
    isset ($placeholder_width)? : $placeholder_width=0;
    isset ($placeholder_height)? : $placeholder_height=0;

    if ( $attachment_ids ) {
        $attachment_id = $attachment_ids[0];

    if ( ! $placeholder_width )
        $placeholder_width = $woocommerce->get_image_size( 'shop_catalog_image_width' );
    if ( ! $placeholder_height )
        $placeholder_height = $woocommerce->get_image_size( 'shop_catalog_image_height' );

        $output = '<div class="imagewrapper">';

        //$classes = array( 'imagewrapper' );
        $classes = array();
        $image_link = wp_get_attachment_url( $attachment_id );

        if ( $image_link ) {

        $image       = wp_get_attachment_image( $attachment_id, apply_filters( 'single_product_thumbnail_size', 'shop_thumbnail' ) );
        $image_class = esc_attr( implode( ' ', $classes ) );
        $image_title = esc_attr( get_the_title( $attachment_id ) );

        echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '<a href="%s" itemprop="image" class="woocommerce-main-image zoom" title="%s"  rel="prettyPhoto[product-gallery]">%s</a>', $image_link, $image_title, $image ), $post->ID );

        } else {

            echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '<img src="%s" alt="Placeholder" />', woocommerce_placeholder_img_src() ), $post->ID );

        }

    }
?>

<?php do_action( 'woocommerce_product_thumbnails' ); ?>

</div>

Любая помощь приветствуется.

Спасибо, Даррелл.


person mac4media    schedule 08.10.2015    source источник


Ответы (3)


Я боролся с тем же здесь, но, похоже, это помогло мне:

<div class="images">

<?php

    $attachment_ids = $product->get_gallery_attachment_ids();
    isset ($placeholder_width)? : $placeholder_width=0;
    isset ($placeholder_height)? : $placeholder_height=0;

    if ( $attachment_ids ) {
        $attachment_id = $attachment_ids[0];

    if ( ! $placeholder_width )
        $size = wc_get_image_size( 'shop_catalog' );
        $placeholder_width = $size['width'];
    if ( ! $placeholder_height )
        $size = wc_get_image_size( 'shop_catalog' );
        $placeholder_width = $size['height'];

        $output = '<div class="imagewrapper">';

        //$classes = array( 'imagewrapper' );
        $classes = array();
        $image_link = wp_get_attachment_url( $attachment_id );

        if ( $image_link ) {

        $image       = wp_get_attachment_image( $attachment_id, apply_filters( 'single_product_large_thumbnail_size', 'shop_single' ) );
        $image_class = esc_attr( implode( ' ', $classes ) );
        $image_title = esc_attr( get_the_title( $attachment_id ) );

        echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '<a href="%s" itemprop="image" class="woocommerce-main-image zoom" title="%s" data-rel="prettyPhoto' . $gallery . '">%s</a>', $image_link, $image_caption, $image ), $post->ID );

        } else {

        echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '<img src="%s" alt="%s" />', wc_placeholder_img_src(), __( 'Placeholder', 'woocommerce' ) ), $post->ID );

        }
    }
?>

<?php do_action( 'woocommerce_product_thumbnails' ); ?>

Just recently figured it out, so it possibly needs some finishing touches, but might point you in the right direction.

Однако я не могу удалить изображение продукта из галереи. Код, который должен это сделать, таков (добавлен в product-thumbnails.php):

unset($attachment_ids);

Все, что это делает для меня, это удаление ВСЕХ эскизов галереи. Может быть, вы разобрались с этим?

person Hege    schedule 24.10.2015

Положи это:

unset($attachment_ids); // Don't display first image in product gallery, only as product image

прямо перед циклом foreach в product-thumbnails.php. Он работает нормально для меня.

person Debbie    schedule 29.02.2016

Хеге правильно сделал, заменив код страницы product-image.php.

Чтобы удалить только первую миниатюру, а не все, используйте

unset($attachment_ids[0]);

на product-thumbnails.php

person Nicole Sauk    schedule 22.04.2017