Cum să obții articolele publicate între o dată specifică și ziua de azi?
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'
) );

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' );

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

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

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ă!

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?

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ă. :)

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'
);

Î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'
);
