- Statut : non résolu
- Ce sujet contient 28 réponses, 4 participants et a été mis à jour pour la dernière fois par Lumiere de Lune, le il y a 8 années et 11 mois.
-
AuteurMessages
-
8 février 2016 à 5 h 32 min #1043011
‘field’ => ‘term_id’ (read the doc ^^)
et comme c’est la valeur par défaut, pas besoin de le mettre
attention, aussi, comme le dit didier07, $result est un objet, ont ne peut pas le mettre comme ça, $result->term_id
Enfin, il manque la query 🙂 c’est bien de mettre les $args mais sans lancer la recherche ^^
fais un get_posts ( $args ) et pas un new WP_query , $visits = get_posts($args)
à partir de là, rebelote, parcourir un objet…
9 février 2016 à 18 h 24 min #1043012Merci à vous deux, je vais essayer de me débrouiller avec ça, mais j’ai un peu de mal à comprendre comment on passe de
$visits = get_posts($args) à la boucle en elle-même.
En plus, le soir, je ne suis pas assez concentrée, je crois que ce sera pour ce week-end.
Je vous tiens au courant.13 février 2016 à 17 h 36 min #1043013Bon, ben, être codeuse, ça ne s’improvise pas …
Je ne m’en sors pas avec ce foutu code.
Une heure que je suis dessus, à déplacer mes accolades, à effacer un terme, à le remettre, à mettre un point-virgule, à l’enlever …Voilà où j’en suis, mais ça plante avec un Parse Error :
<div class="clearfix les-visites">
<div>
<?php
$results = get_terms('type');
if ($results) {
foreach ($results as $result) {
echo '<h2>‘ . $result->name . ‘</h2>‘;
$args= array(
‘post_type’ => ‘visites’,
‘tax_query’ => array(
array(
‘taxonomy’ => ‘type’,
‘field’ => ‘term_id’,
‘terms’ => $result->term_id,
)
, ‘posts_per_page’ => -1
, ‘orderby’ => ‘ASC’
));
$visits = get_posts($args);
if ($visits->have_posts()) : while ($visits->have_posts()) : $visits->the_post();
?>
<div class="page-cat clearfix"><a href=" »></a></div>
</div>
</div>J’obtiens un Parse error: syntax error, unexpected ‘}’ quelque soit l’endroit où je mets les 2 accolades fermantes.
Et bien sûr, si je ne les mets pas, ça ne va pas non plus … Logique, elles sont ouvertes, il faut bien les fermer quelque part … mais-z’où ??13 février 2016 à 18 h 20 min #1043014Le probleme n’est pas les accolades, mais le endwhile mal placé 🙂
<div class="clearfix les-visites">
<div>
<?php
$results = get_terms('type');
if ($results) :
foreach ($results as $result) :
echo '<h2>‘ . $result->name . ‘</h2>‘;
$args= array(
‘post_type’ => ‘visites’,
‘tax_query’ => array(
array(
‘taxonomy’ => ‘type’,
‘field’ => ‘term_id’,
‘terms’ => $result->term_id,
)
, ‘posts_per_page’ => -1
, ‘orderby’ => ‘ASC’
));
$visits = get_posts($args);
if ($visits->have_posts()) : while ($visits->have_posts()) : $visits->the_post(); ?>
<div class="page-cat clearfix"><a href=" »></a></div>
</div>
</div>Pour rendre ton code plus lisible, tu peux utiliser :
if () :else:
endif;
et
foreach(……..) :endforeach;
C’est pratique quand tu as de gros blocs,
associés à une indentation correcte bien sûr 😉13 février 2016 à 19 h 59 min #1043016Merci de ta réponse Didier.
Toutefois, ton code doit comporter une petite erreur quelque part, car j’obtiens encore un Parse error :
Parse error: syntax error, unexpected ‘endforeach’ (T_ENDFOREACH) in C:wampwwwwptestbourgwp-contentthemesair-balloon-lite-enfantarchive-visites.php on line 39
Si je supprime ou descend d’un cran le endforeach; , il me dit que la fin de fichier n’est pas attendue à la ligne 52 …
13 février 2016 à 20 h 16 min #1043017il manque un endif avant le endforeach
comme le if est sur la meme ligne que le while j’ai pas fait attention.J’aime pas mettre 2 structures de controle sur la même ligne à cause de ça 😉
13 février 2016 à 21 h 56 min #1043015On progresse, il n’y a plus de fatal Error, le header du site s’affiche mais … c’est pas encore ça !
J’obtiens cette fois ce message d’erreur dans la page :Fatal error: Call to a member function have_posts() on a non-object in C:wampwwwwptestbourgwp-contentthemesair-balloon-lite-enfantarchive-visites.php on line 35
La ligne 35, c’est celle-ci :
if ($visits->have_posts()) : while ($visits->have_posts()) : $visits->the_post(); ?>
Pourtant, juste avant, j’ai bien défini la variable comme l’avait dit Lumière de Lune :
$visits = get_posts($args);
13 février 2016 à 23 h 03 min #1043018get_posts ne te donne pas un objet wp_Query donc le have_post ne marche pas
Il te faut $visits = = new WP_Query( $args); ou passer par une boucle si tu utilise get_posts.
Par contre get_posts ne te donne pas les mêmes infos dans le retour.13 février 2016 à 23 h 26 min #1043019Euh, voui, mais là … j’arrive pas à suivre … 😳
Lumière de Lune avait dit :
fais un get_posts ( $args ) et pas un new WP_query , $visits = get_posts($args)
Alors pourquoi tu me dis le contraire ?
Il te faut $visits = = new WP_Query( $args);
Et ça, je comprends pas : on a déjà une boucle …
ou passer par une boucle si tu utilise get_posts.
13 février 2016 à 23 h 29 min #1043020Bon, ça fonctionne avec new WP_Query, merci beaucoup 👏 👏
Je ne comprends pas pourquoi Lumière de Lune disait qu’il ne fallait pas l’utiliser ?14 février 2016 à 1 h 03 min #1043021Parce que get_posts ne change pas la requête, c’est à dire qu’il ne modifie pas le type d’objet sur lequel tu te trouves. D’une manière générale, get_posts fonctionne de la même façon que new wp query mais touche à moins de choses en mémoire et dans le fonctionnement du blog.
Voilà …
(ça fonctionne bien sûr, c’est plus une question de perf et de « retour » derrière effectivement, d’un côté un « objet » avec la requête (wp query) de l’autre un tableau (ensemble) d’objets individuels (les posts)
Utiliser new Wp_query modifie le type de requête sur laquelle tu te trouve, et donc la valeur des fonctions comme is_tag, is_single, etc…
C’est un bon réflexe de ne l’utiliser que quand on en a réellement besoin, et de préférer get_posts d’une manière générale. amha
14 février 2016 à 10 h 35 min #1043022J’avais bien vu que @Lumière de Lune déconseillait WP_Query, mais dans ton cas tu as besoin de fonctions qui ne sont pas remontées par get_posts.
Si tu n’a besoin que du titre, du contenu et pas de tester si tu as une image à la une, remonter une catégorie ou autre, get_posts sra plus performant et tu n’as pas besoin de faire un wp_reset_query à la fin.En résumé : Tout dépend du besoin 🙂
Merci à @Lumière de Lune pour les explications 😉
14 février 2016 à 18 h 30 min #1043023Merci à vous deux, j’ai mieux compris les explications de Didier07, les explications de Lumière de Lune étant un peu trop technique pour moi … mais elles seront sûrement utiles à d’autres. 🙂
Juste pour finir, j’ai rajouté un tri par nom sur les CPT, qui ne fonctionnait pas au début parce qu’une parenthèse était mal placée dans le code initial de Didier07 (tu mettais les 2 parenthèses à la fin pour fermer les 2 « array », mais du coup, ça englobait une portion de code qui n’avit pas lieu d’être dedans et ça l’annulait)
Voici donc le code final :<div class="clearfix les-visites">
<div>
<?php
$results = get_terms('type');
if ($results) :
foreach ($results as $result) :
echo '<h2>‘ . $result->name . ‘</h2>‘;
$args= array(
‘post_type’ => ‘visites’,
‘tax_query’ => array(
array(
‘taxonomy’ => ‘type’,
‘field’ => ‘term_id’,
‘terms’ => $result->term_id,
),
),
‘posts_per_page’ => -1,
‘orderby’ => ‘title’,
‘order’ => ‘ASC’,
);
$visits = new WP_Query($args);
if ($visits->have_posts()) : while ($visits->have_posts()) : $visits->the_post(); ?>
<div class="page-cat clearfix"><a href=" »></a></div>
</div>
</div>Encore merci à tous les deux. 🙂 🙂 Topic résolu. ✅
14 février 2016 à 20 h 50 min #1043024didier07 wrote:Jmais dans ton cas tu as besoin de fonctions qui ne sont pas remontées par get_posts.Lesquelles ? Tu peux me répondre en mp pour ne pas encombrer le fil ^^
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.