WooCommerce - как убрать стандартное изображение-заполнитель?

5 авг. 2013 г., 10:42:41
Просмотры: 23.4K
Голосов: 2

Как можно показывать изображения только для некоторых товаров, но не для других?

Я работаю над меню ресторана с возможностью онлайн-заказа, отображая меню (товары WooCommerce) с помощью шорткодов - например, [product_category category="starters" orderby="date" order="asc"] и т.д.

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

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

Если я удаляю стандартное изображение-заполнитель, оно заменяется текстом "placeholder"!

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

Не знаю, что еще можно попробовать? Спасибо

0
Все ответы на вопрос 3
1

woocommerce_template_loop_product_thumbnail является заменяемой (pluggable) функцией, поэтому вы можете переопределить её своим собственным кодом. Всякий раз, когда вы видите функцию в WordPress с такой структурой:

if ( ! function_exists( 'woocommerce_template_loop_product_thumbnail' ) ) {

/**
 * Получает миниатюру товара для цикла.
 *
 * @access public
 * @subpackage  Loop
 * @return void
 */
function woocommerce_template_loop_product_thumbnail() {
    echo woocommerce_get_product_thumbnail();
}
}

проверка if ( ! function_exists('something' ) ) указывает на заменяемую функцию, которую вы можете переопределить, создав функцию с таким же именем в своей теме или дочерней теме.

Функция WooCommerce по умолчанию выводит миниатюру, если она существует, или изображение-заглушку, если миниатюры нет. В вашей собственной версии функции можно исключить эту часть, например так:

function woocommerce_template_loop_product_thumbnail() {
    global $post;
    if ( has_post_thumbnail() )
          echo get_the_post_thumbnail( $post->ID, 'shop_catalog' );
}
5 авг. 2013 г. 17:20:23
Комментарии

Спасибо, Хельга (викинг) :) И спасибо, что нашли время объяснить, как и почему это работает - очень полезно

speedypancake speedypancake
5 авг. 2013 г. 19:02:32
1

Нашел ответ в другом месте http://www.peterrknight.com/woocommerce-tutorial-better-product-listings-for-imageless-products-part-1/, который я включил. Возможно, код можно улучшить или упростить, но он отлично работает, удаляя стандартный заглушечный изображение для товаров, у которых нет изображения:

function before_imageless_product() {
if( !has_post_thumbnail( get_the_id() ) ){
    remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
    echo '<div class="no-image">';
}
}
add_action( 'woocommerce_before_shop_loop_item', 'before_imageless_product', 9 );

function after_imageless_product() {
if( !has_post_thumbnail( get_the_id() ) ){
    add_action( 'woocommerce_before_shop_loop_item_title',      'woocommerce_template_loop_product_thumbnail', 10 );
    echo '</div>';
}
}
add_action( 'woocommerce_after_shop_loop_item', 'after_imageless_product', 9 );
5 авг. 2013 г. 14:28:56
Комментарии

Спасибо за код, отлично работает для товаров. Можно ли как-то модифицировать его для категорий товаров вместо этого?

Richard Mišenčík Richard Mišenčík
13 дек. 2018 г. 13:33:19
1
-2

Это простой способ удалить изображение-заполнитель по умолчанию. Просто следуйте шагам:

1: Перейдите в плагин WooCommerce
2: Перейдите в папку templates
3: Затем перейдите в папку single product

Там вы найдете файл product-image.php. Откройте его и просто удалите указанный ниже код

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

Ваша проблема будет решена :)

Спасибо

19 дек. 2013 г. 14:23:52
Комментарии

Вы никогда не должны изменять файлы ядра WordPress, темы или плагинов (по крайней мере, если есть другие способы). Как только вы обновите плагин и т.д., ваши изменения исчезнут.

tfrommen tfrommen
19 дек. 2013 г. 14:39:07