Wordpress. Derniers articles sur 'Page' d'accueil statique.

WRInaute passionné
Salut à tous,

Pour la première fois, je test l'option "Choisir un page statique" en guise de page d'accueil d'un Wordpress...

C'est bien je peux directement personnaliser mon contenu d'accueil en passant par l'admin Wordpress...

MAIS,

comment faire pour quand même afficher les 3 ou 4 derniers billet de notre blog sur notre nouvelle belle page personnalisée ?


Merci d'avance à l'utilisateur confirmé de Wordpress qui prendre 30 seconde pour me filer le tuyaux :wink:
 
WRInaute accro
Salut

Un bout de code pour t'inspirer :
Code:
<?php
					query_posts('cat=6,7,8&showposts=5');
					while (have_posts()) : the_post();
				?>
					<li class="home-actu">
							<span class="date-actu">Le <?php the_date(); ?></span><br />
							<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><strong><?php the_title(); ?></strong><br /></a>
							<span class="intro-actu"><?php the_excerpt(); ?></span>
							<span class="suite-actu"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">En savoir plus</a></span>
					</li>	
				<?php 
					$cpt+=1;
					endwhile; 
				?>

En fait c'est la fonction query_post qu'il faut utiliser ; tu passes en paramètre "cat" suivi de la ou des catégories à inclure (ne pas mettre ce paramètre si pas de filtrage), et surtout "showposts" pour préciser le nombre de posts à inclure.

Voir le Codex pour la suite ;-)
 
WRInaute accro
Précision : tu dois créer un modèle de page où tu inclus ce code, et ensuite dans la page (au niveau du BO Wordpress) tu choisis ce modèle pour ta page d'accueil.

Pour les modèles, inclure le commentaire en tout début de ta page (par ex. nommée "page-accueil.php") :
Code:
	<?php
		/*
		Template Name: Accueil
		*/
	?>
 
WRInaute discret
Bonjour à tous,

J'essaie tant bien que mal à personnaliser ma page d'accueil et rajouter les derniers articles automatiquement. J'en profite donc pour déterrer ce topic.

cedric_g a dit:
Code:
<?php
					query_posts('cat=6,7,8&showposts=5');
					while (have_posts()) : the_post();
				?>
					<li class="home-actu">
							<span class="date-actu">Le <?php the_date(); ?></span><br />
							<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><strong><?php the_title(); ?></strong><br /></a>
							<span class="intro-actu"><?php the_excerpt(); ?></span>
							<span class="suite-actu"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">En savoir plus</a></span>
					</li>	
				<?php 
					$cpt+=1;
					endwhile; 
				?>

J'ai mis ce code sur un nouveau modèle de page comme présenté plus haut et ensuite j'ai copié page.php dans mon modèle.

Sauf que la page ne s'affiche pas comme je le souhaiterais. Je voudrais donc savoir où placer le code donné plus haut dans mon code? Il y a t-il un endroit précis pour que cela fonctionne?

mon code:
Code:
   <?php
      /*
      Template Name: Accueil
      */
   ?>
<?php get_header(); ?>
		
		<div id="content">
				
				<div class="post">
			
					<h2 class="title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
					
					<div class="entry">
						
						<?php the_content(); ?>
						
					</div><!-- /.entry -->
			
				</div><!-- /.post -->
			
			<?php endwhile; else: ?>
					
				<div class="post">
					
					<h2 class="title"><?php _e('Error 404',woothemes); ?></h2>
						
					<div class="entry">
						
						<p><?php _e('The page you are looking for does not exist. Please check the URL for typing errors, or',woothemes); ?> <a href="<?php bloginfo('home'); ?>" title="Go Home"><?php _e('head back home',woothemes); ?></a> <?php _e('and start over',woothemes); ?></p>
						
					</div><!-- /.entry -->
						
				</div><!-- /.post -->
				
			<?php endif; ?>
		
		</div><!-- /#content -->
		
		<?php get_sidebar(); ?>
		
<?php get_footer(); ?>

Merci de votre aide :wink:
 
WRInaute discret
J'ai essayé avec une nouvelle boucle

Code:
		<?php if (have_posts()) : ?>
      <?php query_posts('showposts=5&cat=37&order=desc'); ?>
      <?php while (have_posts()) : the_post(); ?>

que j'ai placé juste sous le div id=content.

Désormais, je n'ai que les 5 derniers articles affichés dans leur globalité, à la suite, les un des autres. Le contenu de ma page d'origine n'apparait même plus. :evil:

Sauveur? Manifestez-vous...
 
WRInaute accro
C'est normal. Ta page est un contenu dans la base de données, et là tu n'inclues pas ce contenu

Plutôt que des trucs compliqués (je fais une page statique à laquelle je rajoute la boucle) personnalise ton ondex.php en mettant en dur le texte qui était dans ta "page statique" qui n'en est plus une (ou mieux fais un article sticky)
 
WRInaute discret
Marie-Aude a dit:
C'est normal. Ta page est un contenu dans la base de données, et là tu n'inclues pas ce contenu

Comment faire pour inclure ce contenu? C'est vraiment compliqué?

Marie-Aude a dit:
Plutôt que des trucs compliqués (je fais une page statique à laquelle je rajoute la boucle)

C'est exactement ce que je souhaite faire!

Marie-Aude a dit:
personnalise ton ondex.php en mettant en dur le texte qui était dans ta "page statique" qui n'en est plus une (ou mieux fais un article sticky)

Le souci c'est que je vais devoir modifier le contenu (à env. 30%) assez souvent...
Sticky? c'est le principe de l'article unique sur ma page d'accueil, c'est ça?
 
WRInaute discret
J'ai réessayé désespérement: Dites moi ce que je fais de mal:

Je créé un nouveau modèle de page. avec le code en haut de page
Code:
   <?php
      /*
      Template Name: Accueil
      */
   ?>
Je copie le contenu de ma page.php en dessous.

Ok Nickel; le contenu est toujours présent avec mon nouveau modèle de page.
:D
Après, quand je veux mettre la boucle, Patatra! :evil: . Ou mettre la boucle pour faire afficher un extrait de mes derniers articles, en dessous de mon contenu?
Ci-dessous mon code actuel:

Code:
   <?php
      /*
      Template Name: Accueil
      */
   ?>
   <?php get_header(); ?>
		
		<div id="content">
		
			<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
		
				<div class="post">
			
					<h2 class="title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
					
					<div class="entry">
						
						<?php the_content(); ?>
						
					</div><!-- /.entry -->
			
				</div><!-- /.post -->
			
			<?php endwhile; else: ?>
					
				<div class="post">
					
					<h2 class="title"><?php _e('Error 404',woothemes); ?></h2>
						
					<div class="entry">
						
						<p><?php _e('The page you are looking for does not exist. Please check the URL for typing errors, or',woothemes); ?> <a href="<?php bloginfo('home'); ?>" title="Go Home"><?php _e('head back home',woothemes); ?></a> <?php _e('and start over',woothemes); ?></p>
						
					</div><!-- /.entry -->
						
				</div><!-- /.post -->
				
			<?php endif; ?>
		
		</div><!-- /#content -->
		
		<?php get_sidebar(); ?>
		
<?php get_footer(); ?>
 
WRInaute accro
Avant le </div><!-- /#content -->

Mais je me permet de réinsister LOURDEMENT sur le fait que ta façon de fonctionner est contraire au modèle de base de WordPress

Les "pages" sont appelées pour afficher du contenu unique.
Les listes d'articles sont appelées via les fichiers index.php, category.php, archives.php ....

Ce que tu veux faire, manifestement c'est avoir une page web d'accueil avec un contenu "fixe" mais appelé à changer, et une liste d'articles.
Tu n'auras donc pas une deuxième page d'accueil "blog" comme c'est le cas avec les pages d'accueil statiques.

Le fichier sur lequel tu dois travailler est donc le fichier index.php

Le plus simple est de faire un article "sticky" (je ne comprends pas pourquoi ça ne réponds pas à ton besoin ?), le plus complexe est d'y mettre différentes "loop" comme on le fait dans les thèmes magazines.

Quand on utilise un CMS il vaut toujours mieux respecter sa logique interne.
 
WRInaute discret
Marie-Aude a dit:
Le plus simple est de faire un article "sticky" (je ne comprends pas pourquoi ça ne réponds pas à ton besoin ?), le plus complexe est d'y mettre différentes "loop" comme on le fait dans les thèmes magazines.

Quand on utilise un CMS il vaut toujours mieux respecter sa logique interne.

Bon ça ne fonctionne pas comme je le souhaitais. Donc, je vais suivre ton conseil avisé de bien respecté la logique interne de wordpress.
Il suffit, simplement, de copier mon contenu présent en page d'accueil dans un nouvel article et après j'ai vu qu'il fallait installer un plugin c'est bien ça?
Merci pour tout tes conseils
 
WRInaute discret
Quand je met ce code avant div content:
Code:
    <?php
                   query_posts('cat=6,7,8&showposts=5');
                   while (have_posts()) : the_post();
                ?>
                   <li class="home-actu">
                         <span class="date-actu">Le <?php the_date(); ?></span><br />
                         <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><strong><?php the_title(); ?></strong><br /></a>
                         <span class="intro-actu"><?php the_excerpt(); ?></span>
                         <span class="suite-actu"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">En savoir plus</a></span>
                   </li>   
                <?php
                   $cpt+=1;
                   endwhile;
                ?>

Cela me met bien mes 5 derniers articles, mais je n'ai plus mon contenu

Quand je mets cette boucle:
Code:
             <?php if (have_posts()) : ?>
      <?php query_posts('showposts=5&cat=37&order=desc'); ?>
      <?php while (have_posts()) : the_post(); ?>

ça me met une Parse error: syntax error, unexpected $end


Sinon pour le sticky, je ne comprends pas car sur google on me parle d'un plugin pour "scotcher" un article
 
WRInaute discret
UsagiYojimbo a dit:
Il te manque un

Code:
<?php endwhile; ?>

Code:
   <?php
      /*
      Template Name: Accueil
      */
   ?>
   <?php get_header(); ?>
   
             <?php if (have_posts()) : ?>
      <?php query_posts('showposts=5&cat=37&order=desc'); ?>
      <?php while (have_posts()) : the_post(); ?>
	  <?php endwhile; ?>

		
		<div id="content">
		
			<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
		
				<div class="post">
			
					<h2 class="title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
					
					<div class="entry">
						
						<?php the_content(); ?>
						
					</div><!-- /.entry -->
			
				</div><!-- /.post -->
			
			<?php endwhile; else: ?>
					
				<div class="post">
					
					<h2 class="title"><?php _e('Error 404',woothemes); ?></h2>
						
					<div class="entry">
						
						<p><?php _e('The page you are looking for does not exist. Please check the URL for typing errors, or',woothemes); ?> <a href="<?php bloginfo('home'); ?>" title="Go Home"><?php _e('head back home',woothemes); ?></a> <?php _e('and start over',woothemes); ?></p>
						
					</div><!-- /.entry -->
						
				</div><!-- /.post -->
				
			<?php endif; ?>
		
		</div><!-- /#content -->
		
		<?php get_sidebar(); ?>
		
<?php get_footer(); ?>

Ça me fait la même chose :x
 
WRInaute accro
Tu sais qu'il faut que tu affiches le contenu avant ton endwhile et que ça ne se fait pas par l'opération du saint esprit mais avec des trucs comme the_content() ?
 
WRInaute discret
Marie-Aude a dit:
Tu sais qu'il faut que tu affiches le contenu avant ton endwhile et que ça ne se fait pas par l'opération du saint esprit mais avec des trucs comme the_content() ?

Non, je ne savais pas.

Il faut que j'apprenne le PHP, mais ça me rebute. :oops:

Je vais essayer de m'y pencher quand j'aurais plus de temps. Mais au moins, je vous remercie, je sais par quoi commencer.
 
WRInaute discret
Merci d'arrêter de rire de mes questions.

Y a t'il des plugins existants afin de faire afficher les derniers articles sur une page d’accueil statique ?
 
WRInaute accro
Je ne "ris" pas, il faut apprendre aussi à faire la différence entre un smiley souriant et un smiley pété de rire comme :lol:

Maintenant tu prends une mauvaise direction, tu essayes de tordre le système, sans doute parce que tu ne comprends pas bien comment il fonctionne, et après tu cherches des plugins pour arriver à le tordre parce que ça ne se fait pas tout seul.

Dans ton thème wordpress tu as deux sortes de fichiers :
- ceux prévu pour afficher un contenu "seul" (contenu que tu auras créé dans une page ou dans un article), qui sont typiquement single.php et page.php
- ceux prévu pour afficher xx articles, soit les derniers, soit les derniers d'une catégorie, d'un auteur, d'un tag les articles d'une date données, etc, respectivement index.php qui sert à l'accueil, category.php, author.php, tag.php, archives.php, etc...

Tout le système est construit pour générer de façon invisible, tout seul, les requêtes nécessaires, en fonction des urls.

Là ce que tu cherches à faire, simplement parce que tu veux afficher en plus de la liste des derniers articles un contenu fixe, c'est faire une page, qui est censée être affichée par une requête qui va chercher un post donné, et ensuite à l'intérieur de cette page, faire une deuxième requête, qui va chercher les x articles et qui est celle par défaut pour la page d'accueil.

Donc tu lui dis "ne vas pas me chercher la page d'accueil, va chercher telle page, et une fois que tu es dessus, va me chercher la "vraie" page d'accueil.

Tu vois bien que c'est corniculé.

Tu as deux solutions différentes :
- soit ton texte fixe ne change jamais et tu le créés dans le code de index.php, avant la boucle
- soit ton texte peut changer, et tu as la fonctionnalité de "mise en avant" d'un article, qui permet de l'afficher en haut de la page d'acceuil index.php, avant les xx derniers articles

Il est toujours plus simple de s'organiser en fonction de la logique du système
 
WRInaute discret
Mon Index.php

Code:
<?php get_template_part('content', 'before'); ?>

    <div class="content">
    
        <?php get_template_part('loop', 'homepage'); ?> 
        
    </div><!-- .content -->

<?php get_template_part('content', 'after'); ?>

Mon loop.php

Code:
<?php
    global $theme;
    if (have_posts()) : while (have_posts()) : the_post();
?>

    <div class="post-wrap">
    
        <div <?php post_class('post clearfix'); ?> id="post-<?php the_ID(); ?>">
        
            <h2 class="title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'themater' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
            
            <div class="postmeta-primary">
    
                <span class="meta_date"><?php the_time($theme->get_option('dateformat')); ?></span>
               &nbsp; <span class="meta_author"><?php the_author(); ?></span>
    
                    <?php if(comments_open( get_the_ID() ))  {
                        ?> &nbsp; <span class="meta_comments"><?php comments_popup_link( __( 'No comments', 'themater' ), __( '1 Comment', 'themater' ), __( '% Comments', 'themater' ) ); ?></span><?php
                    }
                    ?> 
            </div>
            
            <?php
                    if(has_post_thumbnail())  {
                        ?><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'themater' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php
                        the_post_thumbnail(
                            array($theme->get_option('featured_image_width'), $theme->get_option('featured_image_height')),
                            array("class" => $theme->get_option('featured_image_position') . " featured_image")
                        );?></a><?php
                    }
                ?>
            
            <div class="entry">
                <?php
                    the_content('');
                ?>
    
            </div>
            
         
            
        </div>
    </div><!-- Post ID <?php the_ID(); ?> -->
                
    <?php endwhile; ?>
    <?php else : ?>

    <div class="post-wrap">
    
        <div class="post">
        
            <div class="entry">

                <p><?php _e('No results were found for the requested archive.','themater'); ?></p>
            
            </div>

            <div id="search-wrap">
                
                <?php get_search_form(); ?>
            
            </div>
            
        </div>
        
    </div>
<?php endif; ?>
    
<?php if (  $wp_query->max_num_pages > 1 ) { ?>

    <div class="navigation clearfix">
        
        <?php
            if(function_exists('wp_pagenavi')) {
                wp_pagenavi();
            } else {
        ?><div class="alignleft"><?php next_posts_link( __( '<span>&laquo;</span> Older posts', 'themater' ) );?></div>
        <div class="alignright"><?php previous_posts_link( __( 'Newer posts <span>&raquo;</span>', 'themater' ) );?></div><?php
        } ?> 
        
    </div><!-- .navigation -->
    
<?php } ?>

mon loop-page.php :

Code:
<?php if (have_posts()) while (have_posts()) : the_post(); ?> 
        
    <div class="post-wrap post-wrap-page">
    
        <div <?php post_class('post clearfix'); ?> id="post-<?php the_ID(); ?>">
            <h2 class="title"><?php the_title(); ?></h2>
            <?php
                if(is_user_logged_in())  {
                    ?><div class="postmeta-primary"><span class="meta_edit"><?php edit_post_link(); ?></span></div><?php
                } 
            ?>
            <div class="entry clearfix">
                    
                <?php
                    if(has_post_thumbnail())  {
                        the_post_thumbnail(
                            array(300, 225),
                            array("class" => "alignleft featured_image")
                        );
                    }
                ?>
                
                <?php
                    the_content(''); 
                    wp_link_pages( array( 'before' => '<p><strong>' . __( 'Pages:', 'themater' ) . '</strong>', 'after' => '</p>' ) );
                ?>

            </div>
            
        </div><!-- Page ID <?php the_ID(); ?> -->
        
    </div><!-- .post-wrap -->
    
    <?php 
        if(comments_open( get_the_ID() ))  {
            comments_template('', true); 
        }
    ?>
    
<?php endwhile; ?>

La je suis vraiment perdu pas à peu près. J'ai fait comme ce post le prescrit mais mon thème ne semble pas avoir les mêmes fonctionnalités.
 
WRInaute accro
Et tu as mis quoi dans content-before.php ?

Sinon tu sembles partir d'un thème complexe, mais bon...

Moi j'aurais plutôt fait un truc plus simple dans index.php avec

if ( isfront() || is_home() ) { la tu mets ce que tu veux, tu peux le mettre directement... }
... et ensuite le index.php normal.
Je ne vois pas trop ce que ça t'apporte de dupliquer loop en loop-page.php, en plus c'est pas évident de voir les vraies différences entre les deux
 
WRInaute discret
Mon content-before :
Code:
<?php global $theme; get_header(); ?>

    <div id="main" class="span-24">
    
        <div id="primary-sidebar-wrap" class="span-4">
        
            <?php get_sidebars('primary'); ?>
    
        </div><!-- #primary-sidebar-wrap -->
        
        <div id="content-wrap" class="span-13">
        
        <?php $theme->hook('content_before'); ?>

En fait, tout les code que j'ai mis précédemment son les codes de bases, sans aucune modification.
 
WRInaute discret
Don, je n'aurais qu'à copier ce code quelque part ?
Code:
<?php if (have_posts()) : ?>
      <?php query_posts('showposts=5&cat=37&order=desc'); ?>
      <?php while (have_posts()) : the_post(); ?>
     <?php endwhile; ?>
 
WRInaute discret
Problème résolu! Afin... je crois bien :)

Au lieu de modifier tous ces codes, j'ai simplement ajouté ne div class à Mon index.php

Code:
<?php get_template_part('content', 'before'); ?>

    <div class="content">
	<div class="post-wrap">
		<h1>Les pires et meilleures publicités du Québec</h1>
		<p>Pub Québec est un portail regroupant à la fois les pires et les meilleures publicités du Québec. Bonne exploration !</p>
	</div>

        <?php get_template_part('loop', 'homepage'); ?>
 
    </div><!-- .content -->

<?php get_template_part('content', 'after'); ?>
 
Discussions similaires
Haut