【问题标题】:Order by custom field value not working for acf date field按自定义字段值排序不适用于 acf 日期字段
【发布时间】:2018-04-25 16:24:26
【问题描述】:

我有自定义的帖子类型事件,其中包含自定义字段 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:除了order_by之外,sql查询都是正确的。

【问题讨论】:

  • 您按 ORDER BY wp_posts.post_date ASC 订购。对吗?
  • 我没用过,我使用的是 meta_value 的 order by,但是请求将 order by 返回到 post_date。
  • 试试这个 ORDER BY wp_posts.event_date ASC
  • 我这里没有使用 SQL 查询,我使用的是 wp_query 并且使用了相同的 order_by =>'event_date'。
  • 我认为 wp_posts.meta_value 应该是 wp_postmeta.value 仍然您的查询不正确。复制您的查询并直接在 phpmyadmin 中检查它

标签: php wordpress advanced-custom-fields


【解决方案1】:

您在元查询中缺少'type' =&gt; '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
);

【讨论】:

  • 仍然不工作,元查询工作正常,但 orderby 不工作。
【解决方案2】:

在您的 orderby 类型中使用 '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
);

【讨论】:

  • 你能分享一个保存在数据库中的“event_date”值吗
  • 它被保存为 event_date => 20171231。无论如何,谢谢。将order_by改为orderby即可解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2017-07-06
  • 2020-09-20
  • 1970-01-01
  • 2016-06-10
  • 2017-07-30
相关资源
最近更新 更多