将默认管理列排序更改为ACF日期选择器字段

时间:2019-06-25 作者:Gavin

EDIT: 由于公开悬赏,我无法删除我的问题,但问题似乎是由我安装的“Post Types Order”插件引起的。我已将其设置为非顺序news post类型,但出于某种原因,它仍将其排序添加到主查询中。这是我的错误,在调试问题时应该始终禁用插件。

我正在尝试为自定义帖子类型设置列的默认排序news. 单击标题时,列的排序很好,但当您第一次访问帖子列表时,它将仅按默认排序(发布日期)进行排序。这是我的pre_get_posts 措施:

add_action( \'pre_get_posts\', function( $query ) {
    global $pagenow;

    if ( !is_admin() || $pagenow !== \'edit.php\' )
        return;

    $post_type = $query->get( \'post_type\' );
    $order_by = $query->get( \'orderby\' );

    if ( $post_type == \'news\' ) {
        if ( empty( $order_by ) )
            $order_by = \'news-date\';

        switch ( $order_by ) {
            case \'news-date\':
                $query->set( \'meta_key\', \'date\' );
                $query->set( \'orderby\', \'meta_value_num\' );
                break;
        }
    }
} );
通过单击标题手动排序后,URL变为edit.php?post_type=news&orderby=news-date&order=asc 所以我确信我所有的参数都匹配。

我尝试添加var_dump( $query ); 在设置查询后的switch语句中,查询包括更新的meta_keyorderby 值,因此我假设查询被正确修改,但它仍在执行默认排序。

我想也许date 由于某种原因(可能是插件)已经使用了meta键,所以我检查了wp_postmeta 数据库中的表,但只有名为date 是用ACF日期选择器设置的值,所以那里一切都很好。

希望我错过的只是一些愚蠢的东西。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

看起来问题是由我安装的“Post Types Order”插件引起的

是的,我相信是这样,因为您的代码实际上对我有用,但在我安装并激活plugin, 您的代码不再按预期工作。

我已将其设置为非顺序news post类型,但出于某种原因,它仍将其排序添加到主查询中。

我不知道您是如何设置的,但请尝试以下选项之一:

设置ignore_custom_sort (这是一种习俗WP_Query 参数)至true 像这样:

switch ( $order_by ) {
    case \'news-date\':
        $query->set( \'meta_key\', \'date\' );
        $query->set( \'orderby\', \'meta_value_num\' );
        $query->set( \'ignore_custom_sort\', true );
        break;
}
pto/posts_orderby/ignore 钩子以禁用插件的排序:

add_filter( \'pto/posts_orderby/ignore\', function( $ignore, $order_by, $query ){
    if ( \'lesson\' === $query->get( \'post_type\' ) ) {
        $ignore = true;
    }
    return $ignore;
}, 10, 3 );

相关推荐