我想在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; ?>
我不想让它全球化...?或者这是唯一的办法?
感谢您的帮助或建议。
添加动作('woocommerce'u before'u shop'u loop'、'shangy'u胡须'u guy'u select'u variations');
功能帅气的留胡子的家伙选择变型({删除动作('woocommerce_后的商店_循环_项目','woocommerce_模板_循环_添加到购物车',10);添加动作('woocommerce_后的商店_循环_项目','woocommerce_模板_单个添加到购物车',30)}
将此添加到您的functions.php文件和您完成
将此代码粘贴到主题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
}
$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
我试图在变体下拉列表中显示产品变体价格。我试图改变默认的行为,当你在下拉列表中选择一个变量时,价格显示在div中。 问题是我找不到那个部门的变动价格。我搜索了所有的javascript,但找不到它 如果我使用: 我只得到所有选项的最小变化价格。我想知道每种变体的价格。有线索吗?
我试图只从商店页面隐藏缺货产品,但将它们保留在单独的分类页面上。 Woocommerce设置只允许选择显示缺货产品或完全隐藏它们。 如何在Woocommerce中仅在商店存档页面上隐藏缺货产品?
我们有一个在线商店,在三个表中存储产品详细信息: 产品(名称、描述、品牌)-总计10,000个条目 产品-变体(大小、价格、可用性)-总计80.000项 产品-属性(颜色)-总计60.000项 这给出了大约400.000项的总组合。 示例: 产品为“Nike Air Max” 变体是“尺寸36,70美元”、“尺寸37,72美元”、“尺寸38,74美元” 属性为“Color Red”和“Color