Я пытаюсь обработать содержимое публикации перед ее сохранением в базе данных и сообщить пользователю, если произошла какая-либо ошибка. Я использую фильтр wp_insert_post_data, сессий и admin_notices, так как кажется, что это единственное простое решение, чтобы выбросить сообщение об ошибке для редактирования экрана в панели администратора после публикации. Однако я столкнулся со странной проблемой - кажется, что код запускается дважды, поэтому, когда у меня есть:
function notices(){
if(!empty($_SESSION['notices'])) print $_SESSION['notices'];
unset ($_SESSION['notices']);}
add_action( 'admin_notices', 'notices' );
add_filter('wp_insert_post_data', 'processdata', '99', 2);
function processdata($data) {
$processed_content = filterthis($data['post_content']);
if($processed_content!='error') {
$data['post_content'] = $processed_content;
$_SESSION['notices'] .= '<div class="updated"><p>Everything is ok</p></div>';
return $data;
} else {
$_SESSION['notices'] .= '<div class="error"><p>Something went wrong</p></div>';
return $data;}
Я получаю два сообщения. Я сделал несколько тестов, и кажется, что сначала для контента, который должен быть сохранен в базе данных, а затем для «старого» контента (уже сохранен). Например: если предыдущий контент был «неправильным», а тот, который нужно сохранить, был «в порядке», первое сообщение - «хорошо», а второе - «ошибка» и т. Д. Однако все сообщения генерируются в одно и то же время (так что, я полагаю, это не какая-то проблема с кэшированием).
Что еще более странно для меня, это то, что если я использую этот простой код:
add_filter ('wp_insert_post_data', 'filterthis', '99', 2);
function filterthis($data){
$date = date('H:i:s');
$_SESSION['my_admin_notices'] .= '<div class="updated"><p>This is a message from '.$date.'</p></div>';
$data['post_content'] .= $date;
return $data;
}
Я также получаю два сообщения, но только один фрагмент данных времени добавляется для публикации контента - идентичный тому, который был доставлен первым сообщением. Таким образом, кажется, что код выполняется дважды, но только впервые он сохраняет содержимое в базу данных ... Я совершенно запутался после семи часов поиска в Google и чтения Кодекса. Возможно, это тривиальное решение, но я на самом деле не программист PHP, просто изучаю его некоторое время, поэтому я был бы очень рад, если бы кто-то здесь мог мне помочь.