Для начала приведу простой пример как достать вариативности товаров WooCommerce на PHP.
PHP
<?php
global $product;
if ($product->is_type( 'variable' ))
{
$args = array(
'post_type' => 'product_variation',
'post_status' => array( 'private', 'publish' ),
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_parent' => get_the_ID() // get parent post-ID
);
$variations = get_posts( $args );
//echo '<pre>'; print_r($variations); echo '</pre>';
}
foreach ( $variations as $variation ) {
$variation_ID = $variation->ID;
echo $variation_ID . '<br>';
$product_variation = new WC_Product_Variation( $variation_ID );
$variation_price = $product_variation->get_price_html();
echo $variation_price . '<br>';
$variation_name = $product_variation->get_variation_attributes();
//echo '<pre>'; print_r($variation_name); echo '</pre>';
echo $variation_name [ 'attribute_pa_razmer' ];
}
?>
И вариант как это осуществлено мной в интернет-магазине RusWool.
Код PHP файла карточки товара content-product.php
<?php
/**
* The template for displaying product content within loops
*
* This template can be overridden by copying it to yourtheme/woocommerce/content-product.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/
* @package WooCommerce\Templates
* @version 3.6.0
*/
defined( 'ABSPATH' ) || exit;
global $product;
// Ensure visibility.
if ( empty( $product ) || ! $product->is_visible() ) {
return;
}
?>
<div class="container-002__items-itm">
<a class="container-002__items-itm-linkimg" href="<?php echo esc_url(get_the_permalink());?>">
<?php $post_thumbnail_id = $product->get_image_id();?>
<img class="container-002__items-itm-linkimg-img" src="<?php echo wp_get_attachment_url($post_thumbnail_id);?>" alt="<?php echo $product->get_title(); ?>">
</a>
<a class="container-002__items-itm-linktext" href="<?php echo esc_url(get_the_permalink());?>"><?php echo $product->get_title(); ?></a>
<p class="container-002__items-itm-description">
В холодную морозную погоду приходится думать в первую очередь о тепле и комфорте, подбирая соответст..
</p>
<p class="container-002__items-itm-stars">★★★★☆</p>
<p class="container-002__items-itm-onsklad">Доступность: <span>На складе</span></p>
<p class="container-002__items-itm-text">размер*</p>
<?php
global $product;
if ($product->is_type( 'variable' ))
{
$args = array(
'post_type' => 'product_variation',
'post_status' => array( 'private', 'publish' ),
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_parent' => get_the_ID() // get parent post-ID
);
$variations = get_posts( $args );
?>
<select name="size_select">
<?php
foreach ( $variations as $variation ) {
// get variation ID
$variation_ID = $variation->ID;
// get variations meta
$product_variation = new WC_Product_Variation( $variation_ID );
// get variation price
$variation_price = $product_variation->get_price_html();
//get variation name
$variation_name = $product_variation->get_variation_attributes();
if ( $variation_name [ 'attribute_pa_razmer' ] ) {
?>
<option value="<? echo $variation_ID; ?>"><? echo $variation_name [ 'attribute_pa_razmer' ]; ?></option>
<?php
}}}
?>
</select>
<p class="container-002__items-itm-price"><? echo $product->get_variation_price();?> р.</p>
<div class="container-002__items-itm-button">
<input type="number" name="count" id="product_count" class="form-control" value="1">
<a class="container-002__items-itm-linkcart" href="">
<i class="fa-solid fa-cart-shopping"></i> В КОРЗИНУ
</a>
</div>
</div>