Richtige Formatierung von post_date für wp_insert_post?


10

Wie kann das Post-Datum beim Senden eines Posts vom Frontend mit wp_insert_post ( Trac ) richtig definiert werden ?

Mein Snippet wird jetzt mit der MySQL-Zeit veröffentlicht ...

if (isset ($_POST['date'])) {
    $postdate = $_POST['Y-m-d'];
}
else {
    $postdate = $_POST['2011-12-21'];
}

// ADD THE FORM INPUT TO $new_post ARRAY
$new_post = array(
'post_title'    =>   $title,
'post_content'  =>   $description,
'post_date'     =>   $postdate,
'post_status'   =>   'publish',
'post_parent' => $parent_id,
'post_author' => get_current_user_id(),
);

//SAVE THE POST
$pid = wp_insert_post($new_post);

Antworten:


23

Wenn Sie kein post_date hinzufügen, füllt WordPress es automatisch mit dem aktuellen Datum und der aktuellen Uhrzeit.

Ein anderes Datum und eine andere Uhrzeit einzustellen [ Y-m-d H:i:s ]ist die richtige Struktur. Ein Beispiel unten mit Ihrem Code.

$postdate = '2010-02-23 18:57:33';

$new_post = array(
   'post_title'    =>   $title,
   'post_content'  =>   $description,
   'post_date'     =>   $postdate,
   'post_status'   =>   'publish',
   'post_parent'   =>   $parent_id,
   'post_author'   =>   get_current_user_id(),
);

//SAVE THE POST
$pid = wp_insert_post($new_post);

Danke Rob! Durch $postdate = date('2010-02-23 18:57:33');das Hinzufügen funktionieren Eingabefelder nicht mehr, vielleicht ist das aber nur ein Fehler in Chrome ...
m-torin

1
Ich habe es selbst versucht und es funktioniert. Möglicherweise liegt Ihr Problem an einer anderen Stelle in Ihrem Code.
Rob Vermeer

Ich habe versucht, dieses Datum zu verwenden, und es kehrt zurückNotice: A non well formed numeric value encountered in C:\xampp\htdocs\wordpress\wp-includes\functions.php on line 4028
Ari

2
sollte sein $postdate = '2010-02-23 18:57:33';, da date()für die Verarbeitung ein wörtliches Datumsformat erforderlich ist, nicht Zahlen. Oder$postdate = date('Y-m-d H:i:s', strtotime('2010-02-23 18:57:33'));
Alex K

3

Versuchen Sie Folgendes, um Ihr Datum in das Wordpress-Format (MySQL DATETIME) zu konvertieren:

$date_string = "Sept 11, 2001"; // or any string like "20110911" or "2011-09-11"
// returns: string(13) "Sept 11, 2001"

$date_stamp = strtotime($date_string);
// returns: int(1000166400)

$postdate = date("Y-m-d H:i:s", $date_stamp);
// returns: string(19) "2001-09-11 00:00:00"

$new_post = array(
    // your other arguments
   'post_date'     =>   $postdate
);

$pid = wp_insert_post($new_post);

oder natürlich, wenn du wirklich sexy sein willst, mach das:

'post_date'     => date("Y-m-d H:i:s", strtotime("Sept 11, 2001"))

Dies ist sehr hilfreich für die Formatierung eines Unix-Zeitstempels, insbesondere des date("Y-m-d H:i:s", $date_stamp)Codes.
David

2

Sie können das Format nicht $_POST['date']so ... Sie finden müssen laufen Wert von $_POST['date']über so etwas wie $postdate = date( $_POST['date'] )... Es gibt auch die Möglichkeit, Call get_option für die Blog - Einstellungen. Siehe Optionsreferenz im Codex.


Die Verwendung von Datum hat die Buchung tatsächlich unterbrochen und würde einen 404-Fehler zurückgeben. Danke Kaiser für die Richtung!
M-Torin

2

Für die Community ist hier mein endgültiger Arbeitscode:

Header

$year = $_REQUEST['year'];
$month = $_REQUEST['month'];
$day = $_REQUEST['day'];
$postdate =  $year . "-" . $month . "-" . $day . " 08:00:00";

$new_post = array(
    'post_title'    =>  $title,
    'post_content'  =>  $description,
    'post_status'   =>  'publish',
    'post_author'   =>  get_current_user_id(),
    'post_date'     =>  $postdate
);

0

kam durch Google. Ich weiß, es ist alt, aber es gibt keine eindeutige Antwort. WordPress-Code verwendet current_time( 'mysql' ), um Datum / Uhrzeit in der Funktion wp_update_post zu speichern! Dadurch wird das gewünschte Datumsformat generiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.