es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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 archivo functions.php y utilizarlo para modificar los argumentos de la consulta del producto.

    add_filter( 'woocommerce_shortcode_products_query', 'custom_meta_product_query', 10, 3 );
    function custom_meta_product_query( $query_args, $atts, $loop_name ) {
        if ( isset( $atts['is_group'] ) && ! empty( $atts['is_group'] ) ) {
            $query_args['meta_query'] = array(
                array(
                    'key'     => '_is_group',
                    'value'   => sanitize_text_field( $atts['is_group'] ),
                    'compare' => '=',
                ),
            );
        }
        return $query_args;
    }
    

    Este código comprueba si está configurado el atributo is_group en el shortcode y, si lo está, agrega un argumento de meta_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:

    [products columns="3" is_group="yes"]
    

    Esto solo devolverá productos que tengan el campo de meta _is_group configurado en yes.

Comments are closed.