the tag page obtener get_the_tags codex actual php wordpress woocommerce wp-query variations

php - tag - Woocommerce: muestra todos los productos y variaciones en la página de la tienda, manteniendo la paginación



wordpress get the page id (1)

Necesito mostrar cada producto, y en caso de que sea un producto variable (por ejemplo, varios colores), cada variación en la página de la tienda.

Al principio, escribí mi propia consulta para recuperar todas las variaciones si el producto las tenía:

$product = get_product(); global $variable_id; global $color; if ($product->product_type == "variable") { $variations = $product->get_available_variations(); foreach ($variations as $variation) { $color = $variation["attributes"]["attribute_pa_colour"]; $variable_id = $variation[''variation_id'']; wc_get_template_part(''content'', ''product''); } } else { $variable_id = null; $color = null; wc_get_template_part(''content'', ''product''); }

Establecí el parámetro global para la variación y luego obtuve la imagen correcta en otro archivo de plantilla con éxito.

El problema con esta solución es que la paginación está rota (1 producto aparece varias veces).

Entonces, lo que necesito lograr es manipular la consulta principal del producto para seleccionar todos los productos, donde los que tienen variaciones deben aparecer una vez para cada variación con el enlace de imagen correcto y el valor de variación (también necesito la información del producto principal para enlazar a la página correcta). Esto podría lograrse mediante una combinación de la izquierda en la misma tabla de productos, basada en post_parent.

La clave aquí es mantener el comportamiento woocommerce predeterminado. Esta es la función woocommerce para recuperar los productos:

private function query_products( $args ) { // Set base query arguments $query_args = array( ''fields'' => ''ids'', ''post_type'' => ''product'', ''post_status'' => ''publish'', ''meta_query'' => array(), ); if ( ! empty( $args[''type''] ) ) { $types = explode( '','', $args[''type''] ); $query_args[''tax_query''] = array( array( ''taxonomy'' => ''product_type'', ''field'' => ''slug'', ''terms'' => $types, ), ); unset( $args[''type''] ); } // Filter products by category if ( ! empty( $args[''category''] ) ) { $query_args[''product_cat''] = $args[''category'']; } // Filter by specific sku if ( ! empty( $args[''sku''] ) ) { if ( ! is_array( $query_args[''meta_query''] ) ) { $query_args[''meta_query''] = array(); } $query_args[''meta_query''][] = array( ''key'' => ''_sku'', ''value'' => $args[''sku''], ''compare'' => ''='' ); $query_args[''post_type''] = array( ''product'', ''product_variation'' ); } $query_args = $this->merge_query_args( $query_args, $args ); return new WP_Query( $query_args ); }

Básicamente, necesito encontrar una forma de anular esta función, para que se devuelva un objeto WP_Query que contenga todos los productos ''simples'' y un producto para cada variación de todos los productos ''variables'', mientras que todos los parámetros pasados ​​con $ args continúan funcionando.

¡Gracias por adelantado!


Encontré una solución: el complemento "Variaciones de Woocommerce Show Single Variations": https://iconicwp.com/products/woocommerce-show-single-variations/

Observación: si ya tiene categorías, debe eliminarlas y volver a agregarlas. Además, todavía no funciona para códigos cortos, aunque el autor está trabajando en ello.

Actualizado: Cambió el enlace al complemento