Afficher vos derniers produits WP e-Commerce

Je m’occupe du site Passion Aquarelle. C’est celui de ma soeur, une artiste dans l’âme, qui expose ses aquarelles, les travaux de ses élèves (oui, elle donne aussi des cours sur la région lyonnaise).

Ce site utilise bien sûr le CMS WordPress et le plugin WP e-Commerce, le premier plugin e-commerce que j’ai testé.

Pour la page d’accueil, j’ai dû créer un shortcode pour afficher ses derniers tableaux, avec une contrainte : ne pas afficher certaines catégories de produits.

Voici comment afficher vos derniers produits WP e-Commerce

Une requête pour aller chercher les produits

$reqProducts = $wpdb->get_results( "
        SELECT post_title, ID, post_date, post_name FROM wp_posts p
        JOIN wp_term_relationships r ON r.object_id = p.ID
        JOIN wp_term_taxonomy t ON r.term_taxonomy_id = t.term_taxonomy_id
        JOIN wp_terms terms ON terms.term_id = t.term_id
        WHERE t.taxonomy = 'wpsc_product_category'
        $exclude_cat
        AND p.post_type = 'wpsc-product' AND p.post_status = 'publish'
        ORDER BY p.post_date DESC
        LIMIT $limit
    ");

$exlude_cat et $limit viennent des paramètres du shortcode.

Par exemple avec [wpscthelastproducts excludecat= »25,28,27″ limit= »3″] les catégories 25, 28 et 27 seront exclues de la requête et n’affichera que les 3 derniers produits.

On fait ensuite une boucle pour afficher cela :

foreach ( $reqProducts as $lastproduct ) {

         /* va chercher la catégorie du produit */
        $prod_ID = wpsc_the_product_id();
        $category = get_the_product_category($lastproduct->ID);
        /* Fin categorie produit */

        $output .= '<div class="latest-products">';

            $output .= '<div class="last-new-prod"><a href="' . wpsc_product_url( $lastproduct->ID, null ) . '" class="last-product-title">'.$titleOfProduct.'</a><br /><i><a href="/galerie/'.$category[0]->slug.'/" class="last-product-title">'.$category[0]->name.'</a></i></div>';
            // Thumbnails, if required
            if ( $image == 1 ) {
                $output .= '<div class="imagecol">';
                $output .= '<a href="' . wpsc_product_url( $lastproduct->ID, null ) . '">';
                $attached_images = (array)get_posts( array(
                    'post_type'   => 'attachment',
                    'numberposts' => 1,
                    'post_status' => null,
                    'post_parent' => $lastproduct->ID,
                    'orderby'     => 'menu_order',
                    'order'       => 'ASC'
                ) );

                $attached_image = $attached_images[0]; 
                if ( $attached_image->ID > 0) {
                    $output .= '<img src="' . wpsc_product_image( $attached_image->ID, $width, $height ) . '" title="' . $lastproduct->post_title . '" alt="' . $lastproduct->post_title . '" />';
                } else {
                    $output .='<img class="no-image" id="product_image_'.wpsc_the_product_id().'" alt="No Image" title="'.wpsc_the_product_title().'" src="'.WPSC_URL.'/wpsc-theme/wpsc-images/noimage.png" width="' . $width . '" height="' . $height . '" />';
                }
                $output .= '</a>';
                $output .= '</div>';
            }
        $output .= "</div>";
    }

On peut aussi traiter le titre si il est trop long :
 /* Traitement du titre */
 $titleProduct = stripslashes( $lastproduct->post_title );
 if( strlen( $titleProduct ) <= 30 ) { 
     $titleOfProduct = $titleProduct; 
 } else {
    $str = mb_substr( $titleProduct, 0, 30 - strlen( '...' ) + 1, 'UTF-8');  
    $titleOfProduct = substr( $str, 0, strrpos( $str,' ') ).'...';
 }

On a plus qu’à mettre notre shortcode là où l’on veut :
<?php do_shortcode('[wpscthelastproducts]'); ?>

Si vous voulez le shortcode en entier le voici en téléchargement ici : 

  Shortcode WP e-Commerce (3,4 KiB, 146 téléchargements)

Et voilà maintenant vous pouvez afficher vos derniers produits WP e-Commerce sur votre boutique.

 

0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.