Attachments auf Datenbankebene erzeugen und Posts zuordnen

  • Hallo allerseits,

    ich bin neu hier und habe mich registriert nachdem die Suchfunktion mir leider keine Lösung zu meinem Problem aufgezeigt hat.
    Es geht um Folgendes:
    Ich tüftle gerade an einem PHP/MySQL Skript, das mir aus einem anderweitig strukturiertem System eine analoge Wordpress-Struktur erzeugt. Bei den Posts selbst habe ich keine Probleme, d.h. das Mapping zwischen Kategorien und Posts von alt nach Wordpress erledigt mein Skript ohne Probleme. Es geht um Attachments.

    Alter Post wird aus einer mySQL Tabelle in die wp_post übertragen mittels INSERT.
    An diesem Post hängen x attachments die ich zunächst mittels php copy() nach wordpress gemäß folgendem Schema übertrage (Ziel: uploads/JJJJ/mm/Dateiname.xyz)

    Im nächsten Schritt erzeuge ich für das Attachment einen Eintrag in der "wp_post" Tabelle. Die Felder post_type, post_mime_type kann ich ebenfalls problemlos generieren.
    Nun scheitert es allerdings an der Zuordnung zwischen Post und attachment. Diese werden soweit ich sehen kann in der "wp_postmeta" Tabelle gepflegt. Hierfür werden für das Attachment jeweils zwei Datensätze erzeugt. Einer mit dem "meta_key" Wert => "_wp_attached_file", "meta_value" => "Speicherort_des_files".
    Der zweite Eintrag beinhaltet den meta_key Wert "_wp_attachment_metadata" sowie den "meta_value" Wert mit serialisierten Meta Daten.
    1. Frage hierzu, stehen die serialisierten Daten zu einem Attachment lediglich bei Image-Dateien zur Verfügung?

    2. Frage:
    Die Zuordnung zwischen Post und Attachment wird anscheinend ebenfalls über die "wp_postmeta" Tabelle gepflegt. Ich verstehe jedoch nicht, gemäß welchem Muster der "meta_value" Wert des jeweiligen Posts Referenz nimmt zu dem/den Attachment/s. Oder einfach gesagt, wie liest wordpress die Referenzen zwischen Posts und Attachments aus.

    Für eine Antwort bin ich sehr dankbar.

    VG

    peeayoo

    • 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 Zuordnung eines Attachment zu einem Post erfolgt direkt im Datensatz des Attachment in der Tabelle wp_posts. Das Feld post_status erhält den Wert 'inherit' und in Feld post_parent steht die ID des Artikels, zu dem das Attachment gehört.

    Wenn irgendwie möglich ist es ohnehin besser, nicht direkt die Datenbank zu befüllen, sondern die Wordpressfunktionen wie wp_insert_post und wp_insert_attachment zu verwenden. Dann sorgt WP selbst dafür, das Felder und Metadaten richtig eingetragen werden.

    Beispiele und Anregungen findet man in den Importmodulen, die Wordpress bereits mitliefert (/wp-admin/import/).

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte :) klicken.

  • Hi,

    danke dir für die Info.
    Bei einem Import von 2000 Posts aus einer nicht-WP Umgebung ist das mit dem manuellen hochschieben leider nicht praktikabel.
    Der Punkt bzgl. "post_parent" war es dann auch schon.
    Das entsprechende Befüllen des post_parent values im Attachment Datensatz sorgt dafür, dass es in der Media Sektion keine verwaisten Anhänge gibt. Zusätzlich ist es jedoch noch anscheinend notwendig in der wp_postmeta Tabelle für jedes Attachment einen Datensatz anzulegen, der folgendem Muster entspricht:

    INSERT into wp_postmeta ('post_id', 'meta_key', 'meta_value') VALUES ('%id_des_text_posts%', '_attachments', '%hashvalue%');

    der Hashvalue wiederum setzt sich wie folgt zusammen:
    code:
    <?php
    $attachment_details = array(
    'id' => $id_des_attachments,
    'title' => str_replace( '"', '&quot;', 'dateiname' ),
    'caption' => str_replace( '"', '&quot;', 'dateiname' ),
    'order' => $reihenfolge_integer
    );

    $hash = base64_encode( serialize($attachment_details));

    ?>

    Für alle die es interessiert.

    VG

    peeayoo

Jetzt mitmachen!

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