the_tag the_id the tag page_id get_the_tags first codex php wordpress woocommerce

php - the_id - the_tag()



variaciones de woocommerce (5)

Estoy creando un tema de woocommerce y tengo variaciones del 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 php personalizada utilizando la identificación del producto, ¿alguien puede ayudarme?

Gracias por adelantado.


El siguiente código:

$variations = $product->get_available_variations();

Devolverá toda la variante del producto.

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

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


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++; } ?>


Puede utilizar 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 } }


Un problema común a menudo comienza con el cambio de las etiquetas "En stock" o "Sin stock" para un solo producto. Hay algunas soluciones por ahí, 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 encuentra en / wp-content / plugins / woocommerce / templates / single-product / add-to-cart /

Encuentra esto:

<form class="variations_form cart" method="post" enctype=''multipart/form-data'' data-product_id="<?php echo absint( $product->id ); ?>" data-product_variations="<?php echo htmlspecialchars( json_encode( $available_variations ) ) ?>">

y antes de etiqueta 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 = ''<p class="stock in-stock">'' . $max_qty . '' units available for your purchase.'' . ''</p>''; } else { // Prepare availability html for out of stock instance $availability_html = ''<p class="stock out-of-stock">Oops, we have no stock left.</p>''; } $available_variations[$i][''availability_html''] = $availability_html; }

No te olvides de mover la etiqueta final de php "?>" Desde esta línea

do_action( ''woocommerce_before_add_to_cart_form'' ); ?>

después de su nuevo código.

Por lo tanto, el archivo variable.php completo debería gustar algo como esto (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 = ''<p class="stock in-stock">Available: '' . $max_qty . ''</p>''; } else { // Prepare availability html for out of stock instance $availability_html = ''<p class="stock out-of-stock">Out of stock!</p>''; } $available_variations[$i][''availability_html''] = $availability_html; } ?> <form class="variations_form cart" method="post" enctype=''multipart/form-data'' data-product_id="<?php echo absint( $product->get_id() ); ?>" data-product_variations="<?php echo htmlspecialchars( wp_json_encode( $available_variations ) ) ?>"> <?php do_action( ''woocommerce_before_variations_form'' ); ?> <?php if ( empty( $available_variations ) && false !== $available_variations ) : ?> <p class="stock out-of-stock"><?php _e( ''This product is currently out of stock and unavailable.'', ''woocommerce'' ); ?></p> <?php else : ?> <table class="variations" cellspacing="0"> <tbody> <?php foreach ( $attributes as $attribute_name => $options ) : ?> <tr> <td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label></td> <td class="value"> <?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'', ''<a class="reset_variations" href="#">'' . esc_html__( ''Clear'', ''woocommerce'' ) . ''</a>'' ) : ''''; ?> </td> </tr> <?php endforeach;?> </tbody> </table> <?php do_action( ''woocommerce_before_add_to_cart_button'' ); ?> <div class="single_variation_wrap"> <?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'' ); ?> </div> <?php do_action( ''woocommerce_after_add_to_cart_button'' ); ?> <?php endif; ?> <?php do_action( ''woocommerce_after_variations_form'' ); ?> </form> <?php do_action( ''woocommerce_after_add_to_cart_form'' );

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


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

Si se trata de una plantilla de estilo único, asegúrese de agregar global $product; cerca de la cima.

A partir de ahí, puede indagar sobre las variaciones y hacer lo que desee ... ya que no tenía ningún resultado específico, espero que esto lo ponga en el camino correcto.