WooCommerce - как убрать стандартное изображение-заполнитель?
Как можно показывать изображения только для некоторых товаров, но не для других?
Я работаю над меню ресторана с возможностью онлайн-заказа, отображая меню (товары WooCommerce) с помощью шорткодов - например, [product_category category="starters" orderby="date" order="asc"] и т.д.
Для многих позиций не требуется изображение, но я обнаружил, что если у товара нет привязанного изображения, то WooCommerce автоматически добавляет некрасивый заполнитель в списке.
Я могу отключить все миниатюры, но мне все еще нужна поддержка миниатюр для тех товаров, которым требуется изображение.
Если я удаляю стандартное изображение-заполнитель, оно заменяется текстом "placeholder"!
Если я заменяю их заполнитель маленьким прозрачным .png файлом, то он масштабируется до размера миниатюр, создавая нежелательный пробел "отсутствующего изображения".
Не знаю, что еще можно попробовать? Спасибо

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

Нашел ответ в другом месте 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 );

Это простой способ удалить изображение-заполнитель по умолчанию. Просто следуйте шагам:
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 );
}
Ваша проблема будет решена :)
Спасибо
