Ich versuche nach diesem Tutorial einen benutzerdefinierten Beitragstyp einzurichten . Allerdings bin ich ein bisschen verwirrt, wie / wo implementiert werden soll update_post_meta()
. Das Tutorial schlägt folgendes Muster vor:
add_action('save_post', 'save_my_metadata');
function save_my_metadata()
{
global $post;
update_post_meta($post->ID, 'my_metadata', $_POST['my_metadata']);
}
Das funktioniert, hat aber den unglücklichen Effekt, dass jedem Post diese Metadaten hinzugefügt werden, unabhängig davon, ob er zu diesem benutzerdefinierten Typ gehört oder nicht.
Ich habe das oben functions.php
Genannte eingefügt und vermute, dass dies Teil des Problems sein könnte. Ich schätze, ich muss die Aktion 'save_post' so einschränken, dass sie nur für Posts meines benutzerdefinierten Typs ausgelöst wird.
custom-post-types
Bobby Jack
quelle
quelle
Antworten:
Das sollte funktionieren. Ersetzen Sie einfach 'your_post_type' durch den Namen des Post-Typs. Wenig bekannte Tatsache: Der Haken 'save_post' übergibt die ID des Posts als Argument.
BEARBEITEN
Ich habe die Funktion aktualisiert, um Jan's Kommentar widerzuspiegeln. Danke Jan!
quelle
Wenn Sie mehrere Beitragstypen verarbeiten möchten, empfehle ich eine grundlegende switch-Anweisung:
Die Fälle sind im Grunde die gleichen wie
if($post->post_type) == 'post_type_1') {}
, erfordern jedoch nicht mehrere if-else-Blöcke. Derdefault
Block im Schalter behandelt Fälle, in denen der Beitragstyp nicht in Ihrem benutzerdefinierten Satz enthalten ist.quelle
@John P Bloch und @EAMann haben bereits großartige Antworten gegeben, daher meine zusätzlich:
Das bedeutet natürlich, dass Sie eine benutzerdefinierte Metabox benötigen, um auch die Felder bearbeiten zu können. Hier ist ein Bearbeitungsbildschirm für den Kontext:
save_{$post_type}_post
" lauten . für einenmovie
posttyp wäre essave_movie_post
. Folgendes müsstest du zurfunctions.php
Datei deines Themas oder in einem Plugin hinzufügen :Damit könnten Sie dann Ihren ursprünglichen Code wie folgt umschreiben (einschließlich des Unterstrich-Tricks von # 1 oben):
quelle
Persönlich bevorzuge ich das folgende Muster, um benutzerdefinierte Meta-Handler zu Beitragstypen hinzuzufügen. Mit dem folgenden Befehl können Sie die Meta-Unterstützung zu einem Beitragstyp hinzufügen, indem Sie einfach den Unterstützungsschlüssel ('subtitle' im folgenden Beispiel) zum Unterstützungsarray für den Beitragstyp hinzufügen, indem Sie add_post_type_support ('my_post_type', 'subtitle') aufrufen.
Hoffentlich wird so etwas bald in den Kern aufgenommen.
quelle
Prüfen Sie vor dem Aktualisieren, ob der aktuelle Beitrag Ihrem Beitragstyp entspricht. Das würde sicherstellen, dass Sie es nicht für alle Posts speichern.
Sie sollten auch die Eingabe überprüfen (die in Ihrem Beispiel fehlt) und sich darüber im Klaren sein, dass Sie die Aktion möglicherweise nur hinzufügen, wenn dieser Beitragstyp aktiv ist. In diesem Fall müssen Sie später nicht mehr nach diesem Post-Typ suchen.
Einen Beitrag erhalten Typ:
get_post_type()
oder$post->post_type;
quelle
Ich kann das nicht zum Laufen bringen - nicht sicher, was ich falsch mache - aber ich versuche, post_updated hook anstelle von save_post zu verwenden, da ich möchte, dass diese Werte eingefügt werden, nachdem der Beitrag aktualisiert wurde, damit ich Werte aus den anderen benutzerdefinierten Feldern abrufen kann .
quelle