WooCommerce按ID返回产品对象

STE*_*ter 36 php wordpress woocommerce

我正在为woocommerce创建一个自定义主题,我需要能够创建一个迷你产品展示.我在找到woocommerce api的文档时遇到了问题.我有一个逗号分隔的产品ID列表,我需要迭代并按顺序显示每个产品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;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

谢谢,

蒂姆

Uni*_*cco 77

使用此方法:

$_product = wc_get_product( $id );
Run Code Online (Sandbox Code Playgroud)

官方API-docs:wc_get_product

  • 这是执行此操作的实际方法。无需每次都创建WC_Product_Factory,因为WC一直在使用一个实例。 (3认同)
  • @huykon225 无需调用 WooCommerce:`$link = get_permalink($id);` (2认同)

小智 58

另一种简单的方法是使用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
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用其api中列出的所有函数调用:http: //docs.woothemes.com/wc-apidocs/class-WC_Product.html


STE*_*ter 5

好吧,我活该被掐死。绝对是 RTM,但不适用于 WooCommerce,不适用于 Wordpress。由于 JOLT 可乐而找到了解决方案(万岁 JOLT 可乐)。

任务:名为“lated_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;
Run Code Online (Sandbox Code Playgroud)

感谢任何可能为此花费了一些时间的人。

蒂姆

  • 您应该将 `new WP_Query( $lated_posts );` 更改为 `new WP_Query( $lated_product_post_ids );` 。干杯! (2认同)