variaciones woocommerce

Estoy creando un tema woocommerce y tengo variaciones de producto, es decir, el tamaño que se muestra en la página de detalles del producto, pero el problema es que quiero obtener todas las variaciones en mi página personalizada php mediante el uso de identificación del producto. ¿Alguien me puede ayudar?

Gracias por adelantado.

Puede usar: $available_variations = $product->get_available_variations();

Si esta es una plantilla de estilo única, asegúrese de agregar global $product; cerca de la cima.

A partir de ahí, puede profundizar en las variaciones y hacer lo que desee … ya que no tuvo ningún resultado específico, espero que esto lo coloque en el camino correcto.

Puedes usar el siguiente código:

 global $woocommerce, $product, $post; // test if product is variable if ($product->is_type( 'variable' )) { $available_variations = $product->get_available_variations(); foreach ($available_variations as $key => $value) { //get values HERE } } 

El siguiente código:

 $variations = $product->get_available_variations(); 

devolverá toda la variancia del producto

Esta función se coloca donde se muestran todas las variaciones:

 \wp-content\plugins\woocommerce\templates\single-product\add-to-cart\variable.php 

Un problema común a menudo comienza al cambiar las tags “En stock” o “Agotado” por un solo producto. Hay pocas soluciones, donde necesita cambiar el archivo functions.php y agregar un nuevo filtro.

Los problemas se vuelven más complicados cuando necesita modificar esto para las variaciones del producto.

Esta puede ser su solución: http://bucketpress.com/changing-stock-availability-text-for-product-variations

Para mostrar las variaciones disponibles del producto, debe modificar el archivo variable.php, que se puede encontrar en / wp-content / plugins / woocommerce / templates / single-product / add-to-cart /

Encuentra esto:

 

y antes de pegar este código:

 foreach( $available_variations as $i => $variation ) { //check if variation has stock or not if ( $variation['is_in_stock'] ) { // Get max qty that user can purchase $max_qty = $variation['max_qty']; // Prepare availability html for stock available instance $availability_html = '

' . $max_qty . ' units available for your purchase.' . '

'; } else { // Prepare availability html for out of stock instance $availability_html = '

Oops, we have no stock left.

'; } $available_variations[$i]['availability_html'] = $availability_html; }

No te olvides de mover la etiqueta php end “?>” Desde esta línea

 do_action( 'woocommerce_before_add_to_cart_form' ); ?> 

después de tu nuevo código

Entonces, el archivo completo de variable.php debería tener un aspecto similar a este (WooCommerce 3.2.4):

 < ?php /** * Variable product add to cart * * This template can be overridden by copying it to yourtheme/woocommerce/single-product/add-to-cart/variable.php. * * HOWEVER, on occasion WooCommerce will need to update template files and you * (the theme developer) will need to copy the new files to your theme to * maintain compatibility. We try to do this as little as possible, but it does * happen. When this occurs the version of the template file will be bumped and * the readme will list any important changes. * * @see https://docs.woocommerce.com/document/template-structure/ * @author WooThemes * @package WooCommerce/Templates * @version 3.0.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; } global $product; $attribute_keys = array_keys( $attributes ); do_action( 'woocommerce_before_add_to_cart_form' ); // Your New Code goes here: foreach( $available_variations as $i => $variation ) { // check if variation has stock or not if ( $variation['is_in_stock'] ) { // Get max qty that user can purchase $max_qty = $variation['max_qty']; // Prepare availability html for stock available instance $availability_html = '

Available: ' . $max_qty . '

'; } else { // Prepare availability html for out of stock instance $availability_html = '

Out of stock!

'; } $available_variations[$i]['availability_html'] = $availability_html; } ?>
< ?php do_action( 'woocommerce_before_variations_form' ); ?> < ?php if ( empty( $available_variations ) && false !== $available_variations ) : ?>

< ?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?>

< ?php else : ?> < ?php foreach ( $attributes as $attribute_name => $options ) : ?> < ?php endforeach;?>
< ?php $selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( stripslashes( urldecode( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) ) : $product->get_variation_default_attribute( $attribute_name ); wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) ); echo end( $attribute_keys ) === $attribute_name ? apply_filters( 'woocommerce_reset_variations_link', '' . esc_html__( 'Clear', 'woocommerce' ) . '' ) : ''; ?>
< ?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>
< ?php /** * woocommerce_before_single_variation Hook. */ do_action( 'woocommerce_before_single_variation' ); /** * woocommerce_single_variation hook. Used to output the cart button and placeholder for variation data. * @since 2.4.0 * @hooked woocommerce_single_variation - 10 Empty div for variation data. * @hooked woocommerce_single_variation_add_to_cart_button - 20 Qty and cart button. */ do_action( 'woocommerce_single_variation' ); /** * woocommerce_after_single_variation Hook. */ do_action( 'woocommerce_after_single_variation' ); ?>
< ?php do_action( 'woocommerce_after_add_to_cart_button' ); ?> < ?php endif; ?> < ?php do_action( 'woocommerce_after_variations_form' ); ?>
< ?php do_action( 'woocommerce_after_add_to_cart_form' );

Todos los créditos para "Kevin" de: http://bucketpress.com/author/base-admin

Prueba esto,

 < ?php $name_size = get_post_meta($_GET['pr_id'],'product_size', true); $t_shirt_sizes_array = wp_get_post_terms($_GET['pr_id'],'pa_size'); $t_shirt_size = array(); $t_shirt_price = array(); for($scnt = 0; $scnt < count($t_shirt_sizes_array); $scnt++){ $t_shirt_size[] = $t_shirt_sizes_array[$scnt]->name; $t_shirt_price[] = $t_shirt_sizes_array[$scnt]->slug; $t_shirt_size_id[] = $t_shirt_sizes_array[$scnt]->term_id; } $cnt = 1; for($i = 0; $i < count($t_shirt_size); $i++){ $name_size = $t_shirt_size[$i]; $result = $wpdb->get_col( "SELECT slug FROM {$wpdb->prefix}terms WHERE name = '".$t_shirt_size[$i]."'" ); $term_slug = ( !empty( $result ) ) ? $result[0] : $term; $query = "SELECT postmeta.post_id AS product_id FROM {$wpdb->prefix}postmeta AS postmeta LEFT JOIN {$wpdb->prefix}posts AS products ON ( products.ID = postmeta.post_id ) WHERE postmeta.meta_key LIKE 'attribute_%' AND postmeta.meta_value = '$term_slug' AND products.post_parent = ".$_GET['pr_id']; $variation_id = $wpdb->get_col( $query ); $parent = wp_get_post_parent_id( $variation_id[0] ); if ( $parent > 0 ) { echo $name_size; $_product = new WC_Product_Variation( $variation_id[0] ); echo $_product->get_price(); } $price = $t_shirt_price[$i]; $cnt++; } ?>