php - woocommerce 商店产品变体

标签 php wordpress woocommerce product

我想在 Wp/Woocommerce/shop/页面上展示所有产品及其变体。 (/woocommerce/archive-product.php)。我在下面描述的过程是我试图让它发挥作用的尝试。欢迎使用替代方案。

什么是规范:产品 A 和产品 B 在网站上展示。产品 A 有“广告到购物车”按钮。产品 B 有“选择选项”按钮。

我追求的是:产品 A 是一种“简单”产品并显示在商店页面上 产品 B 是“可变”产品,有 2 种组合(黑色/蓝色)。添加到购物车按钮将此变体添加到购物车

我想在商店页面上显示 3 种产品,即 1* 产品 A 和 2* 产品 B。

到目前为止,如果产品是可变的,我已经提取了有关此产品变体的一些基本细节,但我似乎找不到缩略图?

$postId = get_the_ID();
$args = array(
    'post_type'     => 'product_variation',
    'post_status'   => array( 'private', 'publish' ),
    'numberposts'   => -1,
    'orderby'       => 'menu_order',
    'order'         => 'asc',
    'post_parent'   => $postId
);
$variations = get_posts( $args );
//var_dump($variations);

//$p = get_post_meta($postId, '_product_attributes', true);  // return pa_flavor
//var_dump($p);

if(!empty($variations)) {
    foreach ($variations as $variation) {

        $vari = new WC_Product_Variation($variation->ID);
        $availableAttr = $vari->get_attribute('Flavour');
        $flavour = get_post_meta($variation->ID, 'attribute_pa_flavour', true);

因此,我可以获得“ flavor ”属性并正在寻找为每个变体定义的缩略图...?任何帮助/指向可能对此表示赞赏的地方。

另外 [可能是我对 Wordpress 缺乏了解] 我似乎无法在 wc_get_template() 中传递/访问变量。这可能是一个次要问题,但仍然与在一个页面上显示单一产品和变体产品的基本问题有关。

remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price_variation', 10 );

if ( ! function_exists( 'woocommerce_template_loop_price_variation' ) ) {
    function woocommerce_template_loop_price_variation($prodVar=array()) {

        if(empty($prodVar) || $prodVar['product_type'] == 'simple') {
            wc_get_template( 'loop/price.php' );
        }  else {
            wc_get_template( 'loop/price-variation.php' , $prodVar );
        }
    }
}

并在/price-variation.php(price.php woocommerce 基础的副本)

global $product;
var_dump($prodVar);  // PRODUCED NOTICE to undefined variable??? 
<?php if ( $price_html = $product->get_price_html() ) : ?>
    <span class="price"><?php echo $price_html; ?></span>
<?php endif; ?>

我不想让它成为全局...?还是这是唯一的方法?

感谢任何帮助或建议。

最佳答案

将此代码粘贴到您的主题 functions.php 中

/**
 * Replace add to cart button in the loop.
 */
function iconic_change_loop_add_to_cart() {
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
    add_action( 'woocommerce_after_shop_loop_item', 'iconic_template_loop_add_to_cart', 10 );
}

add_action( 'init', 'iconic_change_loop_add_to_cart', 10 );

/**
 * Use single add to cart button for variable products.
 */
function iconic_template_loop_add_to_cart() {
    global $product;

    if ( ! $product->is_type( 'variable' ) ) {
        woocommerce_template_loop_add_to_cart();
        return;
    }

    remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
    add_action( 'woocommerce_single_variation', 'iconic_loop_variation_add_to_cart_button', 20 );

    woocommerce_template_single_add_to_cart();
}

/**
 * Customise variable add to cart button for loop.
 *
 * Remove qty selector and simplify.
 */
function iconic_loop_variation_add_to_cart_button() {
    global $product;

    ?>
    <div class="woocommerce-variation-add-to-cart variations_button">
        <button type="submit" class="single_add_to_cart_button button"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>
        <input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" />
        <input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" />
        <input type="hidden" name="variation_id" class="variation_id" value="0" />
    </div>
    <?php
}

关于php - woocommerce 商店产品变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29024622/

相关文章:

javascript - 通过单击同一行中存在的删除链接来删除特定行

PHP ftp_put() - "Cannot STOR."

html - 我在容器背景和前景中有 2 张图像。如何使前景图像响应

ionic-framework - Access-Control-Allow-Headers 不允许请求 header 字段 User-Agent

php - 在 Woocommerce 中购买某个产品类别的产品时重定向

php - 从 woocommerce 编辑帐户页面删除电子邮件

PHP json 编码 - 格式错误的 UTF-8 字符,可能编码不正确

php - 如何为登录用户缓存/加速 Wordpress 查询?

Javascript - 如何仅在页面刷新后运行部分代码?

php - 为什么搜索查询在 PHRETS 中没有显示任何结果?