2017-10-28 1 views
3

Ich habe eine benutzerdefinierte Beitragstyp institutions, die assoziierte Benutzer sind.Erhalten Sie alle Benutzer mit einem benutzerdefinierten Beitragstyp in WordPress verbunden

Immer wenn ich einen neuen Benutzer hinzufüge, kann ich über Advanced Custom Fields Plugin auswählen, welcher Institution er/sie zugeordnet ist.

Nun, da der Aufbau fertig ist, ich versuche, eine Liste aller Benutzer mit der Institution, die ich zur Zeit (single-institutions.php)

I WP_Query() können nicht

bin der Anzeige zugeordnet angezeigt werden, weil es mir nicht erlauben, zu erhalten die Benutzer und ich kann wp_list_authors() nicht verwenden, weil es die meta_query nicht zulassen wird.

Also bin ich links mit der alten mysql Abfrage.

Aber ich bin mir nicht sicher, wie es weiter geht, weil ich mehrere Tabellen abfragen muss, um das richtige Ergebnis zu erhalten.

wp_users: ID 
wp_usermeta 
    user_id 
    meta_key: institution 
    meta_value: a:1:{i:0;s:4:"2875";} // "2875" is the ID of the institution the user is associated with 

Wie kann ich dies mit einer direkten MySQL-Abfrage erreichen?

EDIT: Ich habe stattdessen WP_User_Query() gewechselt, ich hatte keine Ahnung, dass es existiert. Aber ich bin nicht sicher, was in meta_value

$args = array(
    'role'   => 'Author', 
    'order'   => 'ASC', 
    'orderby'  => 'display_name', 
    'who'   => 'authors', 
    'exclude'  => [1, 7], 
    'count_total' => true, 
    'meta_key'  => 'institution', 
    'meta_value'  => $post->ID 
); 

// The User Query 
$user_query = new WP_User_Query($args); 

// The User Loop 
if (! empty($user_query->results)) { 
    foreach ($user_query->results as $user) { 
    echo $user->display_name . '<br>'; 
    } 
} else { 
    // no users found 
} 

Gerade jetzt setzen, wird nichts angezeigt. Wenn ich "meta_value" aus der Abfrage entferne, werden auf allen Seiten alle Benutzer angezeigt, die einer Institution zugeordnet sind.

Wie kann ich es eingrenzen, um die Institution ID ($post->ID) Ich bin derzeit im Blick?

Dies ist der Wert meta_value Spalte in wp_usermeta Tabelle. Es ist serialisiert. Muss ich etwas Spezielles tun, um die ID am Ende zu erhalten?

a:1:{i:0;s:4:"2875";} 

Antwort

2

sollten Sie WP_User_Query verwenden, die WP_Query ähnlich ist. Genauer gesagt, in Ihrem Fall, schauen Sie sich die Custom Field Parameters und senden Sie es an die ID der Institution.

+0

Danke, das war wirklich hilfreich. Hatte keine Ahnung 'WP_User_Query()' existiert. Ich bin mir jedoch nicht sicher, was ich für 'meta_value' verwenden soll - ich habe meinen Beitrag aktualisiert, wenn Sie bitte einen Blick darauf werfen. – Halnex

+0

Es hat funktioniert. Ich musste 'LIKE' anstelle von' = 'für' meta_compare' verwenden. Vielen Dank. – Halnex

+1

@Halnex Ah, richtig, ich habe die Tatsache übersehen, dass dies ein serialisiertes Array war. Beachten Sie hier einige Vorbehalte: 1) Eine Meta-Abfrage mit einem 'LIKE'-Operator kann teuer sein, wenn Sie viele Daten haben und die Website-Leistung beeinträchtigen können. Es ist in der Regel in Ordnung, aber wenn Sie Probleme haben, kann dies etwas zu sehen sein. 2) Sie sollten doppelte Anführungszeichen in Ihren 'meta_value' einfügen, zum Beispiel' 'meta_value' => '"'. $ Post-> ID. '"' '. Auf diese Weise vermeiden Sie die Auswahl von Werten wie "19", wenn Sie "9" usw. auswählen wollten. –

Verwandte Themen