web-dev-qa-db-fra.com

Objet de retour de produit WooCommerce par identifiant

Je crée un thème personnalisé pour woocommerce et je dois pouvoir créer un mini affichage de produit. J'ai des problèmes pour trouver de la documentation sur l'API woocommerce. J'ai une liste délimitée par des virgules d'ID de produit que je dois parcourir et afficher un mini affichage de produit personnalisé pour chacun dans l'ordre.

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

Toute aide serait appréciée.

Je vous remercie,

Tim

34
mpactMEDIA

Un autre moyen simple consiste à utiliser la classe WC_Product_Factory puis à appeler la fonction get_product (ID)

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

échantillon:

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

Vous pouvez ensuite utiliser tous les appels de fonction répertoriés dans leur api: http://docs.woothemes.com/wc-apidocs/class-WC_Product.html

57
Jacky Mok

Utilisez cette méthode:

$_product = wc_get_product( $id );

Documents API officiels: wc_get_product

72
Unicco

D'accord, je mérite d'être étranglé. certainement un RTM mais pas pour WooCommerce, pour Wordpress. Solution trouvée en raison d'un cola JOLT (tout grêle JOLT cola).

TÂCHE: champ nommé "related_product_ids" ajouté à un type de publication personnalisé. Ainsi, lorsque ce message est affiché, des mini-affichages de produits peuvent être affichés avec.

PROBLÈME: rencontrait un problème lors du renvoi des identifiants multiples via WP_Query.

SOLUTION:

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

Merci à tous ceux qui ont consacré du temps à cela.

Tim

4
mpactMEDIA
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);
}
1
Mr X