web-dev-qa-db-fra.com

champ personnalisé valeur date à convertir en problèmes d'horodatage Unix

Pour une raison quelconque, je ne parviens pas à convertir une valeur de date stockée dans un champ méta en un horodatage Unix (et inversement). Si je sauvegarde la date en tant que chaîne, tout fonctionnera correctement, mais si je la convertis en horodatage à l'aide de strtotime, la valeur ne sera pas sauvegardée.

Mon code de travail ressemble à ceci:

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

Mais si je le change comme suit, cela ne fonctionnera pas:

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

Se gratter la tête ici! À votre santé

2
Richard Sweeney

En regardant http://www.php.net/manual/en/datetime.formats.date.php Je ne pense pas que strtotime convertira un DD/MM/AAAA pour chronométrer correctement.

Cependant, il peut faire MM/JJ/AAAA ou AAAA/MM/JJ.

Essayez d’utiliser le format de date AAAA/MM/JJ

Ou si cela ne vous convient pas, vous pouvez utiliser le même format de date, mais vous devrez, lors de la sauvegarde, scinder la date et la convertir en horodatage Unix de manière différente. Vous pouvez utiliser:

$date = "dd/mm/yyyy";
$date = explode("/", $date);
$date = mktime(0, 0, 0, (int)$date[1], (int)$date[0], (int)$date[2]);
4
Brady