- Statut : non résolu
- Ce sujet contient 36 réponses, 5 participants et a été mis à jour pour la dernière fois par
didier07, le il y a 10 années et 2 mois.
-
AuteurMessages
-
16 novembre 2014 à 0 h 54 min #544228
Bonjour à tous,
– Version de WordPress : 4.0
– Thème utilisé : thème personnel
– Extensions en place : aucune
– Nom de l’hebergeur : OVHPour me présenter rapidement, je suis web designer (et intégrateur html/css/less) et je réalise actuellement un site d’actualité pour un collectif. Souhaitant apprendre à créer des thèmes WordPress, je me suis lancé d’après un thème vierge afin de passer chacune des étapes (et des difficultés).
Je ne suis clairement pas développeur mais j’ai une bonne pratique des langages informatiques pour travailler au quotidien au contact direct de langage back office (technologies.NET).Voici ce que je souhaite réaliser :
– En haut de la page d’accueil doit être afficher d’une manière différente le dernier article de la catégorie « special ».
– Au dessous doivent être affiché les autres articles, sauf bien sur celui qui aura été affiché en haut.Dans mon fichier home.php j’ai donc affiché une première boucle n’affichant que le dernier article de la catégorie « special ».
Plus bas, j’appelle ensuite la boucle générique de mon thème.
Voici le fichier home.php<?php get_header(); ?>
<?php if ( have_posts() ) : ?>
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
if ($paged < 2) { ?>
<?php
$cover_args = array(
'post_type' => ‘post’,
‘posts_per_page’ => 1,
‘category_name’ => ‘special’
);
$custom_query = new WP_Query( $cover_args );
?>
<?php while ( $custom_query->have_posts() ) : $custom_query->the_post(); ?>
<?php get_template_part( 'partials/cover-post', get_post_format() ); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php } ?>
<?php endif;?>
<div class="wrapper">
<div class="str-ctn">
<div class="str2c left">
<div class="str-main">
<?php get_template_part( 'loop'); ?>
</div>
<div class="str-side">
<?php get_sidebar(); ?>
</div>
</div>
Au sein du fichier loop.php, je définie des conditions d’affichage de la boucle.
Voici le fichier loop.php<?php if ( is_home() ) : ?>
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$custom_args = array(
'post_type' => ‘post’,
‘posts_per_page’ => 4,
‘paged’ => $paged,
// exclusion à ajouter
);
$custom_query = new WP_Query( $custom_args );
?>
<?php else: ?>
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$custom_args = array(
'post_type' => ‘post’,
‘posts_per_page’ => 5,
‘paged’ => $paged
);
$custom_query = new WP_Query( $custom_args );
?>
<?php endif; ?>
<?php if ( $custom_query->have_posts() ) : ?>
<?php while ( $custom_query->have_posts() ) : $custom_query->the_post(); ?>
<?php get_template_part( 'partials/post', get_post_format() ); ?>
<?php endwhile; ?>
<?php
if (function_exists(custom_pagination)) {
custom_pagination($custom_query->max_num_pages, » »,$paged);
}
?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<?php get_template_part( 'partials/no-post'); ?>
<?php endif; ?>Il me semble, d’après ce que j’ai lu, qu’il faut utiliser la fonction post__not_in afin d’exclure des posts de la boucle.
Ma question est : comment faire communiquer ces deux boucles afin de donner la valeur nécessaire à post__not_in ?
J’ai regardé un peu sur le passage de variable mais mes essais n’ont pas été concluant.Peut-être que je ne m’y prend pas du tout de la bonne manière également.
En vous remerciant de vos conseils.
16 novembre 2014 à 9 h 49 min #982879Anonyme
InvitéMaître WordPress34072 contributionsCe message a été supprimé suite à la demande de l’auteur.
16 novembre 2014 à 15 h 34 min #982880Bonjour noaneo, merci de ta réponse.
‘post__not_in’ attend en effet un tableau d’ID à exclure.
Ma grande question est : comment lui communiquer ?Le paramètre ‘offset’ n’est lui pas assez complet pour réaliser ce que je souhaite. Il ne permet que de créer un décalage en début (ou en fin, je suppose) de liste.
🙂
16 novembre 2014 à 17 h 24 min #982881Anonyme
InvitéMaître WordPress34072 contributionsCe message a été supprimé suite à la demande de l’auteur.
16 novembre 2014 à 19 h 11 min #982882L’exclusion en elle même n’est pas un problème.
Le réel sujet de ce topic est la transmission de l’information (les ID de la première boucle) de la première boucle en direction de la seconde. Ces deux boucles de trouvant en sus dans des fichiers différents.17 novembre 2014 à 9 h 30 min #982883Anonyme
InvitéMaître WordPress34072 contributionsCe message a été supprimé suite à la demande de l’auteur.
17 novembre 2014 à 9 h 44 min #982884erwan21a wrote:Le réel sujet de ce topic est la transmission de l’information (les ID de la première boucle) de la première boucle en direction de la seconde. Ces deux boucles de trouvant en sus dans des fichiers différents.En php, il y a les include, les sessions et les variables globales. Les fichiers de template utilisent des include via les get_template_part.
En WordPress de base il y a les sticky-post qui font ça sans une ligne de code. Les détails sont dans le :codex:
Didier
17 novembre 2014 à 14 h 09 min #982885Bonjour Didier07,
J’irais regarder (et tester) ça lorsque je ne serais plus au travail mais les sticky-post semblent à première vue combler mon besoin. 🙂
Merci
17 novembre 2014 à 17 h 01 min #982886Anonyme
InvitéMaître WordPress34072 contributionsCe message a été supprimé suite à la demande de l’auteur.
17 novembre 2014 à 17 h 07 min #982887Même pas besoin de faire une boucle. Nativement wordpress affiche les sticky posts en tête et complète à 10 articles avec le « standard »
17 novembre 2014 à 17 h 21 min #982888J’ai pas encore testé de manier ça.
Mais si j’ai bien compris, si on définit deux posts en sticky, ils se placeront en position 1 et 2 de la boucle.
Mais y a t-il des limites à ce système (nombre, date, etc) ? Faut-il le gérer forcement manuellement ?Parce que sinon, à force de mettre des posts en avant, on finit par pourrir sa boucle qui n’affichera sur les premières pages que des sticky posts. Même vieux.
Je pense que c’est un outil qui peut facilement être mal utilisé, nan ?
17 novembre 2014 à 17 h 24 min #982889erwan21a wrote:Je pense que c’est un outil qui peut facilement être mal utilisé, nan ?Il n’y a pas plus de risque que de mettre en tête une catégorie définie à l’avance 🙂
17 novembre 2014 à 19 h 08 min #982890Anonyme
InvitéMaître WordPress34072 contributionsCe message a été supprimé suite à la demande de l’auteur.
18 novembre 2014 à 9 h 14 min #982891didier07 wrote:erwan21a wrote:Je pense que c’est un outil qui peut facilement être mal utilisé, nan ?Il n’y a pas plus de risque que de mettre en tête une catégorie définie à l’avance 🙂
De ce que j’en comprend pour le moment (j’ai toujours pas pu tester), si on n’enlève pas les sticky manuellement, on fini par se retrouve avec les X première page de la boucle remplies de vieux sticky.
L’article tout frais mais pas mis sticky sera donc en page 4. ^^La volonté sur le site que je conçois est de n’avoir qu’une Une. Comme sur un journal.
D’où l’utilisation de deux boucles :
– la première affichant le dernier message d’une catégorie (cette catégorie = sticky)
– une seconde boucle affichant tous les messages sauf selon placé en UneAinsi, même si la Une ne bouge pas, le second post sera toujours un post « frais ». 🙂
noaneo wrote:didier07 wrote:Même pas besoin de faire une boucle. Nativement wordpress affiche les sticky posts en tête et complète à 10 articles avec le « standard »oui tout à fait, je ne voulais dire plus, c’est tout, il suffit de lire l’article j’ai mis en lien, on peut faire un carrousel
$sticky = get_option(‘sticky_posts’);
$args = array( ‘post__in’ => $sticky );
query_posts( $args );L’efficacité d’un carousel est quasi nul.
Des tests analytics ont été faites dessus et le résultat est catastrophique. 😉18 novembre 2014 à 9 h 33 min #982892Votre category-name « spécial » a aussi un id (chiffre)
en ajoutant simplement : cat=-id dans votre query, ça va sortir tous les posts de cet id :
plus de détails à ce lien : http://codex.wordpress.org/Function_Reference/query_posts
et plus précisément :
You can also add some more categories to the exclude-list (tested with WP 3.3.1):
<?php
if ( is_home() ) {
query_posts( ‘cat=-1,-2,-3’ );
}
?> -
AuteurMessages
- Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.