it-swarm.com.de

Wie man einen benutzerdefinierten Beitragstyp anhand der Punktzahl bewertet

Ich verwende ein benutzerdefiniertes Feld mit dem Namen casino_rank_score, in dem eine Punktbewertung gespeichert ist, beispielsweise 4.9.

Alle Casinos werden in benutzerdefinierten Post-Casinos gespeichert.

Ich muss herausfinden, wie ich eine Rangliste wie RANKED #2 of 350 CASINOS von points bekomme.

Wordpress speichert diese Daten in der Tabelle wp_postmeta.

Ich kann alle Punkte von benutzerdefinierten Beitragstypen aus allen Casinos abrufen und in Arrays ablegen, aber was muss ich als Nächstes mit benutzerdefiniertem PHP tun, um die Rangfolge zu sortieren?.

Ich habe dies gelesen , aber es gibt unterschiedliche Strukturen und Daten.

1
Foxsk8

Sie können einen WP_Query ausführen, um alle Posts von post_type casinos abzurufen und sie mit dem benutzerdefinierten Feldwert casino_rank_score zu sortieren. Dann können Sie es weiterverarbeiten, um Ränge anzuzeigen.

$args = array(
    'post_type' => 'casinos',
    'meta_key' => 'casino_rank_score',
    'orderby' => 'meta_value_num',
    'posts_per_page' => 350,
    'ignore_sticky_posts' => 1,
);

$my_query = new WP_Query( $args );

Wenn Sie nur einen Beitrag wie RANKED #2 of 350 CASINOS anzeigen müssen, können Sie Ihre Ergebnisse mit 'posts_per_page' => 1, einschränken und um 1 'offset' => 1, versetzen. Auf diese Weise erhalten Sie das zweitplatzierte Casino.

EDIT

Um einen Rang zu erhalten, müssen Sie eine benutzerdefinierte Abfrage ausführen. Und so können Sie den Rang des aktuellen Beitrags in Ihrer benutzerdefinierten Abfrage ermitteln. Es ist optimiert, weil wir nur den Ausweis zurückgeben. Es werden keine Post-Daten angefordert, daher ist es ziemlich schnell. Um es jedoch noch weiter zu optimieren, können Sie diese Abfrage mit Transients_API für einige Stunden oder Tage zwischenspeichern.

$args = array(
    'post_type' => 'casinos',
    'meta_key' => 'casino_rank_score',
    'orderby' => 'meta_value_num',
    'posts_per_page' => -1,
    'ignore_sticky_posts' => 1,
    'fields' => 'ids',
);

$my_query = new WP_Query( $args );

global $post;

$total_casinos = $my_query->post_count;
$casinos_rank = array_search( $post->ID, $my_query->posts ) + 1;

echo "RANKED #" . $casinos_rank . " of " . $total_casinos . " CASINOS";

Dies ist tested und working

2
Robert hue