Faire un double Query_posts

Eléphanteau du PHP | 23 Messages

03 nov. 2011, 15:35

Bonjour,

Je suis sous Wordpress et j'ai installé le plugin Wp-ecommerce dans lequel je dois créer des propres catégories pour les produits en vente.
Le hic, c'est que je souhaiterai que les derniers produits ajoutés apparaissent dans le Featured en page d'accueil.

Actuellement, il y a déjà 2 catégories "normales" de wordpress qui y figurent.

Ma question est : Comment faire pour pouvoir y mettre 2 catégories différentes ?

Normalement, le code qui me permet d'afficher mes catégories est celui-ci :

Code : Tout sélectionner

$featured_cat = get_option('estore_feat_cat'); $featured_num = get_option('estore_featured_num'); if (get_option('estore_use_pages') == 'false') query_posts("showposts=$featured_num&cat=3,5"); else {
J'ai essayé en faisant ceci, mais cela ne fonctionne pas.

Code : Tout sélectionner

$featured_cat = get_option('estore_feat_cat'); $featured_num = get_option('estore_featured_num'); $featured_product = get_option('wpsc_product_category'); if (get_option('estore_use_pages') == 'false') query_posts("showposts=$featured_num&cat=3,5&featured_product&cat=4,6,7"); else {
Merci par avance pour votre aide.

ViPHP
xTG
ViPHP | 7331 Messages

03 nov. 2011, 15:50

Pourquoi pas plutôt :
if (get_option('estore_use_pages') == 'false'){
  query_posts("showposts=$featured_num&cat=3,5"); 
  query_posts("showposts=$featured_product&cat=4,6,7");
}
else
{

Eléphanteau du PHP | 23 Messages

03 nov. 2011, 16:05

Merci pour ta réponse.

Je viens de tester... mais cela ne fonctionne pas.
Mon featured est vide.

Eléphanteau du PHP | 23 Messages

04 nov. 2011, 16:10

J'ai essayé ceci :

Code : Tout sélectionner

$featured_cat = get_option('estore_feat_cat'); $featured_num = get_option('estore_featured_num'); if (get_option('estore_use_pages') == 'false') { query_posts("showposts=$featured_num&cat=3,5"); query_posts('page_id=143'); } else { global $pages_number; if (get_option('estore_feat_pages') <> '') $featured_num = count(get_option('estore_feat_pages')); else $featured_num = $pages_number; query_posts(array('post_type' =>'page', 'orderby' => 'menu_order', 'order' => 'DESC', 'post__in' => (array) get_option('estore_feat_pages'), 'showposts' => (int) $featured_num)); };
Malheureusement, seul le 2ème query_posts est pris en compte et apparaît dans mon slider, le "post_id=143". Mais les catégories 3 et 5 ne le sont pas.

Quelqu'un a t'il une idée ?

Eléphant du PHP | 256 Messages

04 nov. 2011, 16:43

Bonjour,

Je ne pense pas avoir compris entièrement ton problème, mais peut-être que réinitialiser la boucle t'aiderait...
<?php rewind_posts(); ?>
Cordialement,

Gaspard

Eléphanteau du PHP | 23 Messages

04 nov. 2011, 16:58

Merci pour ta réponse.

Où dois-je placer ce rewind_posts dans le code ?

Eléphant du PHP | 256 Messages

04 nov. 2011, 17:09

Bonjour,

Quel est le code complet de ta page ou au moins de ta boucle ? Je ne te promets pas d'élucider le problème mais de regarder, il y a longtemps que je ne développe plus avec WordPress.

Cordialement,

G.

Eléphanteau du PHP | 23 Messages

04 nov. 2011, 17:14

Voici le code complet.

Merci pour ton aide.
<?php global $ids;
	$ids = array();
	$arr = array();
	$i=1;
	
	$width = 1400;
	$height = 501;
	$width_small = 109;
	$height_small = 109;
				
	$featured_cat = get_option('estore_feat_cat'); 
	$featured_num = get_option('estore_featured_num');
			
	if (get_option('estore_use_pages') == 'false') { query_posts("showposts=$featured_num&cat=3,5");
	rewind_posts();
	query_posts('page_id=143');
}	
	else {
		global $pages_number;
		
		if (get_option('estore_feat_pages') <> '') $featured_num = count(get_option('estore_feat_pages'));
		
		else $featured_num = $pages_number;
			
		query_posts(array('post_type' =>'page',
						'orderby' => 'menu_order',
						'order' => 'DESC',
						'post__in' => (array) get_option('estore_feat_pages'),
						'showposts' => (int) $featured_num));
				
		
	};
		
	while (have_posts()) : the_post();
		global $post;	
		$arr[$i]["title"] = truncate_title(25,false);
		$arr[$i]["fulltitle"] = truncate_title(250,false);
		
		$arr[$i]["excerpt"] = truncate_post(250,false);
				
		$arr[$i]["permalink"] = get_permalink();
				
		$arr[$i]["thumbnail"] = get_thumbnail($width,$height,'',$arr[$i]["fulltitle"],$arr[$i]["fulltitle"],true,'featured_image');
		$arr[$i]["thumb"] = $arr[$i]["thumbnail"]["thumb"];
		
		$arr[$i]["thumbnail_small"] = get_thumbnail($width_small,$height_small,'',$arr[$i]["fulltitle"],$arr[$i]["fulltitle"]);
		$arr[$i]["thumb_small"] = $arr[$i]["thumbnail_small"]["thumb"];
		
		$arr[$i]["use_timthumb"] = $arr[$i]["thumbnail"]["use_timthumb"];
		
		$custom = '';
		$custom = get_post_custom($post->ID);
		$arr[$i]["price"] = isset($custom["price"][0]) ? $custom["price"][0] : '';
		if ($arr[$i]["price"] <> '') $arr[$i]["price"] = get_option('estore_cur_sign') . $arr[$i]["price"];
		$arr[$i]["color"] = isset($custom["featured_bgcolor"][0]) ? $custom["featured_bgcolor"][0] : 'CC33CC';

		$i++;
		$ids[] = $post->ID;
	endwhile; wp_reset_query();	?>

<div id="featured">
	<div id="slides">
		<?php for ($i = 1; $i <= $featured_num; $i++) { ?>
			<div class="slide<?php if ($i==1) echo(' active'); ?>" style="background: #<?php echo esc_attr($arr[$i]["color"]); ?> url('<?php print_thumbnail($arr[$i]["thumb"], $arr[$i]["use_timthumb"], $arr[$i]["fulltitle"], $width, $height, '', true, true); ?>') no-repeat top center;">
				<div class="container">
					<div class="description">
						<div class="product">
							<?php if ($arr[$i]["price"] <> '') { ?>
								<span class="tag"><span><?php echo esc_html($arr[$i]["price"]); ?></span></span>
							<?php }; ?>
							<h2 class="title"><a href="<?php echo esc_url($arr[$i]["permalink"]); ?>"><?php echo esc_html($arr[$i]["fulltitle"]); ?></a></h2>
							<p><?php echo($arr[$i]["excerpt"]); ?></p>
							<a class="more" href="<?php echo esc_attr($arr[$i]["permalink"]); ?>"><span><?php esc_html_e('Plus d info','eStore'); ?></span></a>
						</div> <!-- .product -->
					</div> <!-- .description -->
				</div> <!-- .container -->			
			</div> <!-- .slide -->
		<?php }; ?>
	</div> <!-- #slides-->
	
	
	<div id="controllers">
		<div class="container">
			<div id="switcher">
				
				<?php for ($i = 1; $i <= $featured_num; $i++) { ?>
					<div class="item<?php if ($i==1) echo(' active'); if ($i == $featured_num) echo(' last'); ?>">
						<a href="#" class="product">
							<?php print_thumbnail($arr[$i]["thumb_small"], $arr[$i]["use_timthumb"], $arr[$i]["fulltitle"] ,$width_small, $height_small); ?>
							<?php if ($arr[$i]["price"] <> '') { ?>
								<span class="tag"><span><?php echo esc_html($arr[$i]["price"]); ?></span></span>
							<?php }; ?>
						</a>
					</div> <!-- .item -->
				<?php }; ?>
	
			</div> <!-- #switcher -->
		</div> <!-- .container -->
	</div> <!-- #controllers -->

	<div id="top-shadow"></div>
	<div id="bottom-shadow"></div>
	
</div> <!-- end #featured -->

Eléphant du PHP | 256 Messages

04 nov. 2011, 17:29

...

Es-tu sûr de ta ligne
query_posts("showposts=$featured_num&cat=3,5")
Les catégories 3 et 5 existent-elles? La variable $featured_num est-elle renseignée ? Essaie en plaçant en chiffre à la place. Je ne comprends pas ce que la ligne query_posts('page_id=143') vient faire là.

Deux ressources que tu as du voir :
- http://codex.wordpress.org/Function_Ref ... uery_posts
- http://www.webinventif.fr/wordpress-con ... ery_posts/

Sinon, pour te donner une idée, j'utilise pour exclure une catégorie :
<?php query_posts( $query_string . '&cat=-12665' ); ?> <!-- exclude Twitter -->
<?php if ( have_posts() ) : ?>
Mais je ne passe pas par une déclaration globale en haut de page comme toi, qui me semble trop compliquée.

Cordialement,

G.

Eléphanteau du PHP | 23 Messages

04 nov. 2011, 17:33

Oui, je suis sûr de ma ligne.

Les catégories 3 et 5 existent bien.
La ligne query_posts('page_id=143'), c'est moi qui l'ai rajouté, car je souhaite que cette page s'affiche dans le slider avec les catégories 3 et 5.

Pour les références, je les ai visité.

Merci en tout cas pour ton aide.

Je vais voir comment je peux m'en sortir.

Cordialement.

Petit nouveau ! | 4 Messages

26 déc. 2011, 14:32

Bonjour,

en fait query_post ne s'utilise qu'une seule fois, ensuite sur la page en question il est préfèrable pour ta seconde boucle utiliser WP_Query qui est beaucoup lus simple à utiliser pour faire autant de boucles que tu le veux :
http://codex.wordpress.org/Class_Reference/WP_Query
http://wordpress.stackexchange.com/ques ... -get-posts
Image