การจัดรูปแบบที่เหมาะสมของ post_date สำหรับ wp_insert_post?


10

วิธีที่เหมาะสมในการกำหนดวันที่โพสต์เมื่อส่งโพสต์จากส่วนหน้าโดยใช้wp_insert_post ( Trac ) คืออะไร?

ตัวอย่างข้อมูลของฉันกำลังเผยแพร่ด้วยเวลา mysql ...

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);

คำตอบ:


23

ถ้าคุณไม่เพิ่ม post_date WordPress จะเติมมันโดยอัตโนมัติด้วยวันที่และเวลาปัจจุบัน

หากต้องการตั้งค่าวันที่และเวลาอื่น[ Y-m-d H:i:s ]เป็นโครงสร้างที่เหมาะสม ตัวอย่างด้านล่างพร้อมรหัสของคุณ

$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);

ขอบคุณ Rob! เพิ่ม$postdate = date('2010-02-23 18:57:33');จริงทำให้กล่องใส่หยุดการทำงานบางทีนั่นเป็นเพียงข้อผิดพลาดใน Chrome แม้ว่า ...
M-Torin

1
ฉันลองด้วยตัวเองและใช้งานได้ บางทีปัญหาของคุณอาจอยู่ที่อื่นในรหัสของคุณ
Rob Vermeer

ฉันลองใช้การกำหนดวันที่และจะกลับมาNotice: A non well formed numeric value encountered in C:\xampp\htdocs\wordpress\wp-includes\functions.php on line 4028
Ari

2
ควรเป็น$postdate = '2010-02-23 18:57:33';เพราะdate()ต้องใช้รูปแบบวันที่ที่แท้จริงในการประมวลผลไม่ใช่ตัวเลข หรือ$postdate = date('Y-m-d H:i:s', strtotime('2010-02-23 18:57:33'));
Alex K

3

หากต้องการแปลงวันที่ของคุณเป็นรูปแบบ Wordpress (MySQL DATETIME) ให้ลอง:

$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);

หรือแน่นอนถ้าคุณต้องการที่จะเซ็กซี่ทำจริงๆ:

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

สิ่งนี้มีประโยชน์มากสำหรับการจัดรูปแบบการประทับเวลา Unix โดยเฉพาะdate("Y-m-d H:i:s", $date_stamp)รหัส
David

2

คุณไม่สามารถจัดรูปแบบ$_POST['date']เช่นนี้ ... คุณจะต้องเรียกใช้ค่าจาก$_POST['date']บางสิ่งเช่น$postdate = date( $_POST['date'] )... นอกจากนี้ยังมีความเป็นไปได้ที่จะเรียกใช้ get_option สำหรับการตั้งค่าบล็อก ดูตัวเลือกอ้างอิงใน Codex


การใช้ Date ทำให้การโพสต์เสียหายและจะส่งคืนข้อผิดพลาด 404 ขอบคุณ Kaiser สำหรับทิศทางแม้ว่า!
m-torin

2

สำหรับชุมชนนี่คือรหัสสุดท้ายของฉัน:

หัวข้อ

$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

เจอกันผ่าน google ฉันรู้ว่ามันเก่า แต่ไม่มีคำตอบที่ชัดเจน รหัส wordpress ใช้current_time( 'mysql' )เพื่อบันทึกวันที่ / เวลาในฟังก์ชั่น wp_update_post! สิ่งนี้จะสร้างรูปแบบวันที่ที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.