Intereting Posts
Загрузите страницу в окне предварительного просмотра на панели? Можно ли отображать панель администратора в Настройке темы? Неопределенная функция wp_set_password wp_localize_script не добавляет глобальную переменную для javascript Функция wp_head не выводит Панель администратора (панель инструментов) не отображается в пользовательском файле PHP, который загружает WordPress Использовать get_terms для получения post_tags, но ограничить таксономию Как создать нагрузку больше записей, таких как Twitter? При использовании WordPress Multisite можно отображать данные на главный сайт из дочерних сайтов? Добавление скриптов в область администрирования Удалить администратор и редактор из меню «изменить роль в» в списке пользователей Где находится папка wp-content / themes? Показать комментарии от нескольких почтовых идентификаторов в шаблоне комментария Как применить фильтр style_loader_src с исключением конкретного файла? Рекомендации по внедрению единого входа?

Изменение даты публикации в мета-окне

У меня возникла проблема с обновлением post_date в пользовательской функции, которую я написал.

Я пытаюсь изменить «post_date» на свое обычное значение «meta_date».

Вот функция:

function cfc_reset_postdate( $data, $postarr ) { // If it is our form has not been submitted, so we dont want to do anything if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; if($data['post_type'] == 'scripture-memory') { $date = get_post_meta( get_the_ID(), 'cfc_date', true ); $date = DateTime::createFromFormat('D - M j, Y', $date); $date = $date->format('Ym-d'); $data['post_date'] = $date; return $data; } add_filter( 'wp_insert_post_data', 'cfc_reset_postdate', '10', 2); 

Я попытался связать его со всеми этими фильтрами, но никто, похоже, не работает …

Он работает, за исключением того, что я должен дважды нажать кнопку «Обновить», чтобы изменить post_date в соответствии с моей новой метаданной.

Что я делаю не так?

Solutions Collecting From Web of "Изменение даты публикации в мета-окне"

Примечание. Действия и фильтры на самом деле не взаимозаменяемы: фильтры обычно должны возвращать переданные данные или что-то сломать.

Исходя из того, что сказал m0r7if3r, wp_insert_post_data является фильтром, поэтому вы должны модифицировать данные $ post и возвращать их в конце функции.

(В качестве альтернативы, вы можете глобально изменить переменные, которые вам нужно изменить во время соответствующего действия, а затем изменить его.)

для учебника сначала прочитайте: http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/post.php#L2566

Затем рассмотрим следующее (я не тестировал это, но основывался на вашем коде):

 function cfc_reset_postdate( $data ) { $date = get_post_meta( get_the_ID(), 'cfc_date', true ); $date = DateTime::createFromFormat('D - M j, Y', $date); $date = $date->format('Ym-d'); $data['post_date'] = $date; return $data; } add_filter( 'wp_insert_post_data', 'cfc_reset_postdate'); 

У меня для вас свободная реализация. Посмотрите на фильтр 'wp_insert_post_data' , это последний фильтр / действие, которое имеет доступ к вставленным данным. Вы должны смотреть на получение только первого параметра, который будет массивом данных, изменив это, а затем вернув его. У вас будет доступ ко всем сообщениям, которые будут вставлены, поэтому, если вам нужно делать проверки (или, в вашем случае get_post_meta() ), это будет подходящее время для их выполнения. Этот фильтр выполняется независимо от того, является ли сообщение новым сообщением или обновлением … но кроме этого не существует много предостережений. Если вам нужно посмотреть источник, его в строке 2567 из /wp-includes/post.php

Я знаю, что это вопрос задавался некоторое время назад, но просто заставлял кого-то задаваться вопросом, более простой способ сделать это:

 <?php $date = get_post_meta($post->ID, "cfc_date", true); echo the_time('Ymd' , $date );?> 

Проверьте WordPress Codex