8768 sujets

Développement web côté serveur, CMS

Bonjour, Bonsoir,

N'étant pas super fort en programmation, bien que comprenant la logique, je me trouve face à un soucis d'écriture dont je suis certain, beaucoup ici pourraient m'aider.

Voici mon soucis:

Je travaille sur un thème enfant de Twenty Seventeen. J'ai créé un template de page pour afficher certains type d'article dessus, avec une fonction de filtre. Ça marche très bien, lorsque cette page qui a ce template n'est pas attribué en page d'accueil. Si je regarde la page "front-page.php" du thème parent, je vois ceci:

<?php // Show the selected frontpage content.
			 if ( have_posts() ) :
			 while ( have_posts() ) : the_post();
				 get_template_part( 'template-parts/page/content', 'front-page' );
			 endwhile;
				 else : // I'm not sure it's possible to have no posts when this page is shown, but WTH.
				 get_template_part( 'template-parts/post/content', 'page' );
			 endif; ?>


Je comprends bien qu'il affiche ce template "front-page" et cela malgré le fait que j'ai un template de page perso.

Ce que je voudrais faire, c'est lui dire en utilisant un elseif, que si la page d'accueil a comme template de page "content-prog", il faut utiliser ce template.

En gros faire ceci:

<?php 
			 if ( have_posts() ) :
			 while ( have_posts() ) : the_post();
				 get_template_part( 'template-parts/page/content', 'front-page' );
			 endwhile;

elseif (is_page_template('prog')) :
				 get_template_part( 'content', 'prog' );


				 else :
				 get_template_part( 'template-parts/post/content', 'page' );
			 endif; ?>


Mais évidemment, ça ne marche pas et je n'arrive pas à savoir comment le rédiger correctement.

Des avis ?

D'avance merci
David
Modérateur
Salut !

Alors en fait la partie :
 if ( have_posts() ) : while ( have_posts() ) : the_post();

C'est "The Loop" c'est la base d'une page.
Elle est quasiment toujours validée et mettre une elsif dessus ne sert pas à grand chose. Ce qu'il faut faire c'est mettre ton code à l'intérieur du genre :
<?php if ( have_posts() ) {
	 while ( have_posts() ) {
	 	the_post();
		if (is_page_template('prog')) {
			 get_template_part( 'content', 'prog' );
		} else {
			get_template_part( 'template-parts/page/content', 'front-page' );
		}
	}
} else {
	 get_template_part( 'template-parts/post/content', 'page' );
} ?>

si je ne me trompe pas. (désolé j'ai jamais pu blairer les : à la place des accolades)

En fait la notion de "post" dans le have_posts et la boucle sont des notions un peu floue mais très importantes. Si je me souvient bien les pages sont aussi des "post", pas que les articles.
Le cas ou tu tombe dans le else c'est que t'es sur une page inconnu (comme une 404 non configurée) ou que tu n'as pas encore écrit d'article sur ta page de blog.

J'espère que j'avais de bon restes et que je ne t'ai pas dis trop de bêtises Smiley lol
Modifié par _laurent (17 May 2017 - 09:31)
Tu dois définir dans réglages -> lecture que ton thème utilise une page statique en page d'accueil. Ensuite si tu as bien défini ton modèle de page, il suffit de supprimer le fichier front-page.php et tu auras ton template d'affiché à la place.

Ceci car front-page à priorité sur ton modèle de page, c'est expliqué sur ce schéma : template-hierarchy..
Merci _laurent pour ta réponse, mais comme le dit bzh, apparemment, cela ne marche pas.

C'est ennuyeux cela d'ailleurs, car j'aimerais vraiment que lorsque ce template de page est utilisé pour la page d'accueil, il le reconnaisse et agisse en conséquence et si c'est une page avec le template par défaut, alors il agisse comme d'habitude.

Or, lorsque je reprends le code de _laurent, rien ne change. Il garde bien la mise en page de front-page.

Il n'y a pas de solution à part viré cette page front-page ? Ça m'arrangerais de pouvoir jongler entre les deux à vrai dire Smiley decu
Alors essaye de renommer front-page.php en home.php (qui ne sert que pour les posts)
Modifié par bzh (17 May 2017 - 17:13)
bzh a écrit :
Alors essaye de renommer front-page.php en home.php (qui ne sert que pour les posts)


Ok, mais comment je fais ça sans toucher le theme parent ? Car si je ne change pas ça sur le parent, ça n'a aucun effet et je souhaiterais ne pas toucher :S
Modifié par playgraphix (17 May 2017 - 17:47)
Sans toucher au thème parent il faudrait alors tester ce qui est affiché avec is_home() ou is_page().
bzh a écrit :
Alors essaye de renommer front-page.php en home.php (qui ne sert que pour les posts)


Malheureusement, je n'ai pas réussi sans touché au thème parent. J'ai donc abandonné mon idée et trouvé une solution alternative qui me convient également.

Merci en tout cas pour votre aide.
Modifié par playgraphix (24 May 2017 - 13:21)