Recomiendo ponerse en contacto con el soporte de WooCommerce sobre esto a través de https://wooCommerce.com/my-account/contact-support/ si tiene alguno de sus productos de WooCommerce pagados o https://wordpress.org/support/plugin/woocommerce/ si no lo hace.
Creo que el nombre de la tabla en tu SQL está mal, debería ser wp_termmeta
😉
En cualquier caso, puede obtener una variedad de objetos o campos de términos con WP_Term_Query
o su función de envoltura get_terms()
. Siempre es mejor tener resultados de clasificación SQL siempre que sea posible en lugar de confiar en PHP.
No me queda claro lo que realmente estás tratando de hacer aquí. Desde el texto de su tema, creo que desea enumerar todos los términos en una taxonomía, ordenada por un meta valor a término. Está bien, pero eso no es lo que su consulta está haciendo 🙂 Simplemente está obteniendo meta valores de término.
Obtener tales términos es muy similar a obtener publicaciones ordenadas por un meta valor particular.
// get a list of brand names ordered by meta value
function brands_ordered() {
$terms = get_terms([
'taxonomy' => 'wc_classification', // Guessing the name here -- verify!
'fields' => 'name'
'meta_key' => 'order',
'orderby' => 'meta_value_num',
]);
return implode( $terms, ', ');
}
echo brands_ordered();
(No probado)
@BCWorkz
Gracias … has respondido a todas mis preguntas y más … además señalaste mi Foopar. No puedo creer que no me di cuenta.
Hay más código después del código que compartí que muestra iconos para cada una de las «marcas», pero los quiero en mi orden, no orden alfabético …
Gracias de nuevo.
Gracias de nuevo, usé lo que sugirió, y ahora mis íconos se muestran en el orden que quiero.
$classifications = wp_get_post_terms($product->get_id(), 'product_brand');if (!empty($classifications) && !is_wp_error($classifications)) {
// Fetch term meta 'order' and store it in an array
foreach ($classifications as $key => $term) {
$order = get_term_meta($term->term_id, 'order', true);
$classifications[$key]->order_value = $order ? intval($order) : PHP_INT_MAX; // Default to max value if not set
}
// Sort terms based on order value
usort($classifications, function ($a, $b) {
return $a->order_value <=> $b->order_value;
});
// Now $classifications contains terms in the order defined in wp_termmeta
echo '
Classification:
';
foreach ($classifications as $classification) {
$classification_url = get_term_link($classification);
$thumbnail_id = get_term_meta($classification->term_id, 'thumbnail_id', true);
$classification_description = $classification->description;
$image_url = $thumbnail_id ? wp_get_attachment_url($thumbnail_id) : '';if (!is_wp_error($classification_url) && $image_url) {
echo ''
. '
'
. '';
}
}
echo '
';
}
Publiqué mi código en caso de que alguna vez ayuda a alguien en el futuro …