Estoy usando el complemento Register Plus Redux para aumentar un formulario de registro con campos de metadatos personalizados. Estos campos se muestran en la parte inferior de la página de detalles de registro de cada usuario y se pueden recuperar con get_the_author_meta.
Además, puedo crear columnas en el panel Usuario (la vista de lista) y hacer que estas columnas se puedan ordenar. El problema es que, cuando hago clic en el encabezado de la columna personalizada, el valor orderby = en la URL parece ignorarse. Dicho de otra manera, parece que la consulta que genera la vista de lista de usuarios no incluye los metadatos personalizados (por ejemplo, ¿tal vez requiera una declaración de unión si los metadatos no están en el lugar habitual para los datos del usuario?). Parece que he perdido un paso.
Aquí está mi código para crear las columnas personalizadas:
//add columns to User panel list page
function add_user_columns( $defaults ) {
$defaults['company'] = __('Company', 'user-column');
$defaults['title'] = __('Title', 'user-column');
return $defaults;
}
function add_custom_user_columns($value, $column_name, $id) {
if( $column_name == 'company' ) {
return get_the_author_meta( 'company_name', $id );
}
if( $column_name == 'title' ) {
return get_the_author_meta( 'titlefunction', $id );
}
}
add_action('manage_users_custom_column', 'add_custom_user_columns', 15, 3);
add_filter('manage_users_columns', 'add_user_columns', 15, 1);`
Y aquí está mi código para hacer que estas columnas se puedan ordenar:
function user_sortable_columns( $columns ) {
$columns['company'] = 'Company';
return $columns;
}
add_filter( 'manage_users_sortable_columns', 'user_sortable_columns' );
function user_column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && 'company' == $vars['orderby'] ) {
$vars = array_merge( $vars, array(
'meta_key' => 'company',
'orderby' => 'meta_value',
'order' => 'asc'
) );
}
return $vars;
}
add_filter( 'request', 'user_column_orderby' );`
¿Alguna idea de cómo puedo actualizar la consulta que genera la lista de usuarios para que incluya la clasificación por mis campos personalizados? O, si ese no es el problema, ¿cómo hacer que los encabezados de columna personalizados ordenen la lista de usuarios al hacer clic?
Gracias.
fuente
Respuestas:
Mi primera respuesta fue completamente fuera de lugar y la estoy reescribiendo por completo ...
Pero gracias a la sugerencia de Milo, encontré la solución aquí:
http://wordpress.mcdspot.com/2011/05/24/search-admin-user-list-on-first-and-last-names/
Después de adaptarlo, esto funciona para mí con 'facebook' y 'twitter'
author_meta
.fuente
No estoy seguro de que sea posible, tal vez modificando la consulta a través de
pre_user_query
. Aquí hay una función rápida y sucia para ver su contenido:fuente
La forma más sencilla de hacerlo en mi opinión:
fuente
Si sus meta valores no están completamente poblados (tiene valores nulos), la excelente respuesta de @ brasofilo producirá una lista de usuarios que omite a los usuarios con valores faltantes de meta_valores.
Sin embargo, la solución es fácil. Solo haz una IZQUIERDA UNIRSE :
$user_search->query_from .= " LEFT JOIN {$wpdb->usermeta} m1 ON {$wpdb->users}.ID=m1.user_id AND (m1.meta_key='facebook')";
fuente
Pude lograr que el usuario clasifique una columna personalizada utilizando el código y los ganchos que ha publicado, excepto que no utilicé el filtro 'solicitud', ni necesité una función adicional 'ordenar por'. Wordpress ordena correctamente los datos en la columna personalizada en mi caso por el valor numérico que devuelvo en la devolución de llamada de acción 'manage_users_custom_column'.
fuente