Reemplace la imagen del marcador de posición de WooCommerce según la categoría del producto

2 minutos de lectura

avatar de usuario
DadaB

Estoy tratando de cambiar el marcador de posición de imagen predeterminado para productos sin imágenes a imágenes de acuerdo con su categoría de producto.

Estoy usando:

add_filter( 'woocommerce_placeholder_img_src', 'my_custom_woocommerce_placeholder', 10 );

    //  Function to return new placeholder image URL. 
    function my_custom_woocommerce_placeholder( $image_url )
     {  
        if ($product_category == 'category1') {
            $image_url="http://website.com/imageforCategory.png"; 
        }
        elseif ($product_category == 'category2') {
            $image_url="http://website.com/imageforCategory.png"; 
        }
        else
        {
            $image_url="http://website.com/defaultImage.png"; 
        }
        
        return $image_url;
     }

Estoy atascado en obtener la categoría del producto ($product_category) detectado en functions.php archivo de mi tema.

En content-single-product.php página que estoy definiendo

global $product 

y luego simplemente usando

$product->get_categories();

para obtener la categoría de producto.

como lo hago en functions.php de mi tema?

avatar de usuario
7uc1f3r

podrías usar tiene_término() – Comprueba si la publicación actual tiene alguno de los términos dados.

Entonces obtienes:

// Single product page
function filter_woocommerce_placeholder_img_src( $src ) {
    // Get the global product object
    global $product;

    // Is a WC product
    if ( is_a( $product, 'WC_Product' ) ) {
        // Has term (product category)
        if ( has_term( 'categorie-1', 'product_cat', $product->get_id() ) ) {
            $src="http://website.com/imageforCategory1.png";
        } elseif ( has_term( array('categorie-2', 'categorie-3'), 'product_cat', $product->get_id() ) ) {
            $src="http://website.com/imageforCategory2.png";
        }
    }
    
    return $src;
}
add_filter( 'woocommerce_placeholder_img_src', 'filter_woocommerce_placeholder_img_src', 10, 1 );

// Archive/Shop page
function filter_woocommerce_placeholder_img ( $image_html, $size, $dimensions ) {
    $dimensions = wc_get_image_size( $size );
    
    $default_attr = array(
        'class' => 'woocommerce-placeholder wp-post-image',
        'alt'   => __( 'Placeholder', 'woocommerce' ),
    );
    
    $attr = wp_parse_args( '', $default_attr );
    
    $image      = wc_placeholder_img_src( $size );
    $hwstring   = image_hwstring( $dimensions['width'], $dimensions['height'] );
    $attributes = array();

    foreach ( $attr as $name => $value ) {
        $attribute[] = esc_attr( $name ) . '="' . esc_attr( $value ) . '"';
    }

    $image_html="<img src="" . esc_url( $image ) . '" ' . $hwstring . implode( ' ', $attribute ) . '/>';
    
    return $image_html;
}
add_filter( 'woocommerce_placeholder_img', 'filter_woocommerce_placeholder_img', 10, 3 );

Nota: la woocommerce_placeholder_img gancho, utilizado en las devoluciones de la página de archivo/tienda $image_html. Esa cadena se puede adaptar a sus necesidades. Tales como image src, class, alt, size, etc.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad