web-dev-qa-db-fra.com

Comment masquer les publications de plus de 2 ans

Je souhaite appliquer à mon site une règle qui filtre toutes les publications de blog de plus de 2 ans.

Certaines solutions impliquent de placer manuellement des publications dans une catégorie et de la masquer, mais je souhaite une solution entièrement automatisée.

Existe-t-il un moyen de dire à WP que chaque fois que vous saisissez des publications pour appliquer cette règle:

if( !is_admin() ) { 
    select posts where post date > two-years-ago-today
}

Merci

2
rgalpin

Vous pouvez utiliser le hook pre_get_posts pour modifier la requête principale:

add_action( 'pre_get_posts', 'filter_old_posts' );
function filter_old_posts($query){
    if( !is_admin() && $query->is_main_query()){
         add_filter('posts_where', $callback = function( $where = ''){
             $where .= " AND post_date > '" . date('Y-m-d', strtotime('-2 years')) . "'"; 
             return $where;
         });
         add_filter('getarchives_where', $callback );
    }
}

Cela filtrera les publications principales de la requête afin de renvoyer les publications de moins de 2 ans.

Il existe également une deuxième copie du filtre qui utilise getarchives_where pour filtrer les résultats du widget d'archivage.

3
Jack Johansson