query_posts / nach meta_key sortieren

  • Gelöst: query_posts / nach meta_key sortieren

    Hallo,

    ich sortiere meine Einträge nach einem custom field 'sortnr', welches lediglich eine Zahl zwischen 0 und 1000 beinhaltet.

    PHP
    <?php query_posts($query_string.'&orderby=meta_value&meta_key=sortnr&order=ASC&posts_per_page=10' ); ?>

    Solange die Zahlen zweistellig sind, wird richtig sortiert. Kommt jedoch eine dreistellige Zahl hinzu, gibt es ein Problem.

    Beispiel:

    10
    150
    160
    170
    20
    30
    40
    50

    Werden von den Zahlen nur die ersten 2 Stellen beachtet? Kann nach dreistelligen Zahlen gar nicht sortiert werden?

    Wäre super, wenn mir jemand weiterhelfen könnte.

    LG
    Philipp

    Make websites, not war! : )

    Einmal editiert, zuletzt von PhilippD (4. Januar 2010 um 18:22)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren


  • Die Sortierung ist logisch, da Text sortiert wird. Kannst das ja mal testen, in dem du 163 eingibst.
    Da es sich um Texte handelt gib die Werte so ein

    010
    020
    100
    ...

  • Danke für deine Antwort! Wie du schon gesagt hast, werden Werte ab 99 als String behandelt - das war mir neu.

    Habe noch ein bisschen im englischen Forum geforscht und eine weitere Lösung gefunden. Man muss in wp-includes/query.php an der Position 2218 folgendes verändern:

    PHP
    $orderby = $q['orderby'];
    		
    		
    		if (strpos($orderby,'meta_value') && $q['meta_key'] == 'sortnr') {$orderby = str_replace('meta_value','meta_value+0',$orderby);} else {}

    'meta_value+0' zwingt MySQL, die größeren Werte als Integer zu behandeln - funktioniert wunderbar. :)

    Make websites, not war! : )

  • Nicht erst ab 99. Das Gleiche wird dir passieren mit

    aus 2, 10 wird 10, 2

    Eine Änderung würde ich in der Datei wp-includes/query.php nicht machen. Beim nächsten WP-Update ist die Änderung weg, es sei denn, du wiederholst die Änderung dann wieder in der neuen Datei. Wie gesagt, ich rate davon ab Programmdateien zu verändern. Es wird mit der Zeit unübersichtlich und zeitaufwändig. Aber das muss jeder selbst wissen.

  • Super sache leute, gute arbeit! genau das suche ich.

    ich benutzte allerdings das costum_field nicht um meine Beiträge zu sortieren, sondern um bestimmte Artikel zu unterscheiden.

    diese haben z.b. Postleitzahlen, also immer 5 stellen.
    ich habe es probiert, aber ich kann keine mehrere meta_value eintragen:

    beispiel:

    PHP
    query_posts('&orderby=meta_value&meta_value=22045&meta_value=22046&&meta_value=22047&&meta_value=22048&meta_key=plz&order=DESC&showposts=' . $num . '&cat=' . $side_Adsense);

    ich möchte also alle posts anzeigen die im costum_field folgende PLZ haben: 22045,22046,22047,22048

    ... das geht aber natürlich nicht so leicht, das habe ich gemerkt und auch nicht wenn ich die PLZ mit kommer trenne!

    geht das den überhaupt!??

  • Ich habe mal ähnliches gemacht.
    mit query_posts lese ich alle aus, die einen meta_key haben und sortiere danach.
    Die Ausgabe wird dann mit einer if-Abfrage gefiltert.

  • danke für die Sehr schnelle und gute Antwort, damit habe ich nun nicht gerechnet!

    mit einer if schleiffe hätte ich es auch gerade gemacht, aber dachte das ich es auch schon beim auslesen erreichen kann. aber mit If geht das natürlich auch gut

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!