8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'aurais besoin de conseils pour afficher mes posts sous forme de liste mais après avoir cliqué sur un de mes tags. Comme d'habitude, même si il y a d'immense quantité d'exemple sur internet, il me manque la logique du code. J'ai juste besoin que l'on me guide sur le bon chemin.

Situation :
j'ai créé mon "custom post type", je j'ai intitulé "actualité". Les article d'actualité s'affiche bien les uns sous les autres. J'ai fait apparaitre des tags (créé via le back-Office), mais lorsque l'on clic sur l'un d'eux, je n'ai rien qui s'affiche dans la page. L'URL est apparemment bonne car elle affiche monsite.com/tag/immobilier/ car le tag est "immobilier". J'aimerais simplement lister les posts relatifs à ce tag par exemple.

Que dois-je faire pour que ça marche ?

merci pour vos réponses Smiley smile
Modifié par hlcgperso (22 Nov 2016 - 14:17)
Bonjour,

Donc - si l'on décode la question - : il s'agit d'un environnement WordPress et l'on doit créer et paramétrer une page tag.php. C'est bien cela ?

Si oui, quelque part dans la page tag.php :
if( have_posts() ) {
while( have_posts() ) : the_post();
	// On récupère des informations du loop WordPress dans des variables :
	$postId = get_the_ID();
	$title = get_the_title();
	$postLink = str_replace( $arrayHttp, '//', get_permalink() );
	$resume = get_the_excerpt();
	// Ensuite il faut récupérer puis mettre en forme ces variables, par exemple :
	echo '<div id="post' . $postId . '">';
	echo '<h2 class="h5"><a href="' . $postLink . '">' . $title . '</a></h2>';
	echo '<p>' . $resume . '</p>';
	echo '</div>';
endwhile;
}

Modifié par Olivier C (23 Nov 2016 - 09:23)
Oui, c'est bien cela Smiley smile

merci beaucoup pour ton code. Je le test.

Je reviendrais avec des résultats.

Encore merci,
Merci beaucoup Olivier C, J'ai donc mis en place votre morceau de code dans un fichier tag.php.

Apparemment il fait bien la jonction avec le clic sur le tag dans ma page actualité, c'est à dire que je tombe sur la bonne page, mais il ne m'affiche pas le contenu de mes variables et je n'en est qu'un seul. Je n'ai que la structure (invisible) de mon contenu.
J'ai essayé directement avec votre code et aussi en utilisant un appel à "content-tag.php" qui est un morceau de code structuré. J'ai à peu près le même résultat.

Je me demande si on ne pourrait pas le faire de manière plus simple. Finalement, ce que je cherche à faire, c'est en gros copier/coller ce qui s'affiche déjà dans ma page actualité. Je devrais donc réutiliser le template de mes blocs actualités. Les infos sont déjà affichés grâce aux variables "the_title();", "the_author();", "the_excerpt();",... de base de WP. Si je suis ma réflection : on clic donc sur le post_tag "immobilier", ensuite on veut qu'il fasse apparaître tous les blocs actualités qui lui correspond. Et là c'est le trou noir... Je n'arrive pas à visualiser ce qui doit être fait.

Il doit y avoir une solution comme une sorte de filtre qui n'affiche que les blocs actualités avec le post_tag "immobilier" directement dans la même page.

Quand pensez-vous ?
Bonjour,
hlcgperso a écrit :
[...] mais il ne m'affiche pas le contenu de mes variables et je n'en est qu'un seul.

Ce propos, comme ce qui suit, est obscur pour moi. Je vous invite à consulter le codex ou des thèmes WordPress existants, notamment leur page tag.php, pour vous inspirer de ce qui existe, et pour construire vos propres projets par la suite.

De bons mots clefs sous Google m'ont permis de trouver des résultats tel que celui-ci : Filtrer vos articles via les custom taxonomies des post types WordPress

Pour revenir au code posté plus haut :
hlcgperso a écrit :
Je n'ai que la structure (invisible) de mon contenu.

Les variables ne devraient pas êtres vides, s'il n'y a pas de posts rien ne devrait s'afficher, j'avais oublié d'encapsuler le code comme suit (je mets le code précédent à jour :
if( have_posts() ) { /* le loop WP */ }

hlcgperso a écrit :
Je me demande si on ne pourrait pas le faire de manière plus simple. Finalement, ce que je cherche à faire, c'est en gros copier/coller ce qui s'affiche déjà dans ma page actualité. Je devrais donc réutiliser le template de mes blocs actualités. Les infos sont déjà affichés grâce aux variables "the_title();", "the_author();", "the_excerpt();",... de base de WP.

Oui, ce doit être possible. En tout cas c'est ce que je fait pour certaines de mes pages : chez moi les pages tag Category et Search utilisent le même code (et donc le même template). On peut faire de même pour d'autres pages.
Merci pour votre retour.

je suis actuellement sur un autre projet plus urgent.

je reviens vers vous quand je me remettrais dessus.

Encore merci pour vos conseils.
Bonjour,

Je pense avoir trouvé le moyen d'afficher les articles liés à un tag. En utilisant WP_Query().

Mais, je n'arrive pas à configurer les arguments de WP_Query() pour que ça m'affiche les articles liés au Tag courant. Quand je parle de Tag courant, cela fait référence au fait de cliquer sur un Tag pour afficher seulement les articles liés à lui.

Par exemple, j'arrive tout à fait à afficher les articles liés au Tag "immobilier" par exemple, car je l'ai ajouté en paramètre dans WP_Query(). Pour rappel, mes articles sont issus d'un Custom_Post_Type "Actualité" précédemment créé. Quand on clic donc sur le Tag "immobilier", par défaut WP nous emmène sur cette URL (factice) : http://monsitewp.com/tag/immobilier/


	<?php $args= array(
            'post_type' => 'actualite',
	    'showposts' => 2,
	    'tag_slug__in' => 'immobilier'
            );
          ?>
	<?php $the_query = new WP_Query($args) ?>
	<?php if ( $the_query->have_posts() ) : ?>
	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>


Ce que j'essai de trouver, c'est comment remplacer dans mes paramètres le nom du tag "immobilier" inscrit manuellement par une variable (par exemple) qui récupèrerait le nom du Tag en cours ou cliqué.

merci par avance pour vos réponses Smiley smile
Cette manière de procéder avec WP_Query() pour récupérer un tag ne m'est pas familière, je trouve même cela étrange puisque la boucle le fait de base... Je ne sais pas comment on ferait alors en pur WordPress, mais vous pourriez procéder ainsi :

À la place de 'immobilier' mettre une variable $slug. Celle-ci récupére le slug de la page en cours. Pour ce faire on peut définir cette variable comme ceci :
	$slug = str_replace( $root, '', $_SERVER[ 'REQUEST_URI' ] );
	$slug = explode( '/', $slug );
	$slug = $slug[0];
	var_dump( $slug ); // Pour tester, à supprimer par la suite...
Merci beaucoup,

du coup entre temps, j'ai trouvé une astuce similaire :


$urlrecup = $_SERVER['REQUEST_URI'];
$parsurl = parse_url($urlrecup, PHP_URL_PATH);
$slugok = substr($parsurl, 5,-1);


merci quand même, je vais essayer d'utiliser votre code. Il respect plus WP je pense.
hlcgperso a écrit :
Merci quand même, je vais essayer d'utiliser votre code. Il respect plus WP je pense.

Pensez-vous ! Dans tous les cas il s'agit de fonctions php natives. Je vais même me pencher sur votre code, par curiosité, car il ne m'est pas familier.