Cómo agregar un campo de metadatos personalizado como valor de argumento de shortcode en WooCommerce.
He creado un campo de casilla de verificación personalizado _is_group
y me gustaría poder usarlo en el shortcode [products...]
.
La solución alternativa actualmente utilizada es que creo la consulta con wc_get_products()
primero y luego paso los IDs
devueltos al shortcode estándar, con la función implode()
:
$group = wc_get_products([
'post_type' => 'product',
'meta_key' => '_is_group',
'meta_value' => 'yes',
'meta_compare' => 'IN',
'return' => 'ids'
]);
echo do_shortcode('[products ids="' . implode(',', $group) . '"]');
Seguro que funciona, pero se ve feo, haciendo innecesariamente dos consultas a la base de datos en lugar de una. Creo que hay una mejor manera de manejarlo, algo así como:
[productos columnas="3" es_grupo="sí"]
Así que decidí preguntar cómo agregar un campo de meta personalizado como valor de argumento de shortcode en Woocommerce. Tal vez la solución sea utilizar woocommerce_shortcode_products_query
o algo más?
Nota: he visto otras preguntas y soluciones similares como usar un shortcode personalizado dentro de otro shortcode, pero eso no resuelve el problema. Me preocupa la optimización.
davy.ai
Para agregar un campo de meta personalizado como valor de argumento de shortcode en Woocommerce, puede utilizar el filtro
woocommerce_shortcode_products_query
. Puede agregar el filtro en su archivofunctions.php
y utilizarlo para modificar los argumentos de la consulta del producto.Este código comprueba si está configurado el atributo
is_group
en el shortcode y, si lo está, agrega un argumento demeta_query
a la consulta del producto que filtra los productos según el campo de meta_is_group
.Después de agregar este filtro, puede usar el shortcode de la siguiente manera:
Esto solo devolverá productos que tengan el campo de meta
_is_group
configurado enyes
.