значение настраиваемого поля дата преобразования в проблемы с меткой времени unix
По какой-то причине у меня возникают трудности с преобразованием значения даты, хранящегося в мета-поле, в метку времени unix (и обратно). Если я сохраню дату в виде строки, все будет нормально, но если я преобразую ее в метку времени с помощью strtotime
, это не сохранит значение.
Мой рабочий код выглядит так:
<?php
add_action( 'add_meta_boxes', 'rs_add_date' );
function rs_add_date() {
add_meta_box( 'rs_add_date', 'Date', 'rs_add_date_create_meta_box', 'concerts', 'normal', 'high' );
}
function rs_add_date_create_meta_box( $post ) {
$date = get_post_meta($post->ID, 'rs_date', true);
echo 'Choose a date for the event';
wp_nonce_field( plugin_basename(__FILE__), 'rs_date_nonce');
?>
<p>Date (dd/mm/yyyy) <input type="text" name="rs-date" id="rs-date" value="<?php echo $date; ?>"></p>
<?php
}
// Save the new meta
add_action('save_post', 'rs_date_save_meta');
function rs_date_save_meta( $post_id ) {
if(!wp_verify_nonce( $_POST['rs_date_nonce'], plugin_basename(__FILE__) ) )
return;
if(!current_user_can('edit_posts') )
return;
$date = $_POST['rs-date'];
update_post_meta($post_id, 'rs_date', $date);
}
?>
Но если я изменю его на следующее, это не сработает:
<?php
add_action( 'add_meta_boxes', 'rs_add_date' );
function rs_add_date() {
add_meta_box( 'rs_add_date', 'Date', 'rs_add_date_create_meta_box', 'concerts', 'normal', 'high' );
}
function rs_add_date_create_meta_box( $post ) {
$date = get_post_meta($post->ID, 'rs_date', true);
$date = time("d/m/Y", $date);
echo 'Choose a date for the event';
wp_nonce_field( plugin_basename(__FILE__), 'rs_date_nonce');
?>
<p>Date (dd/mm/yyyy) <input type="text" name="rs-date" id="rs-date" value="<?php echo $date; ?>"></p>
<?php
}
// Save the new meta
add_action('save_post', 'rs_date_save_meta');
function rs_date_save_meta( $post_id ) {
if(!wp_verify_nonce( $_POST['rs_date_nonce'], plugin_basename(__FILE__) ) )
return;
if(!current_user_can('edit_posts') )
return;
$date = $_POST['rs-date'];
$date = strtotime($date);
update_post_meta($post_id, 'rs_date', $date);
}
?>
Чешу здесь голову! Приветствия
1 answers
Глядя на http://www.php.net/manual/en/datetime.formats.date.php Я не думаю, что strtotime правильно преобразует ДД/ММ/ГГГГ во время.
Однако он может делать ММ/ДД/ГГГГ или ГГГГ/ММ/ДД.
Попробуйте использовать формат даты ГГГГ/ММ/ДД
Или, если вам это не нравится, вы можете использовать тот же формат даты, но при сохранении вам придется разделить дату и преобразовать ее в метку даты unix другим способом. Вы могли бы использовать:
$date = "dd/mm/yyyy";
$date = explode("/", $date);
$date = mktime(0, 0, 0, (int)$date[1], (int)$date[0], (int)$date[2]);