8721 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis sous WordPress et j'ai crée des custom posts que j'aimerais regrouper par mois. Pour le moment mon code m'affiche :
Samedi 21 Décembre à 14h
Samedi 16 Novembre à 14h
Samedi 14 Décembre à 14h
Samedi 30 Novembre à 14h
Samedi 9 Novembre
Samedi 2 Novembre à 14h
Samedi 26 Octobre à 14h
Samedi 12 Octobre à 14h


Et j'aimerais les regrouper par mois comme ceci :
OCTOBRE
SAMEDI 12 OCTOBRE à 14h
SAMEDI 26 OCTOBRE à 14h

NOVEMBRE
SAMEDI 2 NOVEMBRE à 14h
SAMEDI 9 NOVEMBRE
SAMEDI 16 NOVEMBRE
SAMEDI 30 NOVEMBRE

DECEMBRE
SAMEDI 14 DECEMBRE à 14h
SAMEDI 21 DECEMBRE à 14h


Voici mon code :
$calendriers = get_posts('posts_per_page=-1&post_type=calendrier');
if($calendriers):
	foreach($calendriers as $calendrier):
		echo '<div class="entry">';
			$date = get_field('date_vente', $calendrier->ID); /*custom field avec la date du jour voulu*/
			$mois = date("m", strtotime($date)); /*on ne récupère QUE le mois (de 01 à 12)*/
			echo '<p>'.$calendrier->post_title.' '.$calendrier->post_content.'</p>';
		echo '</div>'; // .entry
	endforeach;
endif;


Merci Smiley cligne
Bonjour,

Il faut que tu réorganises ton tableau $calendriers avant de vouloir afficher le contenu.
Tu peux par exemple boucler sur les 12 mois (de 1 à 12) de l'année et à l'intérieur de chaque boucle tu boucles sur ton tableau $calendriers et tu en extrait les custom post type qui correspondent au mois en cours en les replaçant dans une nouvelle variable qui est un tableau à 2 dimensions.
Bonjour

J'ai un soucis avec ta solution car je récupère ma date avec $date = get_field('date_vente', $calendrier->ID); mais je ne peut récupéré celle-ci QUE dans le foreach à cause du $calendrier->ID Smiley ohwell

A moins que je fasse une boucle avec php date('n') et ensuite dans mon foreach je test si date('n') == get_field('date_vente', $calendrier->ID) ? Ou ça devient compliqué/n'importe quoi ?

Ou au pire, si vraiment il n'y a pas de solutions, je peut mettre la date de la vente en date de publication & afficher tout les customs posts y compris ceux en "Planifier". Ça règle le pb du champs get_post_meta que l'on ne peut récupérer que à l'intérieur de la boucle mais ça ne règle pas le pb du regroupement par mois.
Modifié par Melusine85 (02 Dec 2013 - 12:38)
J'ai changé un peu mon code :
$args = array(
	'posts_per_page'   => -1,
	'post_type'        => 'calendrier',
	'orderby'          => 'post_date',
	'order'            => 'ASC',
	'post_status' => array('publish', 'future')
);
$calendriers = get_posts($args);
if($calendriers):
	$mois = 1;
	foreach($calendriers as $calendrier):
		$date = date('Y-m-d');
		$date_posts = substr($calendrier->post_date, 0, 10);
		if($mois == 1) { $mois_lettre = 'Janvier';	}
		if($mois == 2) { $mois_lettre = 'Février';	}
		if($mois == 3) { $mois_lettre = 'Mars'; 	}
		if($mois == 4) { $mois_lettre = 'Avril';	}
		if($mois == 5) { $mois_lettre = 'Mai';		}
		if($mois == 6) { $mois_lettre = 'Juin';		}
		if($mois == 7) { $mois_lettre = 'Juillet';	}
		if($mois == 8) { $mois_lettre = 'Août';		}
		if($mois == 9) { $mois_lettre = 'Septembre';}
		if($mois == 10){ $mois_lettre = 'Octobre';	}
		if($mois == 11){ $mois_lettre = 'Novembre';	}
		if($mois == 12){ $mois_lettre = 'Décembre';	}
		
		$mois_posts = substr($calendrier->post_date, 5, 2);
		if($mois == $mois_posts){
			echo '<div class="entry"><p><strong>'.$calendrier->post_title.'</strong> : '.$calendrier->post_content.'</p></div>'; // .entry
			
		}else{
			$mois = $mois_posts;
			echo '<h2 class="title cufon">'.$mois_lettre.'</h2>'; // Mois
			echo '<div class="entry"><p><strong>'.$calendrier->post_title.'</strong> : '.$calendrier->post_content.'</p></div>'; // .entry
		}
	endforeach;
else:
	echo '<div class="post"><p>'; _e('Sorry, no posts matched your criteria.', 'woothemes'); echo '</p></div>'; // .post
endif;


Mais ça me donne :
Janvier
Samedi 12 Octobre à 14h 
Samedi 26 Octobre à 14h 

Octobre
Samedi 2 Novembre à 14h 
Samedi 9 Novembre
Samedi 16 Novembre à 14h 
Samedi 30 Novembre à 14h 

Novembre
Samedi 14 Décembre à 14h
Samedi 21 Décembre à 14h
Fermeture le mardi 24 décembre à 17h00 :

Décembre
Samedi 4 Janvier 14h


Le 1er titre est "Janvier" au lieu d'être "Octobre" et du coup ça décale tout..

Comment afficher les bon titre au bon endroit ?
Modifié par Melusine85 (02 Dec 2013 - 15:26)
Désolé j'ai pas eu le temps de te répondre.
Mais je pense que tu dois faire une boucle qui va de 1 à 12 pour chaque mois, et à l'intérieur de chaque mois tu fais une boucle sur $calendriers. Je sais pas si c'est très clair...
Je te ferais un exemple de code un peu plus tard (là je passe juste en coup de vent). Smiley smile
Bonjour

Pas de soucis, j'ai trouvé la solution sur le forum WP.
Voici :
$mois = 0;
foreach($calendriers as $calendrier):
        $mois_posts = date("m", strtotime($calendrier->post_date));
        if($mois != $mois_posts){
            $mois = $mois_posts;
            echo '<h2 class="title cufon">'.date_i18n("F Y",strtotime()).'</h2>'; // Mois et Année
            echo '<div class="entry"><p><strong>'.$calendrier->post_title.'</strong> : '.$calendrier->post_content.'</p></div>'; // .entry
        }else{
            echo '<div class="entry"><p><strong>'.$calendrier->post_title.'</strong> : '.$calendrier->post_content.'</p></div>'; // .entry
            
        }
    //} // Fin affichage dates futures
endforeach;


Merci pour ton aide en tout cas, tu m'a avancée Smiley cligne
Bonne soirée
Bonjour,

Soit c'est moi qui délire, soit tu risques d'être embêtée si tu enregistres des dates à la suite comme ceci par exemple :
20 octobre 2013
30 septembre 2013
12 octobre 2013
8 septembre 2013


Ça risque de te donner ça :
Octobre
20 octobre 2013
Septembre
30 septembre 2013
Octobre
12 octobre 2013
Septembre
8 septembre 2013

À moins que je n'ai pas bien compris le script, mais ça ne va pas regrouper correctement les dates d'un même mois si elles ne se suivent pas, non ?
Bonjour Raphi.

En fait j'utilise désormais les dates de publication d'un article de WordPress. De ce fait, si une vente à lieu le 30/10, on indique 30/10 dans la date de publication. Si on en rajoute une le 20/10, elle viendra ce mettre automatiquement avant le 30/10.

Une image pour bien comprendre de quoi je parle Smiley cligne
http://j.pirio.free.fr/calendrier.jpg

Bonne journée
Modifié par Melusine85 (03 Dec 2013 - 10:05)
Ok dac ! Smiley smile
En effet si tu récupère un tableau déjà classé par date, c'est nickel.

Bonne continuation !