WordPress: Verwendung von wp_insert_post() zum Ausfüllen von Feldern für benutzerdefinierte Beitragstypen

Lesezeit: 4 Minuten

Benutzeravatar von Manas Chaturvedi
Manas Chaturvedi

Ich habe einen benutzerdefinierten Beitragstyp erstellt wrestling und die entsprechenden benutzerdefinierten Felder mit erweiterten benutzerdefinierten Feldern erstellt. Jetzt wollte ich, dass die Benutzer dieses benutzerdefinierte Formular am Frontend ausfüllen, damit die Daten bei der Übermittlung automatisch im benutzerdefinierten Beitragstyp im Dashboard aktualisiert werden. Dazu habe ich eine benutzerdefinierte Seite erstellt und ihr eine benutzerdefinierte Vorlage zugewiesen, die das erforderliche Formular enthielt. Es gibt vier HTML-Formularfelder, die die Benutzer ausfüllen sollen, benannt name, venue, main_event und fee beziehungsweise.

Die benutzerdefinierten Formularfelder, die ich mit erweiterten benutzerdefinierten Feldern erstellt habe, sind benannt als promotion_name, venue, main_event_ und price beziehungsweise. Um nun die von den Benutzern am Frontend eingegebenen Daten in die benutzerdefinierten Beitragstypfelder im Dashboard zu füllen, habe ich versucht, die wp_insert_post() funktionieren wie folgt:

$post_information = array(
        'promotion_name' => $_POST['name'],
        'venue' => $_POST['venue'],
        'main_event_' => $_POST['main_event'],
        'price' => $_POST['fee'],
        'post_type' => 'wrestling',
    );

    wp_insert_post( $post_information );

Nachdem der Benutzer das Formular gesendet hat, erscheint jedoch ein neuer Eintrag (no_title) in meinem benutzerdefinierten Beitragstyp, aber die benutzerdefinierten Formularfelder sind immer noch leer (siehe Abbildungen unten:)

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Ich bin sicher, das liegt daran, dass ich die nicht verwende wp_insert_post() korrekt zum Aktualisieren benutzerdefinierter Beitragstypen. Hier würde ich mich sehr über Hilfe freuen. Vielen Dank.

PS: So habe ich meinen benutzerdefinierten Beitragstyp definiert functions.php:

<?php 
function wrestling_show_type()
{
    register_post_type('wrestling',
                    array('labels' => array('name' => 'Wrestling Shows', 'singular_name' => 'Wrestling Show'),
                        'public' => true,
                        'has_archive' => true,
                        'rewrite' => array('slug' => 'wrestling')));

    flush_rewrite_rules();
}
add_action('init', 'wrestling_show_type');
?>

Benutzeravatar von Caio Felipe Pereira
Caio Felipe Pereira

Wenn Sie ACF verwendet haben, sollten Sie deren API verwenden, um mit den Feldern zu interagieren. Es gibt eine Methode namens update_field() das macht genau das was du suchst. Diese Methode benötigt 3 Parameter:

update_field($field_key, $value, $post_id)

$field_key ist eine ID, die ACF jedem von Ihnen erstellten Feld zuweist. Dieses Bild aus ihrer eigenen Dokumentation zeigt Ihnen, wie Sie es bekommen:

So erhalten Sie den Feldschlüssel

Bearbeiten: $field_key Akzeptiert auch den Feldnamen.

$value und $post_id sind ziemlich einfach, sie stellen den Wert dar, mit dem Sie das Feld festlegen möchten, und den Beitrag, den Sie aktualisieren.

In Ihrem Fall sollten Sie etwas tun, um dies abzurufen $post_id. Zum Glück ist das was wp_insert_post() kehrt zurück. Sie können also Folgendes tun:

$post_information = array(
    //'promotion_name' => $_POST['name'],
    'post_type' => 'wrestling'
);

$postID = wp_insert_post( $post_information ); //here's the catch

Mit dem Ausweis ist dann alles einfach, einfach anrufen update_field() für jedes Feld, das Sie aktualisieren möchten.

update_field('whatever_field_key_for_venue_field', $_POST['venue'], $postID);
update_field('whatever_field_key_for_main_event_field', $_POST['main_event'], $postID);
update_field('whatever_field_key_for_fee_field', $_POST['fee'], $postID);

Im Grunde erstellen Sie also zuerst den Beitrag und aktualisieren ihn dann mit den Werten.

Ich habe diese Art von Sachen in der gemacht functions.php Datei, und es hat gut funktioniert. Nach allem, was ich gesehen habe, verwenden Sie diese Routine in einer Art Vorlagendatei. Ich denke, es wird gut funktionieren, Sie müssen nur sicherstellen, dass das ACF-Plugin aktiviert ist.

BEARBEITEN:

Ich habe die vergessen promotion_name aufstellen. Ich habe die Zeile darin kommentiert $post_information, da es nicht funktionieren wird. Du solltest benutzen update_field() stattdessen, genau wie die anderen 3.

update_field('whatever_field_key_for_promotion_name_field', $_POST['name'], $postID);

  • Ich habe es geschafft, meine Formularfelder mit dem zu aktualisieren add_post_meta() Funktion, die meiner Meinung nach genau der ähnlich ist update_field() Funktion, oder?

    – Manas Chaturvedi

    12. August 2015 um 12:03 Uhr

  • Ich denke, das tut es letztendlich, aber ich würde bei der Plugin-API bleiben, da sie konsistenter zu einem vom Plugin erstellten Feld ist. Wenn Sie verschiedene Arten von Feldern haben, z. B. WYSIWYG-Editoren oder möglicherweise Unterfelder, verwenden Sie add_post_meta() kann ziemlich knifflig werden, also warum nicht das Plugin die Arbeit für dich erledigen lassen?

    – Caio Felipe Pereira

    12. August 2015 um 12:11 Uhr

  • Oh, in Ordnung, ich werde versuchen, meinen Code zu ändern, diesmal mit der update_field() Methode statt. Vielen Dank.

    – Manas Chaturvedi

    12. August 2015 um 12:14 Uhr

  • Ja, lass mich wissen, ob du irgendwelche Probleme findest

    – Caio Felipe Pereira

    12. August 2015 um 12:15 Uhr

  • Hallo, aber wenn Sie auf localhost entwickeln und dann in die Produktion veröffentlichen, hat die Produktion unterschiedliche Schlüssel für dieselben Felder? Also würde ‘update_field’ abstürzen?

    – Jiro Matchonson

    5. Dezember 2018 um 12:30 Uhr

bramchis Benutzeravatar
Brachi

Es gibt eine Möglichkeit, benutzerdefinierte Felddaten direkt beim Erstellen eines Beitrags hinzuzufügen. Es wird in der erwähnt wp_insert_post() Dokumente. Übergeben Sie einfach ein Array mit benutzerdefinierten Feldschlüsseln und Werten an meta_input so was:

wp_insert_post([
  'post_status' => 'publish',
  'post_type'   => 'wrestling',
  'meta_input'  => [
    'my_custom_field_1' => 'beep',
    'my_custom_field_2' => 'boop',
  ]
]);

Ich untersuche diesen Ansatz, um ein Dutzend Datenbankaufrufe von update_field() zu vermeiden und ihn weniger ressourcenintensiv zu machen, aber ich muss noch beweisen, dass dieser Ansatz tatsächlich weniger Datenbankaufrufe im Hintergrund durchführt.

1400090cookie-checkWordPress: Verwendung von wp_insert_post() zum Ausfüllen von Feldern für benutzerdefinierte Beitragstypen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy