WooCommerce 按 id 返回产品对象
Posted
技术标签:
【中文标题】WooCommerce 按 id 返回产品对象【英文标题】:WooCommerce return product object by id 【发布时间】:2012-09-15 17:03:44 【问题描述】:我正在为 woocommerce 创建一个自定义主题,我需要能够创建一个迷你产品展示。我在查找有关 woocommerce api 的文档时遇到问题。我有一个以逗号分隔的产品 ID 列表,我需要对其进行迭代并按顺序显示每个产品的自定义迷你产品显示。
$key_values = get_post_custom_values('rel_products_ids');
//get comma delimited list from product
$rel_product_ids = explode(",", trim($key_values, ","));
// create array of just the product ids
foreach ( $rel_product_ids as $pid )
//sequentially get each id and do something with it
$loop = new WP_Query( array( 'post__in' => $pid ) );
// also tried ...
//$loop = new WP_Query( array( 'ID' => $pid ) );
while ( $loop->have_posts() ) : $loop->the_post(); $_product = &new WC_Product( $loop->post->ID );
//do stuff here I have stripped the html in favor of getting to the meat of the issue
woocommerce_show_product_sale_flash( $post, $_product );
if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'shop_single');
get_permalink( $loop->post->ID );
the_title();
$_product->get_price_html();
endwhile;
任何帮助将不胜感激。
谢谢,
提姆
【问题讨论】:
Woocommerce 文档可能非常稀疏,通常只是列出函数和参数而没有真正的解释 【参考方案1】:使用这个方法:
$_product = wc_get_product( $id );
官方 API 文档:wc_get_product
【讨论】:
这是执行此操作的实际方法。无需每次都创建 WC_Product_Factory,因为 WC 一直在使用一个实例。 如果我使用这种方法,我如何获取_permalink? @huykon225 无需调用 WooCommerce:$link = get_permalink($id);
【参考方案2】:
另一种简单的方法是使用 WC_Product_Factory 类,然后调用函数 get_product(ID)
http://docs.woothemes.com/wc-apidocs/source-class-WC_Product_Factory.html#16-63
样本:
// assuming the list of product IDs is are stored in an array called IDs;
$_pf = new WC_Product_Factory();
foreach ($IDs as $id)
$_product = $_pf->get_product($id);
// from here $_product will be a fully functional WC Product object,
// you can use all functions as listed in their api
然后您可以使用其 api 中列出的所有函数调用: http://docs.woothemes.com/wc-apidocs/class-WC_Product.html
【讨论】:
哦,他们有产品工厂,这正是我所需要的。像魅力一样工作,谢谢。 @Jacy Mok 在 woocommerce 中有没有办法从 API 而不是从数据库中获取产品?? Woo 为商店供应商(而不是客户)提供了完整的 API。 docs.woocommerce.com/document/woocommerce-rest-api【参考方案3】:好吧,我应该被扼杀。绝对是 RTM,但不适用于 WooCommerce,不适用于 Wordpress。 由于 JOLT 可乐找到了解决方案(所有冰雹 JOLT 可乐)。
任务: 名为“related_product_ids”的字段添加到自定义帖子类型。因此,当显示该帖子时,可以显示迷你产品显示。
问题: 获取通过 WP_Query 返回的多个 ID 时遇到问题。
解决方案:
$related_id_list = get_post_custom_values('related_product_ids');
// Get comma delimited list from current post
$related_product_ids = explode(",", trim($related_id_list[0],','));
// Return an array of the IDs ensure no empty array elements from extra commas
$related_product_post_ids = array( 'post_type' => 'product',
'post__in' => $related_product_ids,
'meta_query'=> array(
array( 'key' => '_visibility',
'value' => array('catalog', 'visible'),'compare' => 'IN'
)
)
);
// Query to get all product posts matching given IDs provided it is a published post
$loop = new WP_Query( $related_posts );
// Execute query
while ( $loop->have_posts() ) : $loop->the_post(); $_product = get_product( $loop->post->ID );
// Do stuff here to display your products
endwhile;
感谢任何可能为此花费了一些时间的人。
提姆
【讨论】:
您应该将new WP_Query( $related_posts );
更改为 new WP_Query( $related_product_post_ids );
。干杯!
get_product
已被弃用,应替换为 wc_get_product
【参考方案4】:
global $woocommerce;
var_dump($woocommerce->customer->get_country());
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item )
$product = new WC_product($cart_item['product_id']);
var_dump($product);
【讨论】:
如果您解释一下代码的作用以及它如何回答问题,我相信它会有所帮助 不要使用这个,因为 woocommerce 产品可以是可变的,并且每种产品类型都有自己的类。以上是关于WooCommerce 按 id 返回产品对象的主要内容,如果未能解决你的问题,请参考以下文章