web-dev-qa-db-fra.com

Comment afficher toutes les publications avec le même jour et le même jour d'aujourd'hui?

J'essaie de comprendre comment faire cela. J'ai beaucoup de posts. Je le veux pour que, lorsque quelqu'un ouvre le site, la page de couverture affiche tous les messages qui ont été publiés le même mois et le même jour - mais ne tient pas compte de l'année. Donc, si je devais aller sur le site le 30 janvier, je verrais tous les messages publiés le 30 janvier de TOUTE année ... une liste historique. Je pensais aussi le faire par catégorie. Si la catégorie s’appelait janvier-30, puis-je obtenir que le système prenne la date du jour et la compare aux catégories et affiche celle qui correspond (pas d’année, sur cours)?

Quelqu'un peut-il aider?

1
Web_Mistress00

Vous pouvez y parvenir avec les paramètres date_query ajoutés à la version 3.7.

Pour modifier la requête principale sur votre page de publication avant son exécution et appliquer les paramètres date_query, nous utilisons l'action pre_get_posts :

function historical_posts_list( $query ){
    if( $query->is_home() && $query->is_main_query() ){
        $date_query = array(
            array(
                'month' => date( 'n', current_time( 'timestamp' ) ),
                'day' => date( 'j', current_time( 'timestamp' ) )
            )
        );
        $query->set( 'date_query', $date_query );
    }
}
add_action( 'pre_get_posts', 'historical_posts_list' );

Si la page sur laquelle vous souhaitez afficher cette page ne correspond pas à votre page de publication, vous pouvez ajouter une requête personnalisée dans votre modèle avec les mêmes paramètres et exécuter une boucle distincte:

$posts_from_today = new WP_Query( array(
    'date_query' => array(
        array(
            'month' => date( 'n', current_time( 'timestamp' ) ),
            'day' => date( 'j', current_time( 'timestamp' ) )
        ),
    ),
    'posts_per_page' => -1,
) );

if( $posts_from_today->have_posts() ){
    while( $posts_from_today->have_posts() ){
        $posts_from_today->the_post();
        the_title();
    }
}
4
Milo
$q  = new \WP_Query([
  'monthnum' => date('n'), // beware the date function!
  'day'      => date('j'),
]);

while ($q->have_posts()) {
  $q->the_post();
  // ...
}
wp_reset_query();

Voir la documentation sur paramètres de date .

Puisque vous souhaitez modifier spécifiquement la requête de la page d'accueil, vous pouvez vous connecter à pre_get_posts et modifier la requête principale uniquement sur la page d'accueil.

add_action('pre_get_posts', 'wpse174669_pre_get_posts');
function wpse174669_pre_get_posts($q)
{
    if (is_home() && $q->is_main_query()) {
        $q->set('ignore_sticky_posts', true);
        $q->set('monthnum', date('n'));
        $q->set('day', date('j'));
    }
}
2
chrisguitarguy

Si vous choisissez la route des catégories, vous pourriez faire quelque chose comme ceci:

Tout d'abord, obtenez une limace de la date d'aujourd'hui:

$date_slug = current_time('M-d');

Ensuite, créez un tableau d'arguments de requête de taxonomie:

$tax_query =  array(
    array(
        'taxonomy' => 'category',
        'field'    => 'slug',
        'terms'    => $date_slug,
    )
);

Ensuite, créez une requête en utilisant la classe WP_Query :

$r = new WP_Query(
    array(
        'tax_query' => $tax_query,
    )
);

Ensuite, construisez votre boucle :

<?php if ($r->have_posts()) : ?>

    <?php while ( $r->have_posts() ) : $r->the_post(); ?>

    <?php endwhile; ?>

<?php endif; ?>

<?php wp_reset_postdata(); ?>
1
darrinb