php - Woocommerce - muestra diferentes miniaturas de productos en la página de categorías

CorePress2024-01-25  9

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

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare