web-dev-qa-db-fra.com

Obtenir la liste des années où les publications ont été publiées

Je souhaite créer une liste de publications à partir d'un type de publication personnalisé et ajouter des filtres sur lesquels l'utilisateur peut cliquer pour filtrer la liste.

J'ai ajouté des filtres pour toutes les catégories en utilisant la fonction get_terms (). Maintenant, je veux ajouter des filtres par année. J'ai donc besoin d'un moyen de récupérer une liste de toutes les années pour lesquelles au moins un message a été publié ...

J'ai juste besoin de quelque chose comme:

$years = get_all_years_with_posts();
// returns array( 2011, 2013, 2014 )

Je sais que je peux saisir tous les articles, vérifier leur année et construire la liste moi-même, mais n'y a-t-il pas une autre approche?

4
MikO

Votre question est assez ancienne, mais je voulais juste ajouter une vraie solution à votre question. Voici une fonction qui renverra un tableau des années dans lesquelles vous avez publié des publications. Vous pouvez la placer dans functions.php, dans un plugin ou à votre guise.

function get_posts_years_array() {
    global $wpdb;
    $result = array();
    $years = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT YEAR(post_date) FROM {$wpdb->posts} WHERE post_status = 'publish' GROUP BY YEAR(post_date) DESC"
        ),
        ARRAY_N
    );
    if ( is_array( $years ) && count( $years ) > 0 ) {
        foreach ( $years as $year ) {
            $result[] = $year[0];
        }
    }
    return $result;
}

Vous devrez le modifier légèrement pour les types de publication personnalisés ... ajoutez simplement AND wp_posts.post_type = 'my_cpt' quelque part.

8
Gavin

Vous pouvez utiliser une fonction WP et un shortcode de cette façon:

add_shortcode( 'archives', '_get_archived_posts' );
function _get_archived_posts( $atts ) {

 $a = shortcode_atts( array(
    'type'            => 'yearly',
    'limit'           => '',
    'format'          => '', 
    'before'          => '',
    'after'           => '',
    'show_post_count' => false,
    'echo'            => 0,
    'order'           => 'DESC'
), $atts, 'filter_archives_sc' );

    return wp_get_archives($a);
}

La source

2
JMau

Vous pouvez utiliser cette fonction pour obtenir toutes les années postérieures dans un tableau, avec lequel vous pourriez utiliser une boucle.

$terms_year = array(
    'post_type'         => array('YOUR_CPT'),
);

$years = array();
$query_year = new WP_Query( $terms_year );

if ( $query_jaar->have_posts() ) :
    while ( $query_year->have_posts() ) : $query_year->the_post();
        $year = get_the_date('Y');
        if(!in_array($year, $years)){
            $years[] = $year;
        }
    endwhile;
    wp_reset_postdata();
endif;

// Echo the years

echo '<pre>';
print_r($years);
echo '</pre>';
1
Lou Jonker