Ordnen Sie eine WP_Query nach einem Metawert zu, wobei der Wert ein Array ist

Ich habe eine benutzerdefinierte WordPress-Abfrage:

$args = array( 'posts_per_page' => 2, 'meta_key' => 'pworks_popular_posts', 'paged' => $page_nr ); $query = new WP_Query($args); if($query->have_posts()) { while($query->have_posts()) { $query->the_post(); $pworks_post_meta = get_post_meta(get_the_ID(), 'pworks_popular_posts', true); $pworks_post_list[get_the_ID()] = $pworks_post_meta['Post visited']; } } 

Ich benutze diese Methode, um ein Array von Post-IDs und Post-Besuche zu sortieren, die ich dann mit arsort sortiere und eine Liste von Posts nach der Anzahl der Besuche anzeigen, die sie bekommen haben:

 arsort($pworks_post_list); 

Ich erkannte jedoch, dass die Paginierung ein Albtraum sein wird, wenn ich es weiterhin so mache, da es keine Möglichkeit gibt, zu einer bestimmten Seite der sortierten Ergebnisse zu gelangen, nur zu den unsortierten.

Um dies zu erreichen, muss ich meine Posts mit meta_value bestellen und die arsort() Methode arsort() .

Das Problem ist – der Meta-Wert ist ein Array, das so aussieht (ich habe es so gemacht, weil ich wahrscheinlich später mehr Felder zu diesem Array hinzufügen werde):

 array(1) { ["Post visited"]=> int(0) } 

Gibt es eine Möglichkeit, die Abfrage von diesem Array “Post besuchte” in WP_Query zu bestellen?

Ich würde Ihre Hilfe sehr schätzen.

Solutions Collecting From Web of "Ordnen Sie eine WP_Query nach einem Metawert zu, wobei der Wert ein Array ist"

Auf Abfrageebene? Nicht möglich.

{db_prefix}_postmeta hat nur ein Feld für den Wert. WP serialisiert Arrays, bevor sie eingefügt und deserialisiert werden, nachdem sie aus sind. Sie haben also drei Möglichkeiten:

  1. Wenn Sie diese Sortierung wirklich auf Abfrageebene (Paginierung, vielleicht?) custom_post_meta , müssen Sie Ihre Informationsarchitektur überdenken und beginnen, für jedes Feld, nach dem Sie sortieren möchten, ein eigenes Feld custom_post_meta zu verwenden.

  2. Vergessen Sie das Sortieren.

  3. Wenn Ihre Anzahl an Objekten begrenzt ist und sie begrenzt bleibt, können Sie sie alle mit ( posts_per_page=-1 ) posts_per_page=-1 und sie mit array_multisort() sortieren. Wie Sie vielleicht erwarten, wird dies die Seite etwas verlangsamen (abhängig von der Gesamtzahl der Beiträge, die diese bestimmte custom_post_meta ).

Als Variante zu Option 1 sollten Sie aus performancesgründen, abhängig von der Anzahl der Elemente und der Komplexität der Daten, in Erwägung ziehen, custom_post_meta überhaupt nicht zu verwenden, sondern in einer separaten benutzerdefinierten Tabelle zu speichern.