Me gustaría mostrar una miniatura diferente para algunos de mis productos, si aparecen en categorías específicas.
He eliminado las miniaturas actuales de la categoría específica y estoy usando un campo personalizado para obtener la nueva miniatura de los productos que quiero reemplazar, lo cual está funcionando muy bien. Sin embargo, cuando intento acceder a la miniatura normal de los productos restantes, no funciona. ¿Alguna idea?
add_action( 'woocommerce_before_main_content', 'remove_test_category_thumbnails', 10 );
function remove_test_category_thumbnails() {
if (is_product_category('test-category')) {
remove_action('woocommerce_before_shop_loop_item_title' , 'woocommerce_template_loop_product_thumbnail' , 10);
}
}
add_action( 'woocommerce_before_shop_loop_item_title', 'add_test_category_thumbnails', 10 );
function add_test_category_thumbnails() {
global $post;
$testCatThumb = get_post_meta( $post->ID, 'step_dad_mug', true);
if (is_product_category('test-category') && (isset($testCatThumb)) ) {
echo wp_get_attachment_image( $testCatThumb );
}
else
echo woocommerce_get_product_thumbnail();
}
}
La comprobación isset() por sí sola no es suficiente. Si la variable $testCatThumb devuelve un valor vacío, isset($testCatThumb) volveráse vuelve verdadero porque solo verifica si la variable está declarada y no es NULL. En tu caso también deberías agregar ! vacío ($testCatThumb). Entonces, la declaración if podría ser: if ( is_product_category('test-category') && ( isset($testCatThumb) && ! vacío($testCatThumb) ) ) {.
- Vincenzo Di Gaetano
28 de marzo de 2021 a las 8:51
Gracias por tu respuesta. Probé su código y parece mostrar miniaturas originales, pero no la que quiero reemplazar. ¿Alguna idea?
- Ben Broadhurst
28/03/2021 a las 9:25
Hay dos opciones: no estás en la página de categoría de producto con un slug de categoría de prueba, o el producto no tiene la meta de publicación personalizada step_dad_mug.
- Vincenzo Di Gaetano
28 de marzo de 2021 a las 9:31
------------------------------------
Debes hacer eco de woocommerce_get_product_thumbnail. consulte el siguiente código.
add_action( 'woocommerce_before_main_content', 'remove_test_category_thumbnails', 10 );
function remove_test_category_thumbnails() {
if (is_product_category('test-category')) {
remove_action('woocommerce_before_shop_loop_item_title' , 'woocommerce_template_loop_product_thumbnail' , 10);
}
}
add_action( 'woocommerce_before_shop_loop_item_title', 'add_test_category_thumbnails', 10 );
function add_test_category_thumbnails() {
global $post;
$testCatThumb = get_post_meta( $post->ID, 'step_dad_mug', true);
if( is_product_category( 'test-category' ) && ( isset( $testCatThumb ) ) ) {
echo wp_get_attachment_image( $testCatThumb );
}else{
echo woocommerce_get_product_thumbnail();
}
}
2
Gracias por tu respuesta. Debo haberme perdido esto porque he estado probando muchas variaciones diferentes para intentar que funcione, pero agregar eco no lo resuelve.
- Ben Broadhurst
28 de marzo de 2021 a las 7:49
Lo probé en mi sitio y muestra la nueva miniatura en los productos con el campo personalizado (correctamente), pero en los productos sin el campo personalizado no muestra la miniatura del producto.
- Ben Broadhurst
28/03/2021 a las 9:45
------------------------------------
La siguiente función espera una identificación de publicación, ¿es eso lo que le estás pasando?
wp_get_attachment_image();
como parte de su condición if, puede verificar que el valor sea del tipo de valor correcto:
is_numeric($testCatThumb);
Tiendo a crear variables legibles, en lugar de tener condiciones horribles que tienes que analizar con tu cerebro cada vez que las lees:
function add_test_category_thumbnails() {
global $post;
$testCatThumb = get_post_meta( $post->ID, 'step_dad_mug', true);
$isPostId = !empty($testCatThumb) && is_numeric($testCatThumb);
$isValidAttachmentId = is_product_category('test-category') && $isPostId;
$image = $isValidAttachmentId ? wp_get_attachment_image($testCatThumb) : '';
// display custom image, or fallback to woocommerce thumbnail
echo !empty($image) ? $image : woocommerce_get_product_thumbnail();
}