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.