web-dev-qa-db-fra.com

Rechercher un article en utilisant la date à laquelle il a été posté

Je souhaite rechercher un message en fonction de la date à laquelle il a été posté. Par exemple, dans la zone de recherche, j'y placerais le 22 novembre 2011 et tous les messages du 22 novembre 2011 seraient affichés. Je suis désespéré sur la façon de faire cela. Toute aide serait très appréciée. J'utilise un thème et c'est search.php va quelque chose comme ça. Puis-je simplement insérer la requête que vous avez donnée à ce fichier search.php? Je ne sais pas où mettre les codes que vous avez donnés depuis que je suis un débutant dans wordpress. Merci beaucoup pour votre temps.

<?php the_search_query(); ?>
<?php if (have_posts()) : while (have_posts()) :the_post(); 
$arc_year = get_the_time('Y'); 
$arc_month = get_the_time('m'); 
$arc_day = get_the_time('d'); 
<?php the_permalink(); ?>    
<?php the_title();
<?php the_time('F j, Y'); ?> at <?php the_time('g:i a'); ?>
<?php dp_attachment_image($post->ID, 'thumbnail', 'alt="' . $post->post_title . '" class="thumbnail"'); ?>
<?php the_excerpt(); ?>
<?php the_permalink(); ?>">READ MORE
1
Pete

Vous pouvez créer un modèle de page personnalisé pour cette page de recherche spécifique http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates .

Puis définissez des variables $ _GET (en utilisant un formulaire avec la méthode GET).

Et faites une requête personnalisée pour ces valeurs $ _GET:

$date_query = new WP_Query( 'year=' . $_GET['year'] . '&monthnum=' . $_GET['month'] . '&day=' . $_GET['day'] );

Ensuite, votre boucle personnalisée:

<?php if ($date_query->have_posts()) : while ($date_query->have_posts()) : $date_query->the_post();?>
   <?php the_title(); ?>
<?php endwhile; endif; ?>

METTRE À JOUR:

Désolé que cela ait pris si longtemps, un peu occupé.

Voici une solution à votre problème:

mettez ceci dans votre function.php

function my_date_search() {
    if(is_search()) {
        $search_query = get_search_query();
        $months = array( 1 => "January", 2 => "February", 3 => "March", 4 => "April", 5 => "May", 6 => "June", 7 => "July", 8 => "August", 9 => "September", 10 => "October", 11 => "November", 12 => "December" );

        foreach($months as $month => $month_name) {
            if(stristr($search_query, $month_name)) {
                $m = $month;
                preg_match('/(19[0-9][0-9]|20[0-9][0-9])/', $search_query, $year);
                if($year)
                    $y = $year[0];
                preg_match('/^[0-3]{0,1}[0-9]{1} /', $search_query, $day);
                if($day)
                    $d = $day[0];
            }
        }

        if(isset($d) && isset($m) && isset($y)) {
            $wd = explode($y, $search_query);
            if($wd[1])
                $query_string = 's=' . trim($wd[1]) . '&year=' . $y . '&monthnum=' . $m . '&day=' . $d;
            else
            $query_string = 'year=' . $y . '&monthnum=' . $m . '&day=' . $d;
            query_posts($query_string);
        }
    }
}
add_action('get_header', 'my_date_search');

Si vous recherchez quelque chose comme "14 juin 2011", une page de recherche du 14 juin 2011 s'affichera. Si vous effectuez une recherche sur "14 juin 2011", une page de recherche du 14 juin 2011 contenant le mot clé "searchthis" sera affichée. .

Il existe peut-être une solution plus simple/meilleure pour vous, mais cela fonctionnera.

2
Rob Vermeer

Vous devriez pouvoir utiliser les paramètres de temps de WP_Query et le faire avec très peu de code. Découvrez la documentation . Ce WP_Query remplacera la boucle contenue dans search.php. Vous devriez avoir la possibilité d'ajouter des arguments supplémentaires pour obtenir d'autres résultats de recherche que vous souhaitez filtrer.

0
mor7ifer