it-swarm.com.de

Benutzerdefinierte WP_Query-Bestellung nach post_meta und (author) user_meta

Ich habe ein Problem, das ich auf Google und anderswo nicht finden konnte. Um das Problem in den Kontext zu stellen. Ich erstelle eine WordPress-Site, auf der Benutzer ihre Tutorliste für die Abgabe von Tutorials einstellen können, und ich implementiere das Bewertungssystem der Tutoren, die sie selbst und ihre Zuhörer sind. Ich habe alsotutor_listingpost type und jedertutor_listinghat einen 'post_score' Metawert und jeder Tutor (user who setzt seine Tutorials) hatuser_metavalue mit dem Namen 'user_points'.

Also brauche ich ein WP_Query, das alle veröffentlichten Tutor-Listen aus der Datenbank holt, aber sortiert nach (post_score+user_points). Nur zur Hervorhebung 'post_score' ist einpost_metadespost_typetutor_listing/ und 'user_points' istuser_metades Autors dieses Beitrags (tutor_listing). Auch ich brauche diesen Wert, um in der Schleife zu zeigen.

Ich kann alle tutor_listing von bekommen

$args = array(
    'post_type' => 'job_listing',
    'post_status' => 'publish'
);
$query = new WP_Query( $args );

Ich kann das Ergebnis aus der benutzerdefinierten WordPress-SQL-Abfrage wie folgt erhalten:

SELECT p1.ID, p1.post_author, p1.post_title, p1.post_date, (um1.meta_value + pm1.meta_value) AS total_score
FROM $wpdb->posts p1
    JOIN $wpdb->users u1 ON (p1.post_author = u1.ID)
    JOIN $wpdb->usermeta um1 ON (um1.user_id = u1.ID)
    JOIN $wpdb->postmeta pm1 ON (pm1.post_id = p1.ID)
WHERE p1.post_type = 'tutor_listing'
AND p1.post_status = 'publish'
AND um1.meta_key = 'user_points'
AND pm1.meta_key = 'post_score'";

Kann WP_Query eine solche Funktionalität bereitstellen? Ich brauche WP_Query, um alle zusätzlichen Funktionen wie Paginierung usw. zu nutzen. Oder gibt es eine Möglichkeit, wie ich das gesamte Ergebnis mit meinem benutzerdefinierten SQL-Objekt WP_Query geben könnte?

Vielen Dank

5

In WordPress 4.0 konnten Sie mehrere orderby-Parameter angeben und deren Reihenfolge unabhängig voneinander festlegen.

Wie es geht? Nehmen Sie einfach mehrere Referenzen vor. Hier ist eine Möglichkeit, dies zu tun.

$args = array(
    'orderby' = > array(
        'title' => 'ASC',
        'date' => 'DESC',
    )
);

Erfahren Sie hier mehr ...

Dies ist aber erst seit WordPress 4.2 mit Meta-Werten möglich. Werfen Sie einen Blick auf diesen Beitrag.

1
Fleuv

Sie können wpdb verwenden und dennoch Paginierungsfunktionen erhalten. Hier ist eine gute Antwort zum Thema:

WordPress Paginate $ wpdb-> get_results

0
RiotAct