У меня есть пользовательский тип сообщения с настраиваемым полем, которое принимает дату. Посты позже упорядочены по дате в этом настраиваемом поле. К сожалению, я неверно отформатировал дату и уже есть число сообщений с метатемой post dd-mm-yyyy. Я нашел, что для использования этого значения в качестве orderby (WPQuery) он должен быть yyyy-mm-dd. Поэтому я собирался попробовать:
$args = array( 'posts_per_page' => -1, 'post_type'=> 'match_report' ); $wp_query = new WP_Query(); $wp_query->query($args); if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); $matchdate = get_post_meta($post->ID, 'report_date', true); $new_matchdate = strftime("%Y-%m-%d", $matchdate); update_post_meta($post->ID, 'report_date', $new_matchdate); endwhile; wp_reset_postdata(); endif; ?>
но я получаю
Notice: A non well formed numeric value encountered in...
и когда я эхо $new_matchdate
я получаю 1970-01_01, поэтому, очевидно, я делаю это неправильно. Любая помощь будет оценена по достоинству.
О, мой. Вы делаете там какой-то причудливый материал. 🙂
Пожалуйста, попробуйте:
$args = array( 'posts_per_page' => -1, 'post_type'=> 'match_report', ); $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $matchdate = get_post_meta(get_the_ID(), 'report_date', true); $new_matchdate = DateTime::createFromFormat('dm-Y', $matchdate); update_post_meta(get_the_ID(), 'report_date', $new_matchdate->format('Ym-d')); } wp_reset_postdata(); }
// РЕДАКТИРОВАТЬ
Если у вас есть проблемы с объектно-ориентированным способом, попробуйте сделать это процедурно:
$args = array( 'posts_per_page' => -1, 'post_type'=> 'match_report', ); $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $matchdate = get_post_meta(get_the_ID(), 'report_date', true); $new_matchdate = date_create_from_format('dm-Y', $matchdate); update_post_meta(get_the_ID(), 'report_date', date_format($new_matchdate, 'Ym-d')); } wp_reset_postdata(); }