当前位置: 首页 > 知识库问答 >
问题:

woocommerce商店产品变化

常温文
2023-03-14

我想在Wp/WooCommerce /shop/页面上显示所有产品及其变体。(我下面描述的过程是我试图让它工作的过程。欢迎其他选择。

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

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

我想在商店页面上展示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 );
        }
    }
}

和in/price-variation.php(price.php的副本)

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

我不想让它全球化...?或者这是唯一的办法?

感谢您的帮助或建议。

共有3个答案

富钧
2023-03-14

添加动作('woocommerce'u before'u shop'u loop'、'shangy'u胡须'u guy'u select'u variations');

功能帅气的留胡子的家伙选择变型({删除动作('woocommerce_后的商店_循环_项目','woocommerce_模板_循环_添加到购物车',10);添加动作('woocommerce_后的商店_循环_项目','woocommerce_模板_单个添加到购物车',30)}

将此添加到您的functions.php文件和您完成

廉雅惠
2023-03-14

将此代码粘贴到主题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
}
拓拔曦
2023-03-14
$thumb_image = get_the_post_thumbnail($variable_id, $size);

您可以覆盖循环的产品缩略图(在functions.php中)。如果变体_id在变体情况下全局设置,在简单产品情况下为空,则可以执行以下操作:

remove_action('woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10);
function own_woocommerce_thumbnail() {
    global $product, $woocommerce, $variable_id;

    $items_in_cart = array();

    if ($woocommerce->cart->get_cart() && is_array($woocommerce->cart->get_cart())) {
        foreach ($woocommerce->cart->get_cart() as $cart) {
            $items_in_cart[] = $cart['product_id'];
        }
    }

    $id = get_the_ID();
    $in_cart = in_array($id, $items_in_cart);
    $size = 'medium';
    if ($variable_id) {
        $thumb_image = get_the_post_thumbnail($variable_id, $size);
    } else {
        $thumb_image = get_the_post_thumbnail($id, $size);
    }

    echo '<span class="featured-image">';
    echo $thumb_image;
    echo '<span class="cart-loading" style="display: none">';
    if ($in_cart) {
        echo '<i class="fa fa-check-square-o"></i>';
    } else {
        echo '<i class="fa fa-spinner"></i>';
    }
    echo '</span></span>';
}
add_action('woocommerce_before_shop_loop_item_title', 'own_woocommerce_thumbnail', 10);

注意:这将阻止分页,因为一个产品将在产品页面上多次显示。注意2:您需要为悬停操作编写一些jquery来修复“添加到购物车”

你找到解决这个问题的好办法了吗?

我在这里发布了一个类似的问题,这可能会给你更多的见解:在商店页面上显示所有产品和变体,同时保持分页

编辑:有一个插件“Woocommerce Show Single Variations”可以运行。它过去是免费的,但现在不是了:https://iconicwp.com/products/woocommerce-show-single-variations/

 类似资料:
  • 本网站:https://localcarbon.net/shop目前只有2种产品,任何类别的使用都是多余的。因此,我不希望显示任何类别名称。 我已将此添加到自定义css中: 它成功地从产品页面删除了类别名称,但没有从商店页面删除。我在各种论坛上找到了这些,并补充道: 以及: 但是没有看到任何效果。 我尝试了几个代码片段,但意识到它们是为了排除某一类别的产品,而不是隐藏类别标题。

  • 我试图以编程方式为一个可变产品添加两个产品变体。基于此回答线程,我使用以下缩短的函数: 我使用以下数据数组: 然后我运行以下函数: 其中,是我要对其进行更改的变量产品的id,是上面定义的数据数组。 我的问题是函数只插入foreach in函数中的最后一个数据。 i、 e.在商业中的产品变化有: 红色W1 红色W1 但我想: 蓝色W1 红色W1

  • WooCommerce控制产品页面结构的模版位于woocommerce/templates/single-product目录下,本文介绍让产品图片显示为原图,并移除图片链接的方法。 改变产品图片尺寸 WordPress默认的图片尺寸有thumbnail, medium, large 和 full, WooCommerce默认的产品图片尺寸是shop_single。下面代码演示如何将产品图片尺寸从s

  • 我试图只从商店页面隐藏缺货产品,但将它们保留在单独的分类页面上。 Woocommerce设置只允许选择显示缺货产品或完全隐藏它们。 如何在Woocommerce中仅在商店存档页面上隐藏缺货产品?

  • 我试图在变体下拉列表中显示产品变体价格。我试图改变默认的行为,当你在下拉列表中选择一个变量时,价格显示在div中。 问题是我找不到那个部门的变动价格。我搜索了所有的javascript,但找不到它 如果我使用: 我只得到所有选项的最小变化价格。我想知道每种变体的价格。有线索吗?

  • 我们有一个在线商店,在三个表中存储产品详细信息: 产品(名称、描述、品牌)-总计10,000个条目 产品-变体(大小、价格、可用性)-总计80.000项 产品-属性(颜色)-总计60.000项 这给出了大约400.000项的总组合。 示例: 产品为“Nike Air Max” 变体是“尺寸36,70美元”、“尺寸37,72美元”、“尺寸38,74美元” 属性为“Color Red”和“Color