Woocommerce - ¿eliminar la imagen placeholder por defecto?
¿Cómo puedo mostrar imágenes solo para algunos productos pero no para otros?
Estoy trabajando en un menú de restaurante con pedidos en línea, mostrando el menú de comida (productos de WooCommerce) con shortcodes - por ejemplo [product_category category="starters" orderby="date" order="asc"] etc.
Muchos de los productos no requieren una imagen, pero he descubierto que si un producto no tiene una imagen asociada, WooCommerce automáticamente agrega un placeholder poco atractivo en los listados.
Puedo desactivar todas las miniaturas, pero aún necesito soporte de miniaturas para cualquier producto que requiera una imagen.
¡Si elimino la imagen placeholder por defecto, se reemplaza con el texto "placeholder"!
Si reemplazo su placeholder con un pequeño .png transparente, este se escala al tamaño que tengan las miniaturas, creando un espacio indeseado de "imagen faltante".
¿No sé qué más intentar? Gracias

woocommerce_template_loop_product_thumbnail
es una función "pluggable", lo que significa que puedes sobrescribirla con tu propio código. Cada vez que veas una función en WordPress que tenga esta estructura:
if ( ! function_exists( 'woocommerce_template_loop_product_thumbnail' ) ) {
/**
* Obtiene la miniatura del producto para el loop.
*
* @access public
* @subpackage Loop
* @return void
*/
function woocommerce_template_loop_product_thumbnail() {
echo woocommerce_get_product_thumbnail();
}
}
el chequeo if ( ! function_exists('algo' ) )
indica que es una función pluggable que puedes sobrescribir creando una función con el mismo nombre en tu tema o tema hijo.
La función de WooCommerce básicamente muestra la miniatura si existe o un placeholder si no existe, por lo que en tu propia versión solo necesitarías eliminar esa parte, así:
function woocommerce_template_loop_product_thumbnail() {
global $post;
if ( has_post_thumbnail() )
echo get_the_post_thumbnail( $post->ID, 'shop_catalog' );
}

Encontré una respuesta en otro lugar http://www.peterrknight.com/woocommerce-tutorial-better-product-listings-for-imageless-products-part-1/ que incluyo. Probablemente podría limpiarse o simplificarse, pero parece funcionar perfectamente al eliminar el marcador de posición de imagen predeterminado para cualquier producto que no tenga imagen:
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 );

Esta es una forma sencilla de eliminar la imagen predeterminada de marcador de posición. Solo sigue estos pasos:
1: Ve al plugin de WooCommerce
2: Accede a la carpeta templates
3: Luego ingresa a la carpeta single product
Allí encontrarás el archivo product-image.php
.
Ábrelo y simplemente elimina el siguiente código mencionado:
else {
echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '<img src="%s" alt="Marcador de posición" />', woocommerce_placeholder_img_src() ), $post->ID );
}
Tu problema quedará resuelto :)
Gracias
