Laufende Nummer erstellen und verlinken

  • Hallo Gemeinde,

    ich bin ein totale WP-Neuling. Leider habe ich gleich eine Nicht-Standard-Aufgabe bekommen, für ein Blog.
    Dieses soll nämlich nicht nach Datum, sondern nach einer Laufenden Nummer sortiert werden.

    Ich muss es also irgendwie schaffen, jedem Eintrag (manuell) eine Nummer zu verpassen. Diese Nummern müssen dann in der Seitenleiste, ähnlich den Schlagworten zB. erscheinen. Mit klick auf die jeweilige Nummer komme ich dann zum entsprechenden Beitrag.

    Ich kann schon benutzerdefinierte Felder auslesen und anzeigen - bislang wird dann aber nur die "aktuelle" Nummer in der Sidebar angezeigt und nicht alle vorhandenen. Wie ich diese dann verlinke, weiß ich auch noch nicht.

    Template tags sind mir auch kein Fremdwort mehr, die Grundprinzipien der Widget und Pluginerstellung habe ich nachgelesen - aber ich komme momentan nicht weiter.

    Es wäre nett, wenn mir jemand auf die Sprünge helfen könnte.

    herzlichst,
    Chuonrad

    • 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

  • hm, danke für den Tipp. Das hatte ich auch schon überlegt. leider habe ich nichts gefunden, um diese ID manuell ändern zu können. (So, wie zB. die Autorenzuordnung). Leider muss das sein, weil die ID nicht unbedingt der gewünschten Nummer entspricht.

    Apropos Autorenzuordnung: noch ne Frage: lassen sich einem Beitrag mehrere Autoren zuweisen?

  • Für die Artikelnummerierung könnte man das Feld menu_order in der Tabelle wp_posts "mißbrauchen". Dieses wird zwar für Seiten und Bilder verwendet, ist bei Artikeln aber derzeit ungenutzt und immer 0. Eine Sortierung nach menu_order ist auch einfach.

    Für die Eingabe müßte man sich mit einem Plugin im Backend reinhängen. Und für die Links mußte man eine Funktion get_permalink_by_menu_order oder sowas schreiben.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Hm. Das überfordert mich momentan. Da werd ich mich wohl mal tiefer einlesen müssen. Warum kann man ein Benutzerdefiniertes Feld nicht nutzen?
    Gibt es dafür einen Grund?

    (Und die Autorenfrage möchte ich auch nochmal stellen) :)

  • Vielen Dank, Monika. Co-Author war das Stichwort, auf das ich nicht gekommen bin, bei meiner Suche. Danke, das funktioniert prima.

    Das andere Problem ist natürlich etwas hartnäckiger.
    Bevor ich Deinem Link gefolgt bin, habe ich schon ein Query versucht und in
    der index eingebaut - hat zum Teil auch funktioniert. Jetzt versuche ich gerade, irgendwie mit diesem query ein Widget zu bauen, um die Ausgabe in der Sidebar zu haben ... darf ich nochmal nachhaken, wenn ich nicht weiter komme?

  • fast ...

    Hallo,

    also, nach einigen Tagen trial and error, bin ich ein gutes Stück weiter.
    Ich habe jetzt zumindest schonmal die entsprechenden Werte der Felder in der Seitenleiste. diese werden auch verlinkt...

    PHP
    echo '<a href="?p='.$post->ID.'">';
    echo get_post_meta($post->ID, $key, true).'</a>';

    allerdings ist mein Plugin/Widget nur auf der Hauptseite zu sehen - und nicht in der Single-View. Woran liegt das denn nun wieder?

    Einmal editiert, zuletzt von Chuonrad (13. Oktober 2009 um 16:49)

  • weiter ...

    Ok. Das Problem wurde auch gelöst. Bin regelrecht begeistert von mir :).
    Jetzt muss ich die nächste Etappe in Angriff nehmen:
    Meine Laufende Nummer setzt sich aus zwei Teilen zusammen:

    Jahr.Nummer, im Format: YY.XXX

    Das Jahr nehme ich aus dem Datumsfeld, die Nummer aus einem Benutzerdefiniertem Feld.

    Derzeit habe ich es geschafft, dass meine Plugin/Widget das Jahr anzeigt, dahinter die laufenden Nummern. Also in etwa so:
    YY: xx1.xx2.xx3.xxn

    PHP
    the_time('y');
      foreach ($pageposts as $post): 
        setup_postdata($post); 
        $key="Laufende Nr."; 
        echo '<a href="?p='.$post->ID.'">';
        echo ".";
        echo get_post_meta($post->ID, $key, true).'</a>';
      endforeach;

    Das ist aber momentan fast nur ein Fake. Wie schaffe ich es denn, dass das Jahr korrekt angezeigt wird, also wenn sich das Jahr ändert .. also so:

    Y1: xx1.xx2.xx3.xxn
    Y2: xx1.xx2.xx3...
    etc.

    Ich schätze, ich muss zwei Schleifen bauen. In der äußeren werden die Jahre durchlaufen und angezeigt, in der inneren (die jetzt schon existiert) dann die einzelnen Nummern.
    Ich vermute, mit "the_time()" komme ich da nicht weiter.

    herzlichst,
    ch.

  • ach, es ist so befreiend und inspirierend, hier zu schreiben. :)

    Meine Schleifen sehen grad so aus:

    Was passiert: es werden alle Beiträge ausgelesen, deren Jahr wird angezeigt, hinten dran werden dann die laufenden Nummern aus dem benutzerdefiniertem Feld ausgegeben. Ja logisch soweit.

    Aber eigentlich möchte ich ja, das das jeweilige Jahr nur EINMAL ausgegeben wird - und NUR die zu diesem Jahr gehörenden Beiträge angezeigt werden. Dann folgt das nächste Jahr etc.

    Danke fürs Lesen. Weitere Einträge in Kürze.
    Der eine oder andere Hinweis darf bitte gern erteilt werden. :)

    ch.

  • Alleinunterhalter

    Na fein, ich komme mir recht einsam vor hier :)

    Ich habe jetzt eine Lösung und bin fast fertig:

    Irgendwie kommt mir das aber reichlich unelegant vor - wenn der eine oder andere hier noch ein wenig für Eleganz sorgen könnte, wäre das prima.
    Die Sortierung bereitet mir allerdings noch Bauchschmerzen. Vertausche ich beide ORDER Argumente, wird logisch richtig sortiert. So wie es dasteht und wie ich es benötige, wird nur das erste Argument ausgewertet. Ich meine, gelesen zu haben, das es möglicherweise daran liegt, das ein TEXT-Feld sortiert werden soll. Was kann ich tun, um eine richtige Sortierung zu erlangen?

    herzlichst,
    ch.

  • Zumindest ist eine Sortierung nach meta_key weitestgehend sinnlos, da der meta_key ja immer gleich ist, nämlich 'Laufende Nr.'.
    Was genau soll da eingentlich insgesamt rauskommen?

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Ah ja! Klingt logisch. :) Die Laufende Nummer enthält Werte wie, 001, 002, 003 ... die sollen eben in der Reihenfolge kommen. Momentan habe ich zB. 003, 001 stehen.

    Einmal editiert, zuletzt von Chuonrad (16. Oktober 2009 um 13:48)

  • Und wozu dann die Sortierung nach post_date? Sind denn die laufenden Nummern nicht chronologisch vergeben?
    Es sollte eine Sortierung nur nach laufender Nummer (meta_value) ausreichend sein, denke ich.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Verzeihung, vielleicht war ich nicht deutlich genug.
    Meine Nummern setzen sich aus zwei Teilen zusammen:

    1. YY = Jahrzweistellig, ergibt sich aus dem "Post Date"
    2. XXX = individuell vergebene laufende Nummer.

    Es kann durchaus vorkommen, das Nummer 003 eher eingegeben wird, als Nummer 001, zB.. Daher gibt es hier keine "automatische" Zuordnung.

    Die Ausgabe in der Sidebar erfolgt dann nach dem Schema:

    Y1:XX1, XX2, XX3
    Y2:XX1, XX2, XX3

    zB. Beiträge aus 2008: 08:001,002,003
    dann aus 2009: 09:001,002,003,004,005 etc.

    Ich kann also NICHT zuerst nach laufender Nummer sortieren, da es ja mehere "Laufende Nummern" 001 geben wird ...

    Meine Sortierung erfolgt daher erst nach Jahr (YY, post_date) und anschließen nach "Laufender Nr." (XXX, meta_value). Nur, es klappt nicht, wie ich mir das denke.

  • Das liegt daran, das bei der Sortierung wie oben post_date Vorrang hat, und nur bei gleichem post_date der zweite Sortierausdruck wirksam wird.
    Du kannst aber die MySQL-Funktion YEAR verwenden, dann sollte das mit der von Dir gewünschten Reihenfolge klappen. SQL etwa so:

    SQL
    SELECT wp.*, YEAR(wp.post_date) as post_year
    FROM wp_posts wp, wp_postmeta wm
    WHERE wp.ID = wm.post_id 
    AND wm.meta_key = 'Laufende Nr.'
    ORDER BY post_year, wm.meta_key


    Ich verwende auch liebr kurze Tabellen-Aliase, daher nur wp und wm :-)

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Vielen Dank!

    ...nachdem ich "meta_key", wie Du vordem geraten hast, mit "meta_value" ersetzt habe, funktioniert es! Vielen Dank.
    Interessant. Wieder was gelernt. :)

Jetzt mitmachen!

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