2016-05-01 6 views
0

Ich habe einige benutzerdefinierte Sortieroptionen für das Mitgliederverzeichnis von buddypress implementiert. Das Problem, mit dem ich ein Problem habe, ist nach Nachname sortiert (ein xprofile-Feld). Wenn ich die Ergebnisse der Abfrage auf dem Bildschirm print_r bin, sind die Benutzer-IDs in der Reihenfolge, in der ich sie anzeigen möchte, aber wenn ich die Seite besuche, sind die Mitglieder nicht in dieser Reihenfolge. Auf bp_ajax_querystring lesen Ich sehe, dass Sie ORDER und ORDERBY übergeben können, aber alles, was ich versucht habe, funktioniert nicht. Die Mitglieder sollten in alphabetischer Reihenfolge nach Nachnamen angezeigt werden.Buddypress ORDER BY benutzerdefinierte Sortieroption für Mitglieder Verzeichnis

Hier ist das Stück Code mit der Abfrage.

if($ch_querystring['type'] == 'alphabetical-last'){ 

     global $wpdb; 

     $field_id = 518; //Last name field ID 

     $query = "SELECT user_id FROM " . $wpdb->prefix . "bp_xprofile_data WHERE field_id = " . $field_id . " ORDER BY " . $wpdb->prefix . "bp_xprofile_data.value ASC"; 

     $custom_ids = $wpdb->get_col($query); 

     // convert the array to a csv string 
     $user_str = implode(",", $custom_ids); 

     echo '<pre>'; 
     print_r($user_str); //Prints the ID's I would like the members to be displayed in 
     echo '</pre>'; 

     $ch_querystring['include'] = $user_str; 
     //$ch_querystring['type'] = 'alphabetical'; 
     $ch_querystring['per_page'] = 500; 
     $ch_querystring['exclude'] = '1,1101,1030'; 
     //$ch_querystring['orderby'] = "ORDER BY FIELD(value," . $ch_querystring['include'] . ")"; //Doesnt Work 
     //$ch_querystring['order'] = 'DESC'; //ASC and DESC doesnt work 
     echo '<pre>'; 
     print_r($ch_querystring); 
     echo '</pre>'; 

     return $ch_querystring; 

    } 

Denn hier Debuggen ist, was $ch_querystring kehrt:

Array 
(
    [type] => alphabetical-last 
    [action] => alphabetical-last 
    [scope] => all 
    [page] => 1 
    [user_id] => 0 
    [search_terms] => 
    [exclude] => 1,1101,1030 
    [per_page] => 500 
    [include] => 1511,1499,1477,1483,1,1512,1510,1482,1503,1514,1498,1502,1506,1484,1479,1492,1497,1488,1495,1508,1475,1481,1501,1515,1478,1491,1490,1505,1487,1509,1480,1507,1485,1493,1513,1500,1516,1496,1476,1489,1504,1494,1486,1474 
    [orderby] => ORDER BY FIELD(value,1511,1499,1477,1483,1,1512,1510,1482,1503,1514,1498,1502,1506,1484,1479,1492,1497,1488,1495,1508,1475,1481,1501,1515,1478,1491,1490,1505,1487,1509,1480,1507,1485,1493,1513,1500,1516,1496,1476,1489,1504,1494,1486,1474) 
) 

Hier ist ein Link es

Antwort

0

ich eine Hilfsfunktion hilft zu einem paste with the full code in Fall erforderlich, um die Abfrage mit etwas ähnliches zu sortieren dies: https://buddypress.org/support/topic/sort-user-list-by-last-name/

//Helper for sorting by last name 
function alphabetize_by_last_name($bp_user_query) { 
    if ('alphabetical-last' == $bp_user_query->query_vars['type']) 
     $bp_user_query->uid_clauses['orderby'] = "ORDER BY substring_index(u.display_name, ' ', -1)"; 
} 
add_action ('bp_pre_user_query', 'alphabetize_by_last_name'); 
Verwandte Themen