Programmgesteuertes Veröffentlichen eines Posts (benutzerdefinierter Post-Typ) mit benutzerdefinierten Feldern

17

Ich habe einen benutzerdefinierten Beitragstyp "Teilnehmer" mit vielen benutzerdefinierten Feldern. Ich habe auch ein Formular mit entsprechenden Eingabefeldern, die der Benutzer ausfüllen kann. Wenn er das Formular absendet, möchte ich, dass mit jedem benutzerdefinierten Feld, das den vom Benutzer ausgewählten Wert enthält, ein neuer Beitrag erstellt wird.

Ist es möglich und wenn ja, wie?

drake035
quelle

Antworten:

29

Verwenden Sie wp_insert_post () und add_post_meta () wie folgt :

// insert the post and set the category
$post_id = wp_insert_post(array (
    'post_type' => 'your_post_type',
    'post_title' => $your_title,
    'post_content' => $your_content,
    'post_status' => 'publish',
    'comment_status' => 'closed',   // if you prefer
    'ping_status' => 'closed',      // if you prefer
));

if ($post_id) {
    // insert post meta
    add_post_meta($post_id, '_your_custom_1', $custom1);
    add_post_meta($post_id, '_your_custom_2', $custom2);
    add_post_meta($post_id, '_your_custom_3', $custom3);
}
webaware
quelle
Funktioniert auch unter WordPress 4.4.2 einwandfrei :)!
jave.web
Heutzutage können Sie einfach Metadateien über den meta_input-Schlüssel in wp_insert_post hinzufügen:'meta_input' => ['_your_custom_1' => $custom1, '_your_custom_2' => custom2]
Andreas
Guter Punkt @Andreas, ich schlage vor, dass Sie das als neue Antwort hinzufügen und es anfangen lassen, Stimmen zu bekommen. Es sollte jetzt die Antwort sein.
webaware
Danke @webaware :)
Andreas
Funktioniert auch unter WordPress 5.1 einwandfrei :)!
Ich bin die dümmste Person
6

Zusätzlich zu der großartigen Antwort von @webaware oben, kann dies seit WordPress 4.4.0 über den Aufruf von wp_insert_post erledigt werden :

$post_id = wp_insert_post(array (
    'post_content' => $content,
    'post_title' => $title,
    'post_type' => 'your_custom_post_type',
    'post_status' => 'publish',

    // some simple key / value array
    'meta_input' => array(
        'your_custom_key1' => 'your_custom_value1',
        'your_custom_key2' => 'your_custom_value2'
        // and so on ;)
    )
));

if ($post_id) {
    // it worked :)
}
Andreas
quelle
4

Dies kann mit dem Gravity Forms-Plugin ganz einfach erreicht werden . Sie können ein Formular erstellen, das einen benutzerdefinierten Beitragstyp im Backend ausfüllt. Dieser Beitrag kann als Entwurf oder als veröffentlicht angezeigt werden. Kein Problem, benutzerdefinierte Felder hinzuzufügen. In meinem Fall habe ich damit Kundenreferenzen gesammelt.

markcbain
quelle
Diese Lösung gefällt mir besonders, wenn Sie sie an einen Kunden liefern, der das Formular selbst verwalten möchte.
webaware