Anwendungsfall:
Ich habe einen Beitragstyp, der sich auf eine Musikshow bezieht. Die "Show-Zeit" wird durch das Post-Veröffentlichungsdatum erfasst, das auf einen späteren Zeitpunkt festgelegt ist. Ich habe eine Funktion gefunden, die zukünftig datierte Blog-Posts annimmt und das Datum verlässt, den Post jedoch als beim Speichern veröffentlicht markiert, aber nicht in der Lage war, herauszufinden, wie er für einen benutzerdefinierten Post-Typ angepasst werden kann.
Die Funktion ist unten.
<?php
function setup_future_hook() {
// Replace native future_post function with replacement
remove_action('future_post','show', '_future_post_hook');
add_action('future_post', 'show', 'publish_future_post_now');
}
function publish_future_post_now($id) {
// Set new post's post_status to "publish" rather than "future."
wp_publish_post($id);
}
add_action('init', 'setup_future_hook');
?>
custom-post-types
init
kurzgefasst
quelle
quelle
remove_action
undadd_action
Anruf? Ihr zweiter Parameter ist'show'
, aber sollte es nicht die Funktion sein, die Sie hinzufügen oder entfernen?Antworten:
Es ist großartig, die beiden Antworten von Mike und Jan zu kombinieren. Ich habe diese gefunden, die nur für den fraglichen Beitragstyp funktioniert. Wir brauchen die Bedingung show nicht, weil der 'future_show'-Hook nur die Art der Sendung erfasst und diese aktualisiert.
quelle
Ich kann nicht sicher sagen , da ich zu Test haben Ihre Website nicht mit , aber ich glaube , dass Sie nur entfernen müssen
'show'
ausremove_action()
undadd_action()
Anrufe. Diewp_publish_post()
Funktion ist in Bezug auf Post-Typen unabhängig, zumindest sieht es so aus, als würde man den Code lesen. Also versuche folgendes:Wenn Sie sich natürlich darauf beschränken möchten, nur Shows zu machen, möchten Sie vielleicht so etwas tun (obwohl die Logik komplizierter sein wird, wenn Sie sie auch für andere Beitragstypen benötigen):
Hoffe das hilft?
quelle
Ich denke, diese Aktion wird von aufgerufen
wp_transition_post_status
. Der Code lautet:Für normale zukünftige Posts wird der letzte Haken sein
future_post
, aber für deinen Typ wird es seinfuture_show
oder was auch immer dein Typ ist.quelle
Wenn Sie lediglich ein zusätzliches Datum für die 'Sendezeiten' hinzufügen möchten, ist es möglicherweise einfacher, ein Meta-Feld hinzuzufügen, das genau das tut. Wenn Sie das Veröffentlichungsdatum verwenden, um dies zu verfälschen, kann dies möglicherweise problematisch sein, da WordPress es auf festlegt "Zukünftiger" Status, wenn er mit einem zukünftigen Veröffentlichungsdatum aktualisiert wird (glaube ich). Sie müssen sich also jedes Mal anschließen, wenn ein Beitrag aktualisiert wird, um ihn wieder zurückzusetzen. Auf diese Weise können Sie auch "Veröffentlichungsdatum" für das reservieren, was beabsichtigt ist.
Ich würde wahrscheinlich nur eine
meta_key
und eine benutzerdefinierte Meta-Box verwenden. Es hängt jedoch davon ab, wie komplex Ihre Abfragen sind, die die Posts anzeigen.Wenn Sie den meta_value als Zeitstempel festlegen, können Sie nach dem angezeigten Datum noch ordnen oder vor / nach einem bestimmten Datum auswählen:
$events = get_posts( 'post_type=events&meta_key=show_time&meta_value=' . strtotime( '+1 week' ) . '&meta_compare=<&orderby=meta_value' );
Würden alle "Events" mit einer Showtime spätestens eine Woche ab dem aktuellen Datum bekommen. Hinweis: Das obige ist ungetestet, sollte aber funktionieren :)
quelle
WP Dev Nacin verwendet eine einfache Funktionsüberschreibung:
quelle