Как отредактировать данные записи перед её сохранением?
У меня есть плагин, и я хотел бы пропустить содержимое записи через некоторые фильтры до того, как она будет сохранена в базу данных. Изучая API плагинов, я нашел два хука, которые могут быть полезны:
save_post
wp_insert_post
Проблема в том, что похоже save_post
не требует возврата переменной, и поэтому я не знаю, как отфильтровать контент, а wp_insert_post
выглядит документированным.
Я хотел бы сделать что-то вроде этого:
add_action('whatever_hook_name','my_function');
function my_function($post_content){
return $post_content.' <br> Эта запись была сохранена '.time();
}
Я собираюсь сделать что-то более полезное, чем добавление временной метки, а именно - запустить некоторые регулярные выражения для фильтрации, но это общий тип фильтра/действия, который я пытаюсь добавить.
Обновление
Обратите внимание, что я хочу перехватить данные на пути к сохранению в базу данных - не тогда, когда они отображаются в записи (например: Не путем добавления фильтра к the_content
)

Фильтр wp_insert_post_data может это сделать:
add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );
function filter_post_data( $data , $postarr ) {
// Изменяем заголовок записи
$data['post_title'] .= '_suffix';
return $data;
}

направил меня в правильном направлении, спасибо. я думаю, что на самом деле нужно использовать add_action
вместо add_filter
. также ваши wpse35931_filter_post_data
и filter_handler
не согласованы...

Это определенно фильтр. Хотя фильтры и действия основаны на одной функциональности, что допускает некоторое пересечение. Однако если вы используете это как действие, вы не сможете вернуть данные, что лишит весь смысл. Вам нужно ФИЛЬТРОВАТЬ данные и затем возвращать их.

wp_insert_post_data
работает, но это слишком мощно для того, что нужно автору вопроса (и, возможно, другим). Более простой вариант в данной ситуации - content_save_pre
, как рекомендовал @drzaus.

Документация разработчика для фильтра wp_insert_post_data
: https://developer.wordpress.org/reference/hooks/wp_insert_post_data/

Вызывается ли этот хук в случаях, когда вы: a) вручную вызываете wp_insert_post() в, например, functions.php вашей темы для вставки/обновления записи ИЛИ b) когда запись сохраняется любым возможным способом (например, через админку, через фронтенд, каким-то другим образом...)?

Используйте фильтр content_save_pre
точно так же, как the_content
— разница в том, что он работает при сохранении записи, а не при её отображении.
http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre

Согласно https://developer.wordpress.org/reference/hooks/pre_post_update/, хук pre_post_update
вызывается только при обновлении, а не при создании.

Если вы просто хотите добавить что-то похожее в конец всех записей, то я бы предложил использовать фильтр the_content
.
function append_to_content( $content ) {
global $post;
return $content.'<br />Эта запись была сохранена '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );
