簡體   English   中英

按自定義字段值排序不適用於ACF日期字段

[英]Order by custom field value not working for acf date field

我有具有自定義字段event_date的自定義帖子類型事件。 此字段的日期格式設置為Ymd。

我正在嘗試按event_date的順序獲取帖子

這是按該順序拉出帖子的代碼

$today = date('Ymd');

$args = array (
    'post_type'             => array( 'event' ),
    'posts_per_page'        => '-1',
    'order'                 => 'ASC',
    'orderby'              =>'meta_value', // also tried having meta_value_num but that didn't worked as well
    'meta_key'              =>'event_date',
    'meta_query' => array(
        array(
            'key'       => 'event_date',
            'compare'   => '>=',
            'value'     => $today,
        )
    ),
    'suppress_filters' => true
);
/*
global $wp_filter;
var_dump( $wp_filter['posts_orderby'] );die;
This returns NULL as well
*/


    $query = new WP_Query( $args );
    echo '<pre>';
    var_dump($query->request);die;

但是$ query-> request比我提供的查詢顯示ORDER BY為post_date。 這是請求的轉儲

string(681) "SELECT   wp_posts.* FROM wp_posts  INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )  INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1  AND ( 
  wp_posts.ID NOT IN (
                SELECT object_id
                FROM wp_term_relationships
                WHERE term_taxonomy_id IN (11)
            )
) AND ( 
  wp_postmeta.meta_key = 'event_date' 
  AND 
  ( 
    ( mt1.meta_key = 'event_date' AND mt1.meta_value >= '20171113' )
  )
) AND wp_posts.post_type = 'event' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date ASC "

無法在event_date之前訂購。 我究竟做錯了什么?? 甚至嘗試過

remove_all_filters('posts_orderby');

在wp_query之前仍然是相同的結果。

最后:謝謝大家的友好回答,最終通過在我的查詢中將order_by更改為orderby來解決了。 感謝@Prasanna Venkatesh讓我簽入phpmyadmin。 運行phpmyadmin中的代碼並進行修復。 PS:sql查詢是正確的,除了order_by。

您在元查詢中缺少'type' => 'DATE'

$args = array (
    'post_type'             => array( 'event' ),
    'posts_per_page'        => '-1',
    'order'                 => 'ASC',
    'orderby'              =>'meta_value', // also tried having meta_value_num but that didn't worked as well
    'meta_key'              =>'event_date',
    'meta_query' => array(
        array(
            'key'       => 'event_date',
            'compare'   => '>=',
            'value'     => $today,
            'type'      => 'DATE'
        )
    ),
    'suppress_filters' => true
);

在訂單類型中使用“ meta_value_num”,然后

$args = array (
    'post_type'             => array( 'event' ),
    'posts_per_page'        => -1,
    'meta_key'              => 'event_date',
    'orderby'               => 'meta_value_num',
    'order'                 => 'ASC',
    'meta_query' => array(
        array(
            'key'       => 'event_date',
            'compare'   => '>=',
            'value'     => $today,
            'type'      => 'NUMERIC'
        )
    ),
    'suppress_filters' => true
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM