自定义可排序列是否按元值排序?

时间:2012-04-17 作者:mathiregister

我不知道为什么我的可排序函数不会对我的“事件”和自定义post meta进行排序。我有一个名为wr_event… 我已经设置了我的自定义列,我的post meta显示在这些列中,就像我想要的那样。“事件日期”句柄甚至已经是可排序的链接!只有当我点击事件日期的排序链接时,列表才不会更新。当我看到页面正在重新加载时,函数被激发,但它没有对任何内容进行排序。

即使url在这两种状态之间切换,如果我单击排序链接…

http://url/wp-admin/edit.php?post_type=wr_event&orderby=event_date&order=desc

http://url/wp-admin/edit.php?post_type=wr_event&orderby=event_date&order=asc

然而,列表看起来总是一样的!

以下是自定义列的完整代码:

add_filter("manage_edit-wr_event_columns", "wr_event_edit_columns");

function wr_event_edit_columns($columns) {
    $columns = array(
        "cb" => "<input type=\\"checkbox\\" />",
        "title" => "Event",
        "event_date" => "Event Date",
        "type" => "Type",
    );

    return $columns;
}

add_action("manage_posts_custom_column",  "event_custom_columns");

function event_custom_columns($column) {
    global $post;

    switch ($column) {
        case "event_date":
        $custom = get_post_custom();
        echo $custom[\'_wr_event_date\'][0];
        break;
        case "type":
        echo get_the_term_list($post->ID, \'event_type\', \'\', \', \',\'\');
        break;
    }
}

add_filter("manage_edit-wr_event_sortable_columns", "wr_event_sortable_columns");   

function wr_event_sortable_columns( $columns ) {
    $columns[\'event_date\'] = \'event_date\';
    return $columns;
}

add_filter("request", "event_column_orderby");

function event_column_orderby( $vars ) {
    if ( isset( $vars[\'orderby\'] ) && \'event_date\' == $vars[\'event_date\'] ) {
        $vars = array_merge( $vars,
            array(
                \'meta_key\'  => \'_wr_event_date\',
                \'orderby\'   => \'meta_value_num\',
                \'order\'     => \'asc\'
            )
        );
    }

    return $vars;
}

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

因为你在检查\'event_date\' == $vars[\'event_date\']\'event_date\' == $vars[\'orderby].

但不要使用request 滤器而是:

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

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

    if( \'event_date\' == $orderby ) {  
        $query->set(\'meta_key\',\'_wr_event_date\');  
        $query->set(\'orderby\',\'meta_value_num\');  
    }  
} 
。。。并且不要手动设置order 因为在ASC/DESC之间切换时,您不会看到差异。

结束

相关推荐

使用Apply_Filters(‘the_Content...?)时,内容缓存在哪里?

以下代码块给出了一个累积结果:foreach($sections as $section) { $content_post = get_post($section->ID); $content = $content_post->post_content; $content = apply_filters(\'the_content\', $content); echo $content; } 如果我抓住了$con