Bonsoir,

Je suis complètement novice en php et en html et j'aurais besoin de votre aide. Comme l'indique le titre de mon post, je souhaite ajouter une date d'expiration à mes articles. Dés que cela est fait, je souhaite que l'article change de catégorie pour aller dans une autre catégorie type "mes anciens articles".

J'ai déjà trouvé un code mais il faudrait que je le modifie en fonction de ce que je veux faire. Voici le
<?php
if (have_posts()) :
     while (have_posts()) : the_post();

$todays_date = date("d/m/Y");

$today = strtotime($todays_date);

$expirationdate = get_post_custom_values('expiration');

if (is_null($expirationdate)) {

$expiration_date = '2524608000'; // affiche les articles sans date jusqu'en 2050 ;

} else {

$expirestringarray = implode($expirationdate);

$expiration_date = strtotime($expirestringarray);

}

if ($expiration_date > $today) { $valid = "yes"; } else { $valid = "no"; } 

if ( $valid == "yes" ) { 

             // Code de la boucle dont le titre, l'extrait, etc.
            the_title();
            the_excerpt();

         }
     endwhile;
endif;
?>


Est-ce possible ? Je sais que je dois l'insérer dans le fichier index.php...et remplacer la boucle mais ça veut dire la remplacer complètement à partir de
<?php if ( have_posts() ) : ?>

			<?php /* Start the Loop */ ?>
?

Merci d'avance pour votre aide Smiley confus

Misskat Smiley ravi
Je pense que tu prends le problème dans le mauvais sens.
Tu devrais trier tes articles avec une requête SQL et afficher les résultats. C'est beaucoup plus flexible.

Je te donne un exemple avec MySQL... Si t'as une table qui s'appelle articles avec un champ creation_date et que tu souhaites récupérer les articles des 12 derniers mois.


SELECT * 
FROM articles
WHERE creation_date BETWEEN now() AND (now() - interval 12 month) 
ORDER BY creation_date DESC


Avec une requête SQL tu peux décider du jour au lendemain que les anciens articles sont ceux de plus d'un mois, de 6 mois, d'un an etc. C'est plus flexible Smiley cligne
Bonjour,

Oui je me doute bien qu'avec SQL c'est plus simple mais avec wordpress ça passerait ??

Je fais cette requête SQL dans mon fichier index.php aussi ?

Comme je l'ai dit je suis novice Smiley confused

Merci d'avance.

Misskat
wordpress ou pas, le cheminement reste le même

tu load ton fichier php lors du démarrage de la page (ou lorsque l'utilisateurs clic sur "recherche article")

et dans ton fichier php tu n'a rien d'autre qu'une requête select, celle que t'a fourni semantic, avec un echo des résultats comme ça ton index ce voit afficher les résultats obtenue par l'echo.
exemple :

j'ai dans mon index <body onload="functionquejeveuxfaire.php()">
ou via un formulaire <form action=""fichierphpquej'aicreer" method="POST" />

ton formulaire enverra un <input type="text" name="valeurquejeveuxrecuperer"/>
via un <input type="submit"/>

de l'autre coter tu as ton fichierphpquej'aicreer.php
qui contient plusieurs choses:

la connexion à la BDD;
la construction de la requête (@semantic)
la boucle while permettant de récupérer tout les résultat de la requêtes
l'affichage via echo

exemple de php:
        $sql="SELECT * 
FROM articles
WHERE creation_date BETWEEN now() AND (now() - interval 12 month) 
ORDER BY creation_date DESC";
      $item_type = "";
      $resultats = get_rows($sql);
      while($resultat = $resultats->fetch())
      {
        $item_type =  $item_type . "<p>";
        $item_type =  $item_type . utf8_encode($resultat->articles);
        $item_type =  $item_type . "</p>";
      }
      echo $item_type;
      $resultats->closeCursor();

Modifié par JENCAL (18 Jun 2015 - 11:35)
Je ne connais pas trop wordpress malheureusement.
A première vue t'as trois choses à chercher

1 ) Ou sont afficher les articles
2 ) Ou est le menu
3 ) Ou sont générer les requêtes

Après t'as deux solutions.
1 ) Tu t'inspires de la page qui affiche les articles pour créer la tienne comme te le suggères @JENCAL
2 ) Tu adaptes la page d'origine pour qu'elle affiche les nouveaux et les anciens (avec un argument dans ton url)

Une petite recherche rapide sur la doc officielle et j'ai trouvé ceci :

Pour les requêtes :

http://codex.wordpress.org/Class_Reference/WP_Query

La structure de la base de données

https://codex.wordpress.org/File:WP3.8-ERD.png

Donc à première vue (mais je peux me tromper) je ferais un truc comme ceci pour récupérer les articles des 12 derniers mois :


$args = array(
    'post_type' => 'post', 
    'post_status'   => 'publish',
    'date_query'    => array(
        'column'  => 'post_date',
        'after'   => '- 365 days'
    )
);
$query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
	echo '<ul>';
	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		echo '<li>' . get_the_title() . '</li>';
	}
	echo '</ul>';
} else {
	// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();

Modifié par semantic (18 Jun 2015 - 14:03)
Bonjour,

Au final j'ai déjà trouvé comment mettre une date d'expiration à mes articles, pour qu'ils n'apparaissent plus dans le blog.

Par contre ils apparaissent toujours dans les archives, c'est génial !!!!

Me reste plus qu'à insérer le code que j'avais trouvé pour mettre mes articles dans le mode ascendant pour que les plus récents apparaissent et ça ira.

Merci à tous pour vos réponses et vos codes que je garde précieusement.

Misskat