Woocommerce 3.0获取变体名称

Woocommerce 3.0获取变体名称,woocommerce,variations,Woocommerce,Variations,您好,我有下面的代码,它与Woocommerce的旧版本一起工作,以获取变体名称及其价格的摘录,在WC升级到3.0之后,现在不再工作了 function shortcode_handler($atts, $content = "", $shortcodename = "", $meta = "") { $output = ""; $meta['el_class']; global $woocommerce, $product; if(!is_object($wo

您好,我有下面的代码,它与Woocommerce的旧版本一起工作,以获取变体名称及其价格的摘录,在WC升级到3.0之后,现在不再工作了

function shortcode_handler($atts, $content = "", $shortcodename = "", $meta = "")
{
    $output = "";
    $meta['el_class'];

    global $woocommerce, $product;
    if(!is_object($woocommerce) || !is_object($woocommerce->query) || empty($product)) return;

    // $product = wc_get_product();

    $output .= "<div class='av-woo-calendar-button ".$meta['el_class']."'>";
    ob_start();?>

        <table cellspacing="0" cellpadding="2">
            <thead>
                <tr>
                    <th scope="col" style="text-align:left; background-color:rgba(155, 199, 239, 0.5); vertical-align:middle;"><?php _e('Cruise', 'whale_dolphins'); ?></th>
                    <th scope="col" style="text-align:center;background-color:rgba(155, 199, 239, 0.5);"><?php _e('Places<br/>available', 'whale_dolphins'); ?></th>
                </tr>
            </thead>
            <tbody>
            <?php

            $args = array(
                'post_type'         => 'product_variation',
                'post_status'       => 'publish',
                'posts_per_page'    => -1,
                'orderby'           => 'title',
                'order'             => 'ASC',
               'meta_query' => array(
                    array(
                        'key'       => '_stock',
                        'value'     => array('', false, null),
                        'compare'   => 'NOT IN'
                    )
                )
            );

            $loop = new WP_Query( $args );

            while ( $loop->have_posts() ) : $loop->the_post();

                            $product = new WC_Product_Variation( $loop->post->ID );
                    if (get_the_title( $loop->post->post_parent ) == 'CSR Expeditions Payment' || get_the_title( $loop->post->post_parent ) == 'Pagamento Spedizioni CSR')
                    {       
                        $variation_formatted_name = $product->get_formatted_name();
                        $variation_name_array = explode("&ndash;", $variation_formatted_name);
                        $variation_name = $variation_name_array[2];
                        $variation_price = $variation_name_array[3];
                        $variation_sku = $variation_name_array[0];
                        $variation_name_only = explode(":", $variation_name);
                        $variation_name_only = $variation_name_only[1];
                ?>

                <tr>
                    <td><?php  echo $variation_name_only ."&ndash;" . $variation_price; ?></td>
                    <?php
                        if (intval ($product->stock) >0)
                        { ?>
                            <td style="text-align:center; font-size: 13px; background-color:#70C940; color:rgba(255,255,255,1);"><?php echo intval ($product->stock); ?></td>
                        <?php
                        }
                        else
                        { ?>
                            <td style="text-align:center; font-size: 13px; background-color:#D11E1B;color:rgba(255,255,255,1);"> <?php echo intval ($product->stock); ?></td>
                        <?php    
                        }

                    ?>
                </tr>
                <?php
                    }
            endwhile; 

            ?>
            </tbody>
        </table>

    <?php

    $output .= ob_get_clean();
    $output .= "</div>";

    return $output;
}

有没有关于如何修复的建议?非常感谢

已解决

我找到了下面贴在这里的解决方案,供任何可能需要它的人使用

使用新的Woocommerce命令
$product->get_formatted_name()返回如下字符串“产品名称(#变体_id)”

但是,通过变量_id,可以从postETA表中获取属性元素slug。使用slug可以从terms表中获取属性元素名称

$product = new WC_Product_Variation ($loop->post->ID);
          if (get_the_title( $loop->post->post_parent ) == 'CSR Expeditions Payment' || get_the_title( $loop->post->post_parent ) == 'Pagamento Spedizioni CSR')
          { 
            //1) I need to get the variation id == post id in wp_postmeta table
            // get the name and id of the variation in a string                 
            $variation_formatted_name = $product->get_formatted_name();
            //explode the string to get an array of the string
            $variation_formatted_name_array = explode("#", $variation_formatted_name);
            //get only the variation id (which comes along with a closed parenthesis
            $variation_id_ = $variation_formatted_name_array[1];
            //explode the string in an array made by the variation id and the parenthesis
            $variation_id = explode(")", $variation_id_);
            //get only variation id
            $variation_id_only = $variation_id[0];

            //2) 
            //get the taxonomy needed
            $taxonomy = 'pa_csr-dates';
            //get the meta value (= attribute slug) from the postmeta table through the variation_id (= post_id)
            $meta = get_post_meta($variation_id_only, 'attribute_'.$taxonomy, true);
            //get the variation name from the terms table through the slug (=$meta)
            $term = get_term_by('slug', $meta, $taxonomy);
            //get the variation name (attribute element custom name)
            $variation_name_only = $term->name; 
            $variation_price = $product->get_price();
          }

例如
$product->stock现在应该是…和(不完全确定),而不是
$product=newwc\u product\u变体($loop->post->ID)
您应该尝试
$product=wc\u get\u product($loop->post->ID)…您必须在对象和数组上使用
print\u r()
var\u dump()
对其进行测试…您好@LoicTheAztec,我尝试了您建议的方法,但没有成功。关于库存,$product->stock WORKS的方式与$product->get\ U stock\ U QUOTE()相同。我可以得到适当的库存量。然而,问题仍然存在于变体名称中。我只能得到变体slug,但不能得到全名,即使我使用函数wc_get_product,代码基于以下示例
$product = new WC_Product_Variation ($loop->post->ID);
          if (get_the_title( $loop->post->post_parent ) == 'CSR Expeditions Payment' || get_the_title( $loop->post->post_parent ) == 'Pagamento Spedizioni CSR')
          { 
            //1) I need to get the variation id == post id in wp_postmeta table
            // get the name and id of the variation in a string                 
            $variation_formatted_name = $product->get_formatted_name();
            //explode the string to get an array of the string
            $variation_formatted_name_array = explode("#", $variation_formatted_name);
            //get only the variation id (which comes along with a closed parenthesis
            $variation_id_ = $variation_formatted_name_array[1];
            //explode the string in an array made by the variation id and the parenthesis
            $variation_id = explode(")", $variation_id_);
            //get only variation id
            $variation_id_only = $variation_id[0];

            //2) 
            //get the taxonomy needed
            $taxonomy = 'pa_csr-dates';
            //get the meta value (= attribute slug) from the postmeta table through the variation_id (= post_id)
            $meta = get_post_meta($variation_id_only, 'attribute_'.$taxonomy, true);
            //get the variation name from the terms table through the slug (=$meta)
            $term = get_term_by('slug', $meta, $taxonomy);
            //get the variation name (attribute element custom name)
            $variation_name_only = $term->name; 
            $variation_price = $product->get_price();
          }