高级自定义字段:使用自定义字段对自定义列进行排序仅按日期排序

时间:2016-03-17 作者:Acidon

我有一个自定义的帖子类型-“members”。在高级自定义字段(AFC)的帮助下,我创建了一个包含5个字段的字段组,并将该组分配给我的“成员”帖子类型。

我根据本文创建了“成员”的自定义管理列–http://www.elliotcondon.com/advanced-custom-fields-admin-custom-columns/

我创建了列:

function members_columns($columns){
        $columns = array(
                \'cb\'        => \'<input type="checkbox" />\',
                \'title\'     => \'Name\',
                \'picture\'   => \'Picture\',
                \'department\'=> \'Department\',
                \'sex\'       => \'Sex\',
                \'featured\'  => \'Fixed\',
                \'staff_order\'=> \'Order\',
                \'date\'      => \'Date\',
        );
        return $columns;
    }
用数据填充它们:

function members_custom_columns($column){
        global $post;
        if($column == \'picture\'){
            echo wp_get_attachment_image( get_field(\'picture\', $post->ID), array(50,50) );
        }
        elseif($column == \'featured\'){
            if(get_field(\'featured\')){
                echo \'Yes\';
            } else {
                echo \'---\';
            }
        }
        elseif($column == \'staff_order\'){
            echo get_field(\'staff_order\');
        }
        elseif($column == \'department\'){
            echo get_field(\'department\');
        }
        elseif($column == \'sex\'){
            echo get_field(\'sex\');
        }
    }
并使其可排序:

function members_column_register_sortable( $columns ){
        $columns[\'featured\'] = \'featured\';
        $columns[\'staff_order\'] = \'staff_order\';
        $columns[\'department\'] = \'department\';
        return $columns;
}
并在我的插件文件中包含挂钩:

add_action("manage_posts_custom_column", "members_custom_columns");
add_filter("manage_edit-members_columns", "members_columns");
add_filter("manage_edit-members_sortable_columns", members_column_register_sortable" );
此字段组中对应的字段类型为:

“特色”-对/错

“staff\\u订单”-编号

“部门”-选择

Result:

从视觉上看,它看起来应该是这样的:所有正确填充列的数据,包括图片、所需列都可以排序,当我单击标题时,会出现一些排序。

The problem:

出于某种原因,排序只对原始的“标题”和“日期”字段有效。每当我按添加的3列(“特色”、“staff\\u order”或“department”)中的任何一列排序时,它都会按错误的顺序排序。

经过实验和测试,很明显,每次这3个自定义列中的任何一个都是按发布顺序排序的,即按“日期”排序的。

还有一件事需要注意,尽管排序顺序错误,但url参数似乎每次都是正确的,例如,如果我按“部门”排序,url是“/edit.php?post\\u type=members&orderby=department&order=asc”,但它按“日期”排序。

当我在我的wp\\U Posteta上运行相同的查询以查看数据是否以正确的顺序返回时,一切都正常。

请帮忙!

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

这似乎是因为WordPress不理解您需要通过特定的post meta进行订购,除非您指定它。

因此,在我的案例中,添加此选项修复了排序问题:

add_action( \'pre_get_posts\', \'custom_orderby\' );
    function custom_orderby( $query ) {
        if( ! is_admin() )
            return;

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

        if( \'featured\' == $orderby ) {
            $query->set(\'meta_key\',\'featured\');
            $query->set(\'orderby\',\'meta_value\');
        }
        elseif ( \'staff_order\' == $orderby ) {
            $query->set(\'meta_key\',\'staff_order\');
            $query->set(\'orderby\',\'meta_value_num\');
        }
        elseif ( \'department\' == $orderby ) {
            $query->set(\'meta_key\',\'department\');
            $query->set(\'orderby\',\'meta_value\');
        }
    }
在Advanced Custom Fields社区成员的帮助下解决了此问题-

http://support.advancedcustomfields.com/forums/topic/sortin-custom-columns-with-custom-fields-sorts-only-by-date/

通过阅读

http://code.tutsplus.com/articles/quick-tip-make-your-custom-column-sortable--wp-25095

相关推荐

Admin multiple column sorting

这个问题似乎很简单,我很惊讶我在搜索谷歌时没有找到太多答案。到目前为止,我只找到了一个pro插件。我只想能够在管理区域中按多个列进行排序。例如,在页面部分,有三列:标题、作者和日期。我需要做些什么来按作者排序,然后对第一个作者,按标题按字母顺序排列他们的所有页面(这是假设作者已经可以自己排序,使用类似manage\\u edit-page\\u sortable\\u columns过滤器的东西)?我更喜欢用函数中的代码来实现这一点。php文件,而不是插件,但任何东西都很好。