Obtener atributos del producto actual y almacenarlos en una variable
He estado tratando de averiguar cómo puedo obtener los atributos del producto actual, almacenarlos en una variable y colocarlos en una clase.
He logrado obtener los atributos del producto, sin embargo, parece que está mostrando todos los atributos de productos en todos los productos que he configurado. Aquí está el código con el que he estado trabajando.
<div id="Container" class="nine columns mixitup-container bevtools-liquor">
<?php
$liquor = new WP_Query( array(
'post_type' => 'product',
'product_cat' => 'liquors',
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'instock'
)
)
) );
if ( $liquor->have_posts() ) : while ( $liquor->have_posts() ) : $liquor->the_post();
?>
// En este bucle foreach, estoy tratando de obtener todos los términos para los atributos liquor-brands
<?php
$brand_terms = get_the_terms( $post, 'pa_liquor-brands' );
foreach ( $brand_terms as $term ) :
?>
<?php $brand_string = ''; ?>
<?php $brand_string .= $term->slug . ' '; ?>
<?php endforeach; ?>
<div id="post-<?php the_ID(); ?>" class="three columns mix product-post <?php echo $brand_string ?>" >
</div>
<?php wp_reset_postdata(); ?>
<?php endwhile; else: ?>
<?php //mensaje de error ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
Después de ejecutar el código, así es como se ve la salida.
<div id="post-2190" class="34th-pursuit-joes-brew absolut aviation-gin bacardi botanist citadelle-gin don-papa gvine grey-goose jack-daniel johnnie-walker makers-mark monkey-shoulder pale-ale-katipunan" style="display: inline-block;" data-bound="">
</div>
<div id="post-2192" class="34th-pursuit-joes-brew absolut aviation-gin bacardi botanist citadelle-gin don-papa gvine grey-goose jack-daniel johnnie-walker makers-mark monkey-shoulder pale-ale-katipunan" style="display: inline-block;" data-bound="">
</div>
Como pueden ver, ambos productos están mostrando todos los atributos de producto en lugar de mostrar solo los que tienen asignados.

get_terms()
Recupera los términos en una taxonomía dada o lista de taxonomías.
Lo que necesitas es
get_the_terms()
Recupera los términos de la taxonomía que están asociados al post.
Así que simplemente puedes reemplazar
$brand_terms = get_terms( 'pa_liquor-brands' );
con
$brand_terms = get_the_terms( $post, 'pa_liquor-brands' );
Y eso debería solucionarlo.
Puedes leer más sobre estas dos funciones aquí:
https://developer.wordpress.org/reference/functions/get_terms/ https://developer.wordpress.org/reference/functions/get_the_terms/
Edición:
También necesitarás reiniciar tu $brand_string
de lo contrario agregará términos de otros posts y los mostrará
$brand_terms = get_the_terms($post, 'pa_liquor-brands');
$brand_string = ''; // Reiniciar cadena
foreach ($brand_terms as $term) :
$brand_string .= $term->slug . ' ';
endforeach;
// echo $brand_string aquí abajo en algún lugar

Probé tu solución pero sigue mostrando el mismo problema. Todavía muestra todas las taxonomías de todos los productos

Intenta reiniciar $brand_string justo dentro de tu bucle. Si no lo reinicias, seguirá acumulando datos de otras publicaciones.

Hola Nath, he actualizado mi código con tu respuesta. No estoy seguro de haberlo hecho bien, puedes revisarlo arriba
