WordPress Cómo agregar la clasificación de columnas personalizadas de administrador por valor de visualización

2 minutos de lectura

En WordPress, ¿hay alguna manera de hacer que una columna personalizada se pueda ordenar por el valor de visualización en lugar del meta_valor? Lo que quiero decir es que mi valor meta es un número, pero he manipulado ese número con un enlace existente para que sea una cadena. Me gustaría ordenar por esa cadena en lugar del número. Este es mi código de trabajo existente que lo ordenará bien, simplemente no estará en orden alfabético:

add_action('manage_resource_posts_custom_column', 'my_manage_resource_columns', 10, 2);
function my_manage_resource_columns($column_name, $id) {
    switch ($column_name) {
    case 'type':
        $id = get_the_ID();
        $par = get_field('resource_type',$id);
        $type = get_field('singular_name',$par);
        echo $type;
            break;
    default:
        break;
    }
} 

add_filter( "manage_edit-resource_sortable_columns", "my_last_modified_column_register_sortable" );
function my_last_modified_column_register_sortable( $columns ) {
    $columns["type"] = "type";
    return $columns;
}

add_filter( "request", "sort_column_by_modified" ); 
function sort_column_by_modified( $vars ){
    if ( isset( $vars["orderby"] ) && "type" == $vars["orderby"] && $_GET['post_type']=='resource') {
        $vars = array_merge( $vars, array(
            'meta_key' => 'resource_type',
            'orderby' => 'meta_value_num'
        ) );
    }
    return $vars;
}

Entonces puede ver dónde agrego el texto real para el nombre de la columna según el valor numérico en la base de datos. Se muestra bien. Solo necesito que se pueda ordenar por ese texto y no por el valor que representa. ¿Alguien sabe si esto es posible/cómo hacerlo?

Aquí hay una captura de pantalla de la columna tal como está ahora. Puede ver que, de hecho, están agrupados por tipo, pero es por orden numérico de la ID

ingrese la descripción de la imagen aquí

¡Gracias por adelantado!

Si desea ordenar una columna en más de un valor meta, utilizará el argumento meta_query para su algoritmo de ordenación. Para dar un ejemplo de cuándo desea ordenar en más de un parámetro. Digamos que tiene una lista de programas de TV ordenados por temporada y episodio. Ordenar solo por Episodio pondría todos los Episodios 1 juntos, etc., pero lo que realmente quiere, cuando ordena por Episodio también ordenar por Temporada-Episodio, ya que esto es más legible y comprensible para el usuario administrador.

Para lograr esto, en la función sort_column_by_modified, reemplace

$vars = array_merge( $vars, array(
        'meta_key' => 'resource_type',
        'orderby' => 'meta_value_num'
    ) );

con

$vars = array_merge( $vars, array(
        'meta_query' => array(
              array(
                  'meta_key' => 'season',  // the column name
                  'order_by_num' => 'meta_value_num'
              ),
              array(
                  'meta_key' => 'episode', // the column name
                  'order_by_num' => 'meta_value_num'
              ),
         )
    ) );

Para otros tipos de tipos, ajuste su meta_query apropiadamente.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad