Định dạng đúng của post_date cho wp_insert_post?


10

Cách thích hợp để xác định ngày đăng bài khi gửi bài đăng từ giao diện người dùng bằng wp_insert_post ( Trac ) là gì?

Đoạn mã của tôi bây giờ đang xuất bản với thời gian 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);

Câu trả lời:


23

Nếu bạn không thêm post_date thì WordPress sẽ tự động điền vào ngày và giờ hiện tại.

Để thiết lập một ngày và thời gian khác [ Y-m-d H:i:s ]là cấu trúc đúng. Một ví dụ dưới đây với mã của bạn.

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

Cảm ơn Rob! Việc thêm $postdate = date('2010-02-23 18:57:33');thực sự làm cho các hộp đầu vào ngừng hoạt động, có lẽ đó chỉ là một lỗi trong Chrome ...
m-torin

1
Tôi đã thử nó và nó hoạt động. Có lẽ vấn đề của bạn là ở một nơi khác trong mã của bạn.
Rob Vermeer

Tôi đã thử sử dụng định dạng ngày đó và nó sẽ quay trở lạiNotice: A non well formed numeric value encountered in C:\xampp\htdocs\wordpress\wp-includes\functions.php on line 4028
Ari

2
nên $postdate = '2010-02-23 18:57:33';, bởi vì date()yêu cầu định dạng ngày theo nghĩa đen để xử lý, không phải số. Hoặc$postdate = date('Y-m-d H:i:s', strtotime('2010-02-23 18:57:33'));
Alex K

3

để chuyển đổi ngày của bạn sang định dạng Wordpress (MySQL DATETIME), hãy thử điều này:

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

hoặc tất nhiên nếu bạn muốn thực sự gợi cảm hãy làm điều này:

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

Điều này rất hữu ích để định dạng dấu thời gian Unix, cụ thể là date("Y-m-d H:i:s", $date_stamp)mã.
David

2

Bạn không thể định dạng $_POST['date']như thế này ... Bạn sẽ phải chạy giá trị từ $_POST['date']một cái gì đó như $postdate = date( $_POST['date'] )... Cũng có khả năng gọi get_option cho các cài đặt blog. Xem tài liệu tham khảo tùy chọn trong Codex.


Sử dụng Date thực sự đã phá vỡ bài đăng và sẽ trả về lỗi 404. Cảm ơn Kaiser cho hướng đi mặc dù!
m-torin

2

Đối với cộng đồng ở đây là mã làm việc cuối cùng của tôi:

tiêu đề

$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

đã qua google. Tôi biết nó cũ nhưng không có câu trả lời chắc chắn. mã wordpress sử dụng current_time( 'mysql' )để lưu ngày / giờ trong hàm wp_update_post! điều này sẽ tạo ra định dạng ngày mong muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.