Я пытаюсь настроить функцию в functions.php, которая удаляет изображение из post_content при сохранении. Все работает до тех пор, пока я не пытаюсь сохранить содержимое, страница просто зависает, и я получаю сообщение об ошибке «500 Internal Server».
function remove_post_image( $post_ID ){
// get the post
$the_post = get_post($post_ID);
// get the content of the post
$post_content = $the_post->post_content;
// replace any images
$content = preg_replace("/<img[^>]+\>/i", "", $post_content);
// save the post
$my_post = array();
$my_post['ID'] = $post_ID;
$my_post['post_content'] = $content;
// Update the post into the database
wp_update_post( $my_post );
return $post_ID;
}
add_action('save_post', 'remove_post_image');
Боюсь, я упускаю что-то очень простое. Может ли кто-нибудь заметить что-то, что я делаю неправильно?
редактировать
Я уже вижу, как глупо это было сделано. У меня есть успех со следующим, но все же хотелось бы знать, лучший ли это способ? Я использую действие content_save_pre…
function remove_post_image( $content ){
// replace any images
$content = preg_replace("/<img[^>]+\>/i", "", $content);
return $content;
}
add_action('content_save_pre', 'remove_post_image');
content_save_pre
будет гораздо лучшим хуком для удаления изображений, а что касается установки миниатюры сообщения в качестве мета-сообщения, которое вы можете использовать,save_post
поскольку первый хук срабатывает до того, как будет установлен идентификатор сообщения, и вам это нужно дляupdate_post_meta
.Ха-ха, хорошо, внутренняя ошибка сервера была из-за бесконечных вызовов функций друг друга. Пойду смотреть
wp_insert_post_data
— спасибо!Нашел хорошее решение, используя content_save_pre… Но столкнусь ли я с той же проблемой, если захочу использовать
update_post_meta
внутри этой функции? Моя конечная цель — я хочу удалить изображение из контента, а затем использоватьupdate_post_meta
его для установки избранного изображения.Ваша функция вызывает
wp_update_post()
, которая вызывает,wp_insert_post()
которая запускаетsave_post
действие, которое запускает, угадайте, что? Ваша функция.Было бы лучше использовать что-то подобное
wp_insert_post_data
, предназначенное для фильтрации данных, а неsave_post
действие, предназначенное просто для указания того, что данные уже обработаны.