Query_posts et conditions (Créer un compte)

  • Statut : non résolu
  • Ce sujet contient 16 réponses, 6 participants et a été mis à jour pour la dernière fois par Djoul, le il y a 13 années.
15 sujets de 1 à 15 (sur un total de 17)
  • Auteur
    Messages
  • #453871
    Fran6
    Participant
    Chevalier WordPress
    107 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 2.2.2
    – Thème utilisé : Sandbox
    – Plugins en place :
    – Nom de l’hebergeur : OVH
    – Adresse du site :

    Problème(s) rencontré(s) :

    Salut à tous,

    Existe-t-il une ressource autre que le codex qui reprend l’ensemble des possibilités du query_posts ? En fait, j’ai une requête particulière et je n’arrive pas à savoir si elle est faisable avec WP ou non.

    En fait, sur la page d’accueil d’un blog, je veux pouvoir afficher en premier en haut, le dernier post d’une catégorie. Disons la catégorie 1. Donc je fais un query_posts avec showposts=1&cat=1.

    Maintenant, en dessous, je veux retrouver tous les articles des autres catégories et de la catégorie 1, sauf celui-ci, c.a.d le dernier article de la cat=1. Et là, je ne sais pas quoi noter… Il n’y a pas une commande lastpost ou un truc comme ça. Ca ferait du style un loop complet – lastpost cat=1 …. Le truc con puisque je ne suis pas développeur mais c’est pour donner une idée…

    Si quelqu’un peut m’orienter, ce serait super sympa !! 😉

    Francis

    #608901
    Many
    Participant
    Maître WordPress
    1485 contributions

    Bonjour Fran6,

    pourquoi pas en utilisant get_post avec l’argument offset ?

    http://codex.wordpress.org/Template_Tags/get_posts

    Ca devrait être possible …

    #608902
    alakhnor
    Participant
    Maître WordPress
    996 contributions

    en fait, ça ne doit pas trop être possible simplement vu que ta sélection ne correspond pas à une requête simple. Et malheureusement, query_post ne permet pas d’exclure d’article.

    En gros, je ferais :

    global $post;
    
    // Partie pour l’affichage de l’article unique
    query_post(‘cat=1&showposts=1’);
    …
    blabla
    $save_post = $post->ID;
    
    // Partie pour l’affichage des articles suivants : tous sauf le premier
    query_post(‘showposts=11’);  // Pour en afficher 10
    $i=1;
    while (have_post()) : the_post();
    	if ($i>10) break;
    	if ($post->ID == $save_post) continue;
    	…
    	blabla
    	…
    	$i++;
    endwhile;

    A enrober avec les adhoc en fonction du reste, bien entendu.

    #608903
    Fran6
    Participant
    Chevalier WordPress
    107 contributions

    T’es un amour Alakhnor, mais je ne comprends pas trop ton code !!! :boulet:

    Pour la première partie concernant le premier post seul, pas de soucis. Par contre, pour la suite… Je comprends qu’on dit à WP d’en afficher 11 (pas dur…😇) mais tu mets une condition s’il y en a plus de 10 ?

    Le truc avec get_posts et le offset c’est que pour la deuxième partie, si je prends l’exemple suivant ça ne fonctionne pas:

    1. N’oublions pas que l’article tout en haut de la page appartient à la cat=1, catégorie “IMPORTANT”, par exemple.
    2. J’écris un article dans la catégorie 2. Il ne va pas appraître tout en haut puisqu’il n’est pas de la catégorie 1, mais il ne va pas apparaître dans les articles du dessous non plus parce que j’ai mis l’offset=1… non ?

    Pas évident cette histoire… 😉 Mais intéressant à creuser !!! :happy:

    Il nous faudrait un truc du style: “all except cat=1&offset=1”

    #608904
    alakhnor
    Participant
    Maître WordPress
    996 contributions

    En fait, j’en récupère 11 avec le query_posts. query_posts se contente de récupérer les informations, après, on en fait ce qu’on veut. 🙂
    Mais si dans les 11 se trouve le post affiché précédemment, je le saute (la ligne avec continue).
    Et s’il ne se trouve pas dans les 11, je m’arrête à 10 (la ligne avec break).

    De cette manière, on a toujours 10 posts traités/affichés (dans la partie blabla…).

    #608905
    Fran6
    Participant
    Chevalier WordPress
    107 contributions

    OK, je vais regarder ça et te dirai si ça marche ! Encore merci ! 😉

    #608906
    sigogosi
    Participant
    Initié WordPress
    20 contributions

    Je radine ma fraise en provenance d’une autre discussion sur les bons conseils d’alakhnor.
    Je suis un peu paumé avec le code indiqué plus haut car je n’ai pas trop capté comment l’intégrer dans ma boucle et comment l’adapter à ce que je veux : faire apparaître le post 58 en haut de la catégorie 10 (bien qu’il existe des posts plus récents dans cette catégorie) mais l’empêcher d’apparaître dans la page d’accueil (sans pour autant exclure l’ensemble de la catégorie).

    Sur mon index.php, j’ai :

    
    
    
    <div id="left">
    
    
    
    
    
    
    <div class="entry">
    <div class="post" id="post-“>
    
    <h2><a href="” rel=”bookmark” title=”Lien permanent vers “></a></h2>
    <ul class="metalinks">
    				<li class="auteur"></li>
    				<li class="date">le </li>
    				<li class="category"></li>
    			</ul>
    
    
    
    				
    
    
    <ul class="icon">
    				<li class="comment"><a href="#comments”></a></li>
    				<li class="pencil"> 0) : ?><a href="#more-“></a>comment_status) : ?> 0) { _e(‘ ou ‘); } ?><a href="#respond”></a> 0) : ?> 0) { _e(‘ ou ‘); } ?><a href="#comments”></a></li>
    				<li class="feed"></li>
    				<?php edit_post_link(__('Modifier'), '<li class="pencil">‘, ‘</li>‘); ?>
    			</ul>
    			
    			<p></p>
    				
    
    			

    Introuvable

    Désolé, mais vous cherchez quelque chose qui ne se trouve pas ici.

    Désolé de revenir à la charge, mais je patauge.

    #608907
    alakhnor
    Participant
    Maître WordPress
    996 contributions

    Pour le index.php :

    
    
    
    
     
    
    <div id="left">
     
    	
    	
    	
    		
    			10) break; ?>
    			ID == $save_post) continue; ?>
    			<div class="entry">
    				<div class="post" id="post-“>
    	 
    					<h2><a href="” rel=”bookmark” title=”Lien permanent vers “></a></h2>
    					<ul class="metalinks">
    						<li class="auteur"></li>
    						<li class="date">le </li>
    						<li class="category"></li>
    					</ul>
    					
    					<ul class="icon">
    						<li class="comment"><a href="#comments”></a></li>
    						<li class="pencil"> 0) : ?><a href="#more-“></a>comment_status) : ?> 0) { _e(‘ ou ‘); } ?><a href="#respond”></a> 0) : ?> 0) { _e(‘ ou ‘); } ?><a href="#comments”></a></li>
    						<li class="feed"></li>
    						<?php edit_post_link(__('Modifier'), '<li class="pencil">‘, ‘</li>‘); ?>
    					</ul>
          
    					<p></p>
    	 
    				</div>
    			</div>
    		
     
    		<div class="alignleft"></div>
    		<div class="alignright"></div>
     
    	
    		<div class="entry">
        			<h2>Introuvable</h2>
        			<p class="center">Désolé, mais vous cherchez quelque chose qui ne se trouve pas ici.</p>
    		</div>
    	
     
    </div>
     

    #608908
    alakhnor
    Participant
    Maître WordPress
    996 contributions

    Pour le category.php :

    
    
    
    get_queried_object(); ?>
    
     
    
    <div id="left">
     
    	
    	
    		
    			<div class="entry">
    				<div class="post" id="post-“>
    	 
    					<h2><a href="” rel=”bookmark” title=”Lien permanent vers “></a></h2>
    					<ul class="metalinks">
    						<li class="auteur"></li>
    						<li class="date">le </li>
    						<li class="category"></li>
    					</ul>
    					
    					<ul class="icon">
    						<li class="comment"><a href="#comments”></a></li>
    						<li class="pencil"> 0) : ?><a href="#more-“></a>comment_status) : ?> 0) { _e(‘ ou ‘); } ?><a href="#respond”></a> 0) : ?> 0) { _e(‘ ou ‘); } ?><a href="#comments”></a></li>
    						<li class="feed"></li>
    						<?php edit_post_link(__('Modifier'), '<li class="pencil">‘, ‘</li>‘); ?>
    					</ul>
          
    					<p></p>
    	 
    				</div>
    			</div>
    		
     
    		<div class="alignleft"></div>
    		<div class="alignright"></div>
     
    	
    		<div class="entry">
        			<h2>Introuvable</h2>
        			<p class="center">Désolé, mais vous cherchez quelque chose qui ne se trouve pas ici.</p>
    		</div>
    	
    
    	cat_ID); ?>
    	
    	
    		
    			10) break; ?>
    			ID == $save_post) continue; ?>
    			<div class="entry">
    				<div class="post" id="post-“>
    	 
    					<h2><a href="” rel=”bookmark” title=”Lien permanent vers “></a></h2>
    					<ul class="metalinks">
    						<li class="auteur"></li>
    						<li class="date">le </li>
    						<li class="category"></li>
    					</ul>
    					
    					<ul class="icon">
    						<li class="comment"><a href="#comments”></a></li>
    						<li class="pencil"> 0) : ?><a href="#more-“></a>comment_status) : ?> 0) { _e(‘ ou ‘); } ?><a href="#respond”></a> 0) : ?> 0) { _e(‘ ou ‘); } ?><a href="#comments”></a></li>
    						<li class="feed"></li>
    						<?php edit_post_link(__('Modifier'), '<li class="pencil">‘, ‘</li>‘); ?>
    					</ul>
          
    					<p></p>
    	 
    				</div>
    			</div>
    		
     
    		<div class="alignleft"></div>
    		<div class="alignright"></div>
     
    	
    		<div class="entry">
        			<h2>Introuvable</h2>
        			<p class="center">Désolé, mais vous cherchez quelque chose qui ne se trouve pas ici.</p>
    		</div>
    	
     
    </div>
     

    #608909
    sigogosi
    Participant
    Initié WordPress
    20 contributions

    Merci beaucoup, alakhnor. Je n’aurais jamais eu l’idée de placer les bouts de code de cette manière ni de créer un fichier category.php.
    Il ne me reste plus qu’à tester ça. J’ai fait une tentative vite fait avec index.php, mais ça m’a mis le souk dans l’affichage des catégories (sans doute parce que je n’avais pas de category.php, mais je n’avais rien sous la main pour le créer et l’envoyer). Faut que je fasse ça à tête reposée…
    Je reviendrai dire si ça marche.

    #608910
    411x
    Participant
    Initié WordPress
    32 contributions

    Dans le même genre, si je veux lister les 5 posts d’une même catégorie, sans afficher le dernier post ?

    ma requête actuelle, mais elle m’affiche les 5 derniers posts de la catégorie active, jusqu’à là ça me va, mais je ne suis pas une brute en php et je ne sais pas trop comment empecher l’affichage du dernier post

    have_posts()) : $recent->the_post();?>
    <a href="” class=”tags”></a>, 

    Merci 🙂

    #608911
    alakhnor
    Participant
    Maître WordPress
    996 contributions

    Tu rajoutes offset=1 dans ton WP_query.
    new WP_Query(“offset=1&showposts=5&cat=”.the_category_ID(FALSE));

    #608912
    411x
    Participant
    Initié WordPress
    32 contributions
    alakhnor wrote:
    Tu rajoutes offset=1 dans ton WP_query.
    new WP_Query(“offset=1&showposts=5&cat=”.the_category_ID(FALSE));

    Niquel !

    Merci beaucoup 🙂

    Par contre, désolé de faire détourner un peu le sujet, tu n’as pas une idée pourquoi du coup mon plugin
    STP_PostTags que j’utilise de cette maniere ( ><?php STP_PostTags('%tagname%‘); ?> )

    ne fonctionne plus, mais quand j’enleve le code pour lister les derniers posts d’une catégorie (le code cité plus haut), ce plugin remarche ?

    #608913
    alakhnor
    Participant
    Maître WordPress
    996 contributions

    Parce qu’AmO n’a pas encore sorti la dernière version ? ^^

    #608914
    sigogosi
    Participant
    Initié WordPress
    20 contributions

    J’ai essayé la solution proposée par alakhnor pour remonter un post en tête d’une catégorie tout en l’excluant de la page d’accueil. J’ai l’impression que ça marche, mais ça va être compliqué car il y a d’autres posts d’autres catégories auquels je veux infliger le même traitement et par ailleurs, je me heurte à un nouveau problème avec le plug-in simple-tagging.

    Pour faire plus simple, je vais donc plutôt exclure de la page d’accueil la catégorie-mère à laquelle appartiennent ces posts (et tant pis pour les autres posts de la même catégorie). Ensuite seulement, je verrai comment faire remonter chacun de ces posts en tête de leurs sous-catégories respectives.
    Commençons par l’exclusion de la catégorie-mère identifiée avec le numéro 7.
    Et c’est déjà à ce stade que survient mon problème de tags qui m’empêche d’aller plus loin. J’ai en effet remarqué que dès que je mettais un query_posts, j’obtenais un problème dans l’affichage des tags sur les posts dans la page d’accueil.
    J’ai essayé plusieurs trucs, d’abord :

    placé juste après
    puis

    et même

    post; 
    query_posts($query_string.’&cat=-7′); ?>

    (sans trop comprendre, mais histoire de voir si ça pouvait changer quelque chose).

    En fait, dans tous les cas, les 7 premiers posts s’affichent normalement avec leurs tags, ce qui correspond à la ligne

    <p></p>

    et les posts de la catégorie 7, celle que j’ai exclue ne s’affichent plus, comme voulu.
    Mais les posts suivants affichent “aucun” en guise de tags, alors qu’ils sont pourtant taggés et que leurs tags apparaissent normalement en passant par les catégories ou les archives.

    Est-ce un bug de simple-tagging (j’ai la dernière version 1.6.8.1) ? Ou ai-je oublié quelque chose dans le query_posts ?

15 sujets de 1 à 15 (sur un total de 17)
  • Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.