2012-09-24 4 views
17

Sto creando un tema personalizzato per woocommerce e devo essere in grado di creare un mini display del prodotto. Sto avendo problemi a trovare la documentazione sull'api woocommerce. Ho un elenco delimitato da virgole di ID prodotto che ho bisogno di scorrere e visualizzare un mini display prodotto personalizzato per ciascuno in sequenza.Oggetto prodotto restituito da WooCommerce per 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; 
} 

Qualsiasi aiuto sarebbe apprezzato.

Grazie,

Tim

+0

Woocommerce documenti possono essere piuttosto scarsa, di solito solo le funzioni di elenco e parametri con nessuna vera spiegazione –

risposta

46

Un altro modo semplice è quello di utilizzare la classe WC_Product_Factory e quindi chiamare la funzione get_product (ID)

http://docs.woothemes.com/wc-apidocs/source-class-WC_Product_Factory.html#16-63

campione:

// 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 
} 

è possibile utilizzare tutte le chiamate di funzione come elencate nella loro API: http://docs.woothemes.com/wc-apidocs/class-WC_Product.html

+0

Oh hanno una fabbrica per i prodotti, questo è esattamente ciò di cui avevo bisogno. Funziona come un fascino, grazie. –

+0

@Jacy Mok c'è qualche modo in woocommerce per ottenere prodotti da API piuttosto che da database ?? – ShaMoh

+0

Woo ha un'API completamente fustellata per il venditore del negozio (non per i clienti). https://docs.woocommerce.com/document/woocommerce-rest-api/ –

3

Va bene, mi merito di essere strozzato. sicuramente un RTM ma non per WooCommerce, per Wordpress. Soluzione trovata a causa di una cola JOLT (tutta la grandine JOLT cola).

COMPITO: Campo denominato "related_product_ids" aggiunto a un tipo di post personalizzato. Quindi, quando viene visualizzato quel post, è possibile visualizzare i mini display del prodotto.

PROBLEMA: Si è verificato un problema nel recupero degli ID multipli tramite WP_Query.

SOLUZIONE:

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

Grazie per tutti coloro che possono aver trascorso qualche tempo su questo.

Tim

+2

si dovrebbe cambiare 'nuova WP_Query ($ related_posts); 'con' new WP_Query ($ related_product_post_ids); '. Saluti! –

+0

'get_product' è stato deprecato e dovrebbe essere sostituito con' wc_get_product' –

1
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); 
} 
+2

Sono sicuro che sarà d'aiuto se spieghereste cosa fa il codice e come risponde alla domanda. – ChrisW

29

Utilizzare questo metodo:

$_product = wc_get_product(id); 

ufficiali API-docs: wc_get_product

+0

Questo è il modo effettivo per farlo. Non c'è bisogno di creare un WC_Product_Factory ogni volta, poiché c'è sempre un'istanza in uso dal WC. –

+0

come posso ottenere get_permalink se utilizzo questo metodo? – huykon225

+0

@ huykon225 Non è necessario invocare WooCommerce: '$ link = get_permalink ($ id);' – indextwo