Cum să obții articolele publicate între o dată specifică și ziua de azi?

14 mai 2012, 15:59:24
Vizualizări: 76.8K
Voturi: 16

Există vreo modalitate de a obține articolele publicate între o dată specifică și ziua de azi folosind query_posts()?

Exemplu: Toate articolele publicate începând cu 2012-04-01

Mulțumesc

EDITARE:

Cum pot adăuga filtrul de dată la această interogare Query Posts?

query_posts( array(  
    array('post'),
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array('post-format-image')
        )
    ),
    'cat' => '-173',
    'post_status' => 'publish'
) );
2
Comentarii

Nu folosiți query posts! :)

Stephen Harris Stephen Harris
14 mai 2012 16:21:10

Nu folosiți query_posts(). Verificați asta -> http://wordpress.stackexchange.com/a/1755/7890

moraleida moraleida
14 mai 2012 16:22:18
Toate răspunsurile la întrebare 3
5
36

ACTUALIZARE 23 decembrie 2014

Există o metodă mai bună folosind proprietatea date_query a clasei WP_Query:

$args = array(
    'post_type' => 'post', 
    'tax_query' => array(
        array( 
            'taxonomy'  => 'post_format',
            'field'     => 'slug',
            'terms'     => array( 'post-format-image' )
        )
    ),
    'cat'           => '-173',
    'post_status'   => 'publish',
    'date_query'    => array(
        'column'  => 'post_date',
        'after'   => '- 30 days'
    )
);
$query = new WP_Query( $args );

RĂSPUNS VECHI

Folosește Parametrii de Timp în WP_Query()

Citând un exemplu din Codex:

Returnează postările din ultimele 30 de zile:

// Aceasta preia interogarea ta curentă, căreia i se va adăuga partea de filtrare.
$query_string = array(
    'post_type' => 'post', 
    'tax_query' => array(
        array(
            'taxonomy'  => 'post_format',
            'field'     => 'slug',
            'terms'     => array( 'post-format-image' )
        )
    ),
    'cat'           => '-173',
    'post_status'   => 'publish'
);

// Creează o nouă funcție de filtrare care va adăuga clauza WHERE la interogare
function filter_where( $where = '' ) {
    // postări din ultimele 30 de zile
    $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

Editare (ca răspuns la întrebarea actualizată a OP).

Evită folosirea query_posts. Poți folosi tehnica de mai sus pentru a modifica interogarea principală (sub rezerva unor condiționale suplimentare - este pagina principală, este o pagină numită 'foobar' etc.):

function wpse52070_filter_where( $where = '' , $query ) {
   if( $query->is_main_query() && is_page( 'foobar' ) ){
      // postări din ultimele 30 de zile
      $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
   }

    return $where;
}
add_filter( 'posts_where', 'wpse52070_filter_where' );
14 mai 2012 16:08:15
Comentarii

Bine! Deci filtrul este acum în $query_string. Dar cum funcționează cu argumentele mele din Query_Posts? (Verifică editarea mea @Moraleida)

Steffi Steffi
14 mai 2012 16:16:02

@Steffi - vezi răspunsul actualizat. Sper să nu te superi pentru adăugare, Moraleida.

Stephen Harris Stephen Harris
14 mai 2012 16:30:18

tocmai am adăugat interogarea ta curentă, așa că poți renunța imediat la query_posts. :) Și mulțumesc @StephenHarris pentru actualizarea rapidă!

moraleida moraleida
14 mai 2012 16:32:14

Mulțumesc @moraleida ! Uimitor ! Doar un lucru. Ai spus: "Evită să folosești query_posts." Dar este mai bine să folosești query_posts() în fișierele de șabloane (cum ar fi home.php) decât new WP_Query(), nu?

Steffi Steffi
14 mai 2012 16:43:28

Nu chiar. query_posts ar trebui folosit doar pentru a modifica bucla principală - și mulți susțin că nici măcar atunci (există și filtrul the pre_get_posts pentru asta). De multe ori constat că folosesc doar WP_Query sau get_posts pentru toate interogările mele, deoarece sunt independente și pot fi folosite de mai multe ori fără a interfera cu altceva. Verifică răspunsurile legate din comentariile tale pentru o explicație detaliată. :)

moraleida moraleida
14 mai 2012 17:00:51
0

Dacă dorești să obții postări între două date, atunci folosește parametrii before și after în parametrul date_query,

$query_string = array(
  'post_type' => 'post', 
  'date_query' => array(
    'column' => 'post_date',
    'after' => '2012-04-01',
    'before' => '2012-04-30' 
  ),
  'tax_query' => array(
      array( 
         'taxonomy' => 'post_format',
         'field' => 'slug',
         'terms' => array('post-format-image')
      )
  ),
  'cat' => '-173',
  'post_status' => 'publish'
);
27 mai 2019 06:31:35
0

Începând cu versiunea 3.7, poți folosi date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

Deci argumentele transmise ar arăta astfel:

$query_string = array(
      'post_type' => 'post', 
      'date_query' => array(
        'after' => '2012-04-01' 
      ),
      'tax_query' => array(
          array( 
             'taxonomy' => 'post_format',
             'field' => 'slug',
             'terms' => array('post-format-image')
          )
      ),
      'cat' => '-173',
      'post_status' => 'publish'
);
1 aug. 2014 00:41:16