J'essaie d'ajouter un filtre sur mon thème personnalisé en fonction du mois suivant, similaire aux archives mais avec quelques différences.
Quel est le meilleur moyen d'obtenir une liste des mois dans lesquels nous avons des publications?
Merci Alex
J'ai utilisé la requête suivante:
$wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts
FROM $wpdb->posts
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC"
Impossible d'utiliser la fonction wp_get_archives
car elle ne renvoie que les formats suivants:
html - In HTML list (<li>) tags and before and after strings. This is the default.
option - In select (<select>) or dropdown option (<option>) tags.
link - Within link (<link>) tags.
custom - Custom list using the before and after strings.
Core ne peut pas vous aider ici. Vous devrez faire un…
Voici une requête de sauvegarde que j'utilise dans les écrans de l'interface utilisateur pour obtenir le nombre total de mois avec les publications pour les utiliser dans la pagination personnalisée. Faites attention à ne pas rechercher uniquement les publications publiées, mais prenez en compte le fait qu'il pourrait y avoir un ensemble de restrictions et appliquez-le ensuite.
$post_status = esc_attr( $_GET['post_status'] );
$post_status = in_array( $post_status, $GLOBALS['avail_post_stati'] )
? " AND post_status = {$post_status}"
: 'all'
;
'all' === $post_status AND $post_status = '';
$total_page_dates = $wpdb->get_results( $wpdb->prepare( "
SELECT
YEAR( post_date ) AS year,
MONTH( post_date ) AS month,
count( ID ) AS posts
FROM {$wpdb->posts}
WHERE
post_type = %s
%s
GROUP BY
YEAR( post_date ),
MONTH( post_date )
ORDER BY post_date
ASC
", get_current_screen()->post_type, $post_status ) );
Vous pourrez alors inspecter votre résultat
// Inspect the result
var_dump( $total_page_dates );
Ce qui pourrait ressembler à ceci:
array (size=4)
0 =>
object(stdClass)[1847]
public 'year' => string '2013' (length=4)
public 'month' => string '6' (length=1)
public 'posts' => string '19' (length=2)
1 =>
object(stdClass)[1846]
public 'year' => string '2013' (length=4)
public 'month' => string '7' (length=1)
public 'posts' => string '17' (length=2)
2 =>
object(stdClass)[1845]
public 'year' => string '2013' (length=4)
public 'month' => string '8' (length=1)
public 'posts' => string '8' (length=1)
3 =>
object(stdClass)[1844]
public 'year' => string '2013' (length=4)
public 'month' => string '9' (length=1)
public 'posts' => string '2' (length=1)
Vous pouvez alors le parcourir ou simplement saisir le premier ou le dernier élément du tableau pour obtenir la plage. Compter - count( $total_page_dates )
- vous dirait combien de mois vous avez eu, etc. Gardez à l'esprit que chaque valeur de tableau est une object
, vous devez donc y accéder comme ceci
$posts_in_first_month = total_page_dates[0]->posts;
Essayez wp_get_archives ()
Affiche la liste des archives par mois, en affichant uniquement les douze derniers.
<?php wp_get_archives('type=monthly&limit=12'); ?>
Affiche la liste des archives par date et n’affiche que les quinze derniers jours.
<?php wp_get_archives('type=daily&limit=15'); ?>
Affiche la liste des archives des vingt derniers messages les plus récents classés par titre.
<?php wp_get_archives('type=postbypost&limit=20&format=custom'); ?>
Pour une solution non formatée, envisagez d'utiliser query_posts ()
<?php
$allPosts = query_posts('cat=6&monthnum=04&year=2011');
print_r($allPosts);
?>
C'est la requête que wp_get_archive utilise en interne pour les archives du mois
$query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit";
et vous faites la même chose, sauf que vous utilisez distinct et groupe par ensemble.