2017-04-09 44 views
6

Ograniczam moje zapytanie, aby użyć postu z wystawy sprzed 6 miesięcy, który działa dobrze.Zapytanie data post_meta zamiast post_date_gmt

Ale potrzebuję, aby była oparta na dacie, która znajduje się w tabeli post_meta zamiast "post_date_gmt".

W moim przypadku mam meta_keys nazywane są payment_date i wartości są oczywiście data jak 31-10-2016 na przykład.

$months_ago = 6; 
$args = array(
'date_query' => array(
    array(
     'column' => 'post_date_gmt', 
     'after' => $months_ago . ' months ago', 
     ) 
    ), 
'numberposts' => -1 
); 

Odpowiedz

2

Pierwszą rzeczą pierwszych date_query prac nad post_date_gmt. Jeśli chcesz, aby wysyłał zapytania do postów z pól meta, musisz użyć meta_query.

Oto przykładowy kod:

$months_ago = 6; 
$args = [ 
    //... 
    //... 
    'posts_per_page' => -1, // Unlimited posts 
    //... 
    //... 
    'meta_query' => [ 
     'relation' => 'AND', 
     [ 
      'key' => 'payment_date', 
      'value' => date('d-m-Y', strtotime($months_ago . ' months ago')), //<-- Converting date into your custom date format 
      'compare' => '>', //you can also use <=, >=, <, etc.. 
      'type' => 'DATE' 
     ], 
    ] 
]; 

$query = new WP_Query($args); 

if ($query->have_posts()) : 
    /* Start the Loop */ 
    while ($query->have_posts()) : $query->the_post(); 

    //you post 

    endwhile; 
endif; 

Powyższy kod powinien pracować dla Ciebie.

Powiązane Pytanie:

Nadzieja to pomaga!

3

Sprawdź to tutaj: https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

Jeśli przejdziesz przykłady, zobaczysz:

Wyświetl posty gdzie klucz niestandardowe pole jest data set, a wartość pola jest zwyczaj teraz. Wyświetla tylko posty, których data nie minęła.

$args = array(
    'post_type' => 'event', 
    'meta_key'  => 'event_date', 
    'meta_value' => date("Ymd"), // change to how "event date" is stored 
    'meta_compare' => '>', 
); 
$query = new WP_Query($args); 

W twoim przypadku można umieścić coś takiego: date("dmY", strtotime('6 months ago'))

1

Spróbuj ten kod:

$sixmonthagodate = date("d-m-Y", strtotime('-6 Months')); 

$args = array(
    'post_type' => 'post', 
    'posts_per_page' => -1, 
    'meta_key'  => 'payment_date', 
    'meta_value' => $sixmonthagodate, 
    'meta_compare' => '>', 
); 
$query = new WP_Query($args); 

czek, że jeśli post_type jest prawdziwe w witrynie WordPress.