Obtenga una lista de slugs para un atributo de producto específico en páginas de archivo en Woocommerce

2 minutos de lectura

avatar de usuario
eric

Necesito mostrar algunos íconos personalizados en la página de descripción general del producto (categoría, archivo) en función de un conjunto de ingredientes (que es un atributo del producto Woo).

me estoy enganchando en woocommerce_after_shop_loop_item_title y ese es el lugar correcto para mostrar lo que quiero. Sin embargo, no puedo obtener fácilmente una lista de las babosas para los atributos. Mi objetivo es obtener una serie de babosas que sea como ['onion', 'fresh-lettuce', 'cheese'] o lo que sea.

Mi intento actual es algo como:

add_filter( 'woocommerce_after_shop_loop_item_title', function () {
    global $product;
    $attrs = $product->get_attributes();
    $slugs = $attrs->get_slugs( 'ingredients' );
    var_dump( $slugs );
});

Pero eso no funciona.

Tenga en cuenta que $product->get_attributes() funciona, pero es el mismo para todos los productos en la página de categoría.

¡Por favor avise!

avatar de usuario
LoicTheAztec

Pruebe lo siguiente usando WC_Product get_attribute() método:

add_filter( 'woocommerce_after_shop_loop_item_title', 'loop_display_ingredients', 15 );
function loop_display_ingredients() {
    global $product;
    // The attribute slug
    $attribute="ingredients";
    // Get attribute term names in a coma separated string
    $term_names = $product->get_attribute( $attribute );

    // Display a coma separted string of term names
    echo '<p>' . $term_names . '</p>';
}

El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y funciona.


Ahora si quieres obtener el término babosas en una lista separada por comas, usará lo siguiente:

// The attribute slug
$attribute="ingredients";
// Get attribute term names in a coma separated string
$term_names = $product->get_attribute( $attribute );

// Get the array of the WP_Term objects
$term_slugs = array();
$term_names = str_replace(', ', ',', $term_names);
$term_names_array = explode(',', $term_names);
if(reset($term_names_array)){
    foreach( $term_names_array as $term_name ){
        // Get the WP_Term object for each term name
        $term = get_term_by( 'name', $term_name, 'pa_'.$attribute );
        // Set the term slug in an array
        $term_slugs[] = $term->slug;
    }
    // Display a coma separted string of term slugs
    echo '<p>' . implode(', ', $term_slugs); . '</p>';
}

  • ¡Gracias! El fragmento de código funciona muy bien. Me sorprende que Woo no tenga una función integrada para hacer esto… parece que el método integrado get_attribute en los productos ya está obteniendo todos los términos y pegándolos manualmente. En cualquier caso, su código es perfecto. Gracias.

    –Eric

    19 de junio de 2018 a las 14:56

¿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