Nummer generieren und in Custom Field einsetzen

  • Hallo,

    ich könnte eure Hilfe bei einem kleinen Problem gebrauchen. Ich habe ein Formular gebaut, mit dem ich Posts (Custom Post Type 'bewerber') aus dem Front-End erstelle. Es funktioniert alles wunderbar, bis auf eine Kleinigkeit:

    Ich möchte folgendes ergänzen:

    Wenn das Formular abgesendet wird und der Post erstellt wird, sollen Posts von diesem Typ loopen und alle vorhandenen Strings dieser Posts vom custom field 'bewerbernummer' in ein Array gespeichert werden - z.B. (000000001, 000000002, 000000003). Dann soll der größte Wert plus 1 gerechnet werden und der String im neuen Post in das custom field 'bewerbernummer' gespeichert werden.

    Hier mein Code:

    • 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

  • Gibt es einen bestimmten Grund (ausser dass es zwingend fortlaufende Nummern sein müssen), warum Du nicht einfach [FONT=Courier New]$pid[/FONT], also den Post ID, den Du von [FONT=Courier New]wp_insert_post([/FONT]) bekommst, dafür verwendest und den bei der Ausgabe später irgendwo dann erst passend formatierst, z.B. via [FONT=Courier New]echo str_pad( $post->ID, 8, '0', STR_PAD_LEFT );[/FONT]

    Weiterhin sollte der Medien-Codeblock erst nach dem Einfügen des Posts kommen, mit [FONT=Courier New]media_handle_upload( $file, [COLOR=#ff0000]$pid[/COLOR] )[/FONT], das verknüpft die Unterlagen dann auch automatisch mit dem Post und du kannst sie (ggf. auch mehrere) später via [FONT=Courier New]get_attached_media(..)[/FONT] auslesen. Das derzeit ins Leere gehende [FONT=Courier New]update_post_meta( [COLOR=#ff0000]$pid[/COLOR], ...[/FONT], kann man sich dann auch gleich sparen.

    9 Mal editiert, zuletzt von b3317133 (30. Mai 2018 um 13:36)

  • Was ist wo der Nachteil?

    Der o.g. aktuelle Code ist überkomplizert und auch fehlerhaft, er fügt erst Medien ein, ordnet die zweimal einem nicht existierenden Post-ID $new_post zu und speichert die Medien-ID dann extra als eigenes Feld im neu erstellten Post.

    Wenn man die Funktionen von WordPress korrekt verwendet, ist die Zuordnung automatisch vorhanden, ein eigenes Feld im Post nicht mehr nötig, in dieser Reihenfolge:

    Code
    $pid = wp_insert_post(..);
    media_handle_upload( $file, $pid );

    Später bei der Anzeige o.ä. nimmt man den Post ID als Bewerbernummer und bekommt die Anhänge via get_attached_media(..).

  • Das eigene Feld brauche ich aber. Ich habe ein Custom Post Type angelegt, das nur Bewerber aufführt (ohne Editor etc) mit Feldern wie Vornahme, Nachname, Bewerbungsunterlagen etc.. Diese Felder werden auch auch keiner Stelle ausgegeben, sondern ausschließlich im Admin Bereich eingesehen.

    Die Bewerbernummer möchte ich nach eigener Range anlegen und nicht nach der ID.

    Vielleicht merkst du, dass ich kein PHP-Entwickler bin, sondern eher Analphabet, der einer Freundin einen gefallen tut. Wie sich anhört, muss ich anscheinend nur etwas entfernen und etwas anderes umsortieren. Richtig?

  • Du füllst Custom Fields mit dem Befehl:

    $softskills = sanitize_text_field( $_POST['softskills'] );
    update_post_meta( $post->ID, 'Name des Custom Fields, ZB softskills', $softskills);

  • Wie wird im CPT denn der ID der Unterlagen genutzt? Da steht dann eine Zahl, und dann? Wenn die Medien richtig zugeordnet sind, wäre die Vernüpfung z.B. unter "Medien" in der Spalte Verknüpfung sichtbar.

    Die aktuelle Lösung kann man nicht einfach nur umsortieren, weil Du die Unterlagen ID mit beim Post Einfügen verwendest, allerdings beim Einfügen der Unterlagen als Post ID eine Variable verwendest, die es da noch gar nicht gibt. Da wären dann noch kleine weitere Anpassungen nötig. Das solltest Du aber eigentlich selbst basteln, denn wir hier können nicht wissen, was warum wie wichtig für Dein Projekt ist. Den richtigen Ablauf habe ich bereits beschrieben, falls die Unterlagen ID trotzdem unbedingt mit im Post erscheinen soll, würde man das so erweitern:

    Code
    $pid = wp_insert_post(..);
    $attach_id = $media_handle_upload( $file, $pid );
    update_post_meta( $pid, 'bewerbungsunterlagen', $attach_id );

    Für eine eigene fortlaufende Range beginnend mit 1 könnte man z.B. die WordPress Options API und dieses Code-Snippet verwenden:

    Code
    $bewerbernummer = get_option( 'naechste_bewerber_id', 1 );
    update_option( 'naechste_bewerber_id', $bewerbernummer + 1 );


    Die führenden Nullen kann man dann immer noch hinzufügen, wenn man sie wo braucht.

Jetzt mitmachen!

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