Benutzerdefinierter Datumswechsler post_date => future – verpasster Zeitplanerrors

Ich arbeite an einem benutzerdefinierten Event-Scheduler für meine Website, der es den Leuten ermöglicht, einfach in den Artikel einzutreten und ihn in Zukunft zu veröffentlichen. Der Grund, warum ich die normale WordPress-functionalität außer Kraft setze, ist, weil ich es sehr einfach machen wollte, das Datum zu wählen, da die Predigten nur an einem Sonntag gepostet werden sollten. Daher habe ich einen benutzerdefinierten Dropdown-Kalender, mit dem Sie nur die Sonntage eines Monats auswählen können.

Anyway mein Problem ist, dass alle meine Beiträge einen Fehler von “Verpasster Zeitplan” im Admin-Panel geben. Ich kann das umgehen, indem ich “post_status” => “future” verwende, um Beiträge auf der Seite aufzulisten, aber das ist irgendwie “hacky” …

Warum sollte mir dieser Code den Fehler “Verpasster Zeitplan” geben?

function cfc_reset_sermondate( $data ) { if($data['post_type'] == 'sermon_post') { if($_POST['cfc_sermon_date']) { $date = $_POST['cfc_sermon_date']; // $date = DateTime::createFromFormat('D - M j, Y', $date); // $date = $date->format('Ym-d'); $date = createFromFormat($date); $postDate = strtotime($date); $data['post_date'] = $date; $todaysDate = strtotime( date( 'Ymd' ) ); if ( $postDate > $todaysDate ) { $data['post_status'] = 'future'; } } } return $data; } add_filter( 'wp_insert_post_data', 'cfc_reset_sermondate', '99', 1); 

Hier ist die createFromFormat-function:

 function createFromFormat($date_ugly) { $schedule = 'Sunday - Sep 15, 2000'; // %Y, %m and %d correspond to date()'s Y m and d. // %I corresponds to H, %M to i and %p to a $ugly = strptime($date_ugly, '%A - %b %e, %Y'); $ymd = sprintf( // This is a format string that takes six total decimal // arguments, then left-pads them with zeros to either // 4 or 2 characters, as needed '%04d-%02d-%02d', $ugly['tm_year'] + 1900, // This will be "111", so we need to add 1900. $ugly['tm_mon'] + 1, // This will be the month minus one, so we add one. $ugly['tm_mday'], $ugly['tm_hour'], $ugly['tm_min'], $ugly['tm_sec'] ); $new_schedule = new DateTime($ymd); return $new_schedule->format('Ym-d'); } 

Benutzerdefinierter Datumskalender

Verpasster Zeitplan Fehler

Solutions Collecting From Web of "Benutzerdefinierter Datumswechsler post_date => future – verpasster Zeitplanerrors"

WordPress hat diese functionalität: Durch das Setzen des Veröffentlichungsdatums in die Zukunft im WordPress-Feld “Veröffentlichen” erhält der Beitrag den Status “Zukunft” und wird für dieses Datum veröffentlicht.

Meine Vermutung ist, dass das Problem auftritt, weil Sie die GMT-Zeit nicht eingestellt haben – was WordPress verwendet, um die Publikationen zu planen. Oder Sie haben sich nach der Planung angemeldet.

Der “einfache” Weg (aber hinterlässt zwei “Meatboxes zum Veröffentlichungsdatum” – was aus Sicht der Benutzeroberfläche nicht großartig ist).

Ymd H:i:s Sie, dass WP das Datum im Format Ymd H:i:s erwartet

 add_action('save_post', 'wpse50448_schedule_sermon'); function wpse50448_schedule_sermon($post_id) { //Perform checks, nonces etc $date='';//set date $date_gmt='';//set date in GMT (UTC) // unhook this function so it doesn't loop infinitely remove_action('save_post', 'wpse50448_schedule_sermon'); // update the post, which calls save_post again wp_update_post(array('ID' => $post_id, 'post_date' => $date,'post_date_gmt' => $date_gmt)); // re-hook this function add_action('save_post', 'wpse50448_schedule_sermon'); } 

Das sollte funktionieren, wird aber nicht getestet!

Alternative

Alternativ können Sie die Veröffentlichungs-Metabox aus dem Register entfernen und sie mit demselben Mark-up erneut registrieren (aber mit einigen ID-Tags, die geändert wurden, so dass WPs JavaScript sie ignoriert und dann Ihr eigenes Javascript anwendet). Aus der Sicht von UI ist das viel besser, aber ein bisschen komplizierter.

Der erste Teil ist in diesem Beitrag für eine andere Metabox beschrieben.