Colunas classificáveis customizadas ordenadas por meta-valor?

6

Não sei por que minha função classificável não classifica meus "eventos" como uma pós-meta personalizada. Eu tenho um tipo de pós-personalizado chamado wr_event … Eu tenho minhas colunas personalizadas configuradas e minha pós-meta é mostrada nas colunas, exatamente como eu quero. O identificador "Event-Date" ainda já é um link classificável! Única coisa se eu clicar no link de classificação para a data do evento que a lista não atualiza. A função é acionada quando vejo a página recarregando, mas não classifica nada.

Mesmo que o URL alterne entre esses dois estados, se eu clicar no link de classificação…

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

No entanto, a lista sempre parece a mesma!

Aqui está o meu código inteiro para as colunas personalizadas:

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;
}
    
por mathiregister 17.04.2012 / 18:31

1 resposta

6

É porque você está verificando 'event_date' == $vars['event_date'] não 'event_date' == $vars['orderby] .

Mas não use o filtro request . Em vez disso:

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');  
    }  
} 

... e não defina manualmente o order , pois você não verá a diferença ao alternar entre ASC / DESC.

    
por Stephen Harris 17.04.2012 / 18:37