2012-07-04 6 views
1

Je cherche à avoir un menu déroulant en haut d'une page de catégorie qui me permettra de filtrer les posts par date. Je vais très probablement devoir utiliser des champs personnalisés, mais ce n'est pas le problème.Comment filtrer les publications catégorie par date?

Je sais que vous pouvez faire une requête de poste personnalisé à l'aide des variables de style GET, mais avec de jolies URL activées, je ne peux pas sembler utiliser les variables GET pour filtrer les messages spécifiques (par exemple www.domain.com/category/?orderby=title&order=ASC etc etc)

J'ai essayé de regarder pour les plugins, mais rien ne semble me sauter dessus pour ce dont j'ai besoin, et j'ai aussi remarqué beaucoup de discussions ici sur des sujets similaires, sans solutions décentes pour ma situation.

Répondre

2

La requête générale serait cela comme:

<?php $posts = query_posts($query_string . '&orderby=date&order=asc'); ?> 
    <?php if($posts) : ?> 
    //whatever 
      <?php foreach($posts as $post) : setup_postdata($post); ?> 
     //whatever 
      <p><?php the_content(); ?></p> 
       <?php endforeach; ?> 

    <?php endif; ?> 

pour la liste déroulante, vous pouvez faire quelque chose comme ceci:

$args = $args=array(
     'cat' => $cat_id, 
     'post_type' => 'post', 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     'orderby' => 'DATE', 
     'order' => 'ASC' // or DESC 
    ); 

<form action="<? bloginfo('url'); ?>" method="get"> 
<select name="page_id" id="page_id"> 
<?php 
global $post; 
$args = array('numberposts' => -1); 
$posts = get_posts($args); 
foreach($posts as $post) : setup_postdata($post); ?> 
       <option value="<? echo $post->ID; ?>"><?php the_title(); ?></option> 
<?php endforeach; ?> 
</select> 
<input type="submit" name="submit" value="view" /> 
</form> 

Et une autre option:

<?php 
    $cat_id = get_cat_ID('uncategorized'); //your-category 
    $args=array(
     'cat' => $cat_id, 
     'post_type' => 'post', 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     'orderby' => 'DATE', 
     'order' => 'ASC' // or DESC 
    ); 
    $my_query = null; 
    $my_query = new WP_Query($args); 
    if($my_query->have_posts()) { 
?> 
    <form name="jump"> 
     <select name="menu"> 
      <?php 
       while ($my_query->have_posts()) : $my_query->the_post(); ?> 
       <option value="<?php the_permalink() ?>"><?php the_title(); ?></option> 
       <?php 

       endwhile; 
      } 
      ?> 
     </select> 
     <input type="button" onClick="location=document.jump.menu.options[document.jump.menu.selectedIndex].value;" value="Go"> 
    </form> 

<?php 
    wp_reset_query(); 
?> 
0

que je recherchais pour les postes de recherche par date. n'a pas réussi à trouver une solution appropriée sur stackoverflow. J'ai ensuite imprimé l'objet wp_query et trié cette chose. ça a marché pour moi. Dans mon scénario, je cherche des publications par leur titre ou par date. Voici le code pour le crochet.

function SearchFilter($query) { 
if ($query->is_search) { 
    $query->set('post_type', 'post'); 
    // check if query is a date 
    $search_query = $query->query['s']; 
    $date_format  = DateTime::createFromFormat('d/M/Y', $search_query); 
    if ($date_format) 
    { 
     $dte   = date('j',$date_format->getTimestamp()); 
     $month   = date('n',$date_format->getTimestamp()); 
     $year   = date('Y',$date_format->getTimestamp()); 
    } 
    if (isset($dte) && isset($month) && isset($year)) { 
     unset($query->query['s']); 
     unset($query->query_vars['s']); 
     $query->query['date_query'] = array(
        array(
         'year' => $year, 
         'month' => $month, 
         'day' => $dte, 
        ) 
       ); 
     $query->set('date_query', array(
         array(
          'year' => $year, 
          'month' => $month, 
          'day' => $dte, 
         ) 
        ) 
       ); 

    } 
} 
return $query; 
} 

add_filter('pre_get_posts','SearchFilter'); 

comme u peut remarquer ce filtre vérifie automatiquement si la chaîne est passée param ou la date. m en utilisant

$query->set('post_type', 'post') 

pour obtenir les résultats de la publication uniquement, sinon, elle récupérera également la page. Supposons que vous ayez une date sous chaque article, vous pouvez ajouter href à cette date. afin d'obtenir tous les messages de cette date à la fin de la recherche href add param comme? s = quelque chose

http://my.blog?s=1/Jun/2015 

et ainsi sur le modèle u ne devez écrire ur personnalisée forwhile utiliser simplement des fonctions de modèle par défaut comme have_posts()

Questions connexes