it-swarm.com.de

Order by meta_value_num DESC und meta_value ASC on WP 4.0

Ich habe einen benutzerdefinierten Post-Typ erstellt, nach dem ich bestellen möchte

  1. custom-field-1, der boolesch ist, sodass sein Wert entweder 1 oder 0 ist, in der Reihenfolge DESC (1 bis 0)
  2. custom-field-2, der Text enthält und bestellt werden soll ASC (von A bis Z)

Erste Frage:

Ein leistungsfähigerer ORDERBY-Parameter wurde in WordPress 4.0 eingeführt. Kann dies mit der neuen ORDERBY-Funktionalität erfolgen?

Wenn nicht, zweite Frage:

Was ist der beste Ansatz? Wie kann ich einen meta_query erstellen, um die Beiträge nach custom-field-1 in absteigender Reihenfolge und dann nach custom-field-2 in aufsteigender Reihenfolge zu sortieren?

Bearbeiten:

Oder wäre es eine Option, zwei Instanzen von WP_Query zu verwenden, eine für die Posts mit custom-field-1 value = '1 'und eine für die mit dem Wert 0?

Ich weiß, dass "Reihenfolge nach mehreren benutzerdefinierten Feldwerten" hier viel diskutiert wurde, aber ich fand keine ähnliche Frage, die ich anpassen konnte, als ich die Site zuvor durchsucht habe.

3
okiedokey

Obwohl der neue Parameter orderby in WP_Query großartig ist, unterstützt er nicht mehrere orderby für mehrere meta_key.

Ich habe ein paar Szenarien durchgespielt und mich sogar mit Trac und Make befasst und mir Folgendes ausgedacht

Keines der dieses Problem betreffenden Probleme wurde beantwortet. Aus diesen beiden Links geht auch hervor, dass es ein Problem gibt, das nach einem meta_key und einem anderen Feld wie beispielsweise dem Postdatum sortiert ist. Ich habe das noch nicht ausprobiert.

Ich denke wirklich, dass Sie hier zwei Möglichkeiten haben, ohne zwei Abfragen zu erstellen.

  • hacke mit dem posts_orderby filter wie von @s_ha_dum in seiner antwort beschrieben hier

  • Indem Sie PHP verwenden, um mit usort zu bestellen. Die Idee hier wäre, Ihre Anfrage nach einem meta_key zu sortieren und dann das Array der zurückgegebenen Posts ($ posts) zu nehmen und sie nach dem zweiten meta_key zu sortieren, bevor die Schleife beginnt. Sie können entweder den the_posts-Filter verwenden (denken Sie daran, den Filter zu entfernen, wenn Sie fertig sind) oder einfach den $posts-Wert in Ihrer Vorlage entfernen und ihn mit der neu angeordneten Reihe von Beiträgen festlegen, wenn Sie fertig sind

2
Pieter Goosen