显示WooCommerce变量产品选项

时间:2015-04-19 10:17:22

标签: php jquery ajax wordpress woocommerce

我正在尝试创建一个显示产品及其相关信息的查询。

我坚持展示他们的可变产品选项(它们都是可变产品)。在此之后,我必须创建一个添加到购物车按钮,该按钮将添加到购物车,生成成功或错误消息,并让用户继续购物。一旦用户购物车中有东西,我想显示一个结帐按钮,将其带到结帐页面。

这是我到目前为止所做的事情

<?php
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => 12,
        // Indicate the product category - in this case "training"
        'product_cat' => 'training'
    );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
        while ( $loop->have_posts() ) : $loop->the_post();

            // Show the product Featured Image and gallery images
            woocommerce_show_product_images();

            // Show the product Title
            echo the_title();

            // Show the product Custom Fields
            echo get_post_meta($post->ID, 'Description', true);
            echo get_post_meta($post->ID, 'Specifications', true);
            echo get_post_meta($post->ID, 'Video', true);

            // Show the Product Price
            echo $product->get_price_html();

            // Show the Variable Product options, for example: Color, Size etc 
            // stuck here!

            // Show the Add to cart button  
            // stuck here!

            // Show the Checkout button if there is an item in the users cart
            // stuck here!

        endwhile;
    } 
    wp_reset_postdata();
?>

有谁知道我应该用来显示这些信息的功能? 我很难在文档/谷歌上找到任何相关内容。

谢谢大家!!!

3 个答案:

答案 0 :(得分:0)

默认情况下,Woocommerce附带变量产品选项。对此你首先要创建属性。如果所有产品都具有相同的属性,则可以创建全局,也可以单独为每个产品创建属性。

以下是我正在为工作的网站的屏幕截图。我们有4个不同的包。所以我的属性是&#34; packages&#34;,我们有4个包。 enter image description here

保存属性后,转到下一个名为&#39; variants&#39; 的标签。选择包属性,它将自动加载所有变体。这是另一个截图。您必须选择默认变体。 enter image description here

完成上述所有更改后,您可以点击任何变体并更改产品参数,如价格,图片等。 enter image description here

变化可以用在像衬衫这样的产品上,你可以在那里买到不同颜色的衬衫,虽然衬衫的价格相同,但是你可以让用户选择颜色,看看衬衫在那种颜色下的样子。

虽然woocommerce默认设置了所有内容但是如果你要更改默认的wordpress模板,那么最好的方法是从woocommerce复制模板文件夹,并将此文件夹放在你的活动主题下的woocommerce名下,这样它就像wp-content / themes / theme-name / woocommerce。在这些内部,您需要woocommerce的templates文件夹中的所有文件和文件夹。 Woocommerce会自动选择所有这些文件并提供服务。 woocommerce建议使用此方法,因为直接更改插件会在下一次插件更新时丢失所有自定义设置。

编辑适合您的情况:抱歉,我认为我被带走了:p。无论如何,它取决于您所处的位置以及您用于获取这些值的文件,但是,下面的代码将输出所有产品变体以及该变体中的所有属性。我还没有对其进行测试,可能需要进行微调。 **

global $product, $post;
$variations = $product->get_available_variations();
foreach ($variations as $key => $value) {
    echo 'variation ID'.$value['variation_id'];
    foreach ($value['attributes'] as $attr_key => $attr_value) {
       echo $attr_key.': '.$attr_value;
    }
}

答案 1 :(得分:0)

低,看到..解决方案非常简单。 我必须拥有的所有内容都是:

    wc_get_template_part( 'content', 'single-product' );

现在我的循环看起来像这样

    <?php
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 12,
            // Indicate the product category - in this case "Training"
            'product_cat' => 'training'
        );
        $loop = new WP_Query( $args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();

                wc_get_template_part( 'content', 'single-product' );

            endwhile;
        }
        wp_reset_postdata();
    ?>

工作正常,并设置产品信息的样式我只是创建了子版本:
  - content-single-product.php
  - product-images.php
  - variable.php
  - meta.php
  - product-thumbnails.php
并编辑了直到&#39;我的心很满意。

答案 2 :(得分:0)

我使用了Omer Farooq的一些代码。谢谢Omer!这将为您提供所选属性的完整下拉菜单。在这种情况下,我正在使用pa_color。我还删除了重复项,以便仅返回颜色集。这应该在产品循环中使用。就我而言,我正在使用WP_Query查询产品。

<?php   
 /* Check if this is a variable product */                   
 if ($product->is_type( 'variable' )) { ?>
   <select name="pa_color"><?php 

 global $product, $post;

 $variations = $product->get_available_variations();

 $allcolors = array();

 foreach ($variations as $key => $value) {

    foreach ($value['attributes'] as $attr_key => $attr_value) {

   /* Get Name (Label) from Attribute Slug */
   $taxonomy = 'pa_color'; /* Change to whatever you want */
   $meta = get_post_meta($value['variation_id'], 'attribute_'.$taxonomy, true);
   $term = get_term_by('slug', $meta, $taxonomy);

    /* Only Return pa_color attributes - Change to whatever you want */
   if ($attr_key == 'attribute_pa_color') {

       $color = $attr_value; 

       /* Checking for duplicates and removing them */
       if( ! in_array( $color, $allcolors ) ) {

         echo '<option value="' . $attr_value . '">' . $term->name . '</option>';

         $allcolors[] = $attr_value; /* Array value to use to check for duplicates */
       }

   } 
 } 
} 
?>
</select>
<?php } ?>