Ich verwende das Register Plus Redux-Plugin, um ein Registrierungsformular mit benutzerdefinierten Metadatenfeldern zu erweitern. Diese Felder werden unten auf jeder Seite mit Benutzerdatensätzen angezeigt und können mit get_the_author_meta abgerufen werden.
Außerdem kann ich im Benutzerfenster (der Listenansicht) Spalten erstellen und diese Spalten sortierbar machen. Das Problem ist, dass beim Klicken auf die benutzerdefinierte Spaltenüberschrift der Wert orderby = in der URL ignoriert wird. Anders ausgedrückt, die Abfrage, die die Listenansicht der Benutzer generiert, enthält anscheinend keine benutzerdefinierten Metadaten (z. B. ist möglicherweise eine Join-Anweisung erforderlich, wenn sich die Metadaten nicht an der für Benutzerdaten üblichen Stelle befinden?). Es fühlt sich an, als hätte ich einen Schritt verpasst.
Hier ist mein Code zum Erstellen der benutzerdefinierten Spalten:
//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);`
Und hier ist mein Code, um diese Spalten sortierbar zu machen:
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' );`
Irgendwelche Ideen, wie ich die Abfrage, die die Liste der Benutzer generiert, so aktualisieren kann, dass sie nach meinen benutzerdefinierten Feldern sortiert wird? Oder, wenn dies nicht das Problem ist, wie lassen Sie die benutzerdefinierten Spaltenüberschriften die Liste der Benutzer sortieren, wenn Sie darauf klicken?
Vielen Dank.
quelle
Antworten:
Meine erste Antwort war völlig falsch und ich schreibe sie komplett neu ...
Aber dank Milos Hinweis habe ich die Lösung hier gefunden:
http://wordpress.mcdspot.com/2011/05/24/search-admin-user-list-on-first-and-last-names/
Nach der Anpassung funktioniert dies bei mir mit 'Facebook' und 'Twitter'
author_meta
.quelle
Ich bin nicht sicher, ob es möglich ist, vielleicht durch Ändern der Abfrage über
pre_user_query
. Hier ist eine schnelle und schmutzige Funktion zum Anzeigen des Inhalts:quelle
Der einfachste Weg, dies meiner Meinung nach zu tun:
quelle
Wenn Ihre Metawerte nicht vollständig ausgefüllt sind (Nullen haben), wird durch die hervorragende Antwort von @ brasofilo eine Benutzerliste erstellt, in der Benutzer mit fehlenden meta_values-Werten weggelassen werden.
Die Lösung ist jedoch einfach. Mach einfach einen LEFT JOIN :
$user_search->query_from .= " LEFT JOIN {$wpdb->usermeta} m1 ON {$wpdb->users}.ID=m1.user_id AND (m1.meta_key='facebook')";
quelle
Ich konnte die Benutzersortierung einer benutzerdefinierten Spalte mithilfe des von Ihnen geposteten Codes und der von Ihnen geposteten Hooks erreichen, außer dass ich weder den Filter "Anfrage" verwendet habe noch eine zusätzliche Funktion "Bestellen nach" benötigte. Wordpress sortiert die Daten in der benutzerdefinierten Spalte in meinem Fall ordnungsgemäß nach dem numerischen Wert, den ich im Aktionsrückruf 'manage_users_custom_column' zurückgebe.
quelle