Mam wtyczkę i chciałbym móc uruchomić treść postu przez niektóre filtry, zanim zostanie ona zapisana w bazie danych. Patrząc na interfejs wtyczki , widzę, że dwa haki, które wyglądają, jakby mogły być pomocne:
save_post
wp_insert_post
Jedynym problemem jest to, że wygląda na to, że save_post
nie wymaga zwracania zmiennej, więc nie wiem, jak filtrować zawartość, i wp_insert_post
wygląda na udokumentowany.
Chciałbym zrobić coś takiego:
add_action('whatever_hook_name','my_function');
function my_function($post_content){
return $post_content.' <br> This post was saved on '.time();
}
Zamierzam zrobić coś bardziej użytecznego niż dodać znacznik czasu, a mianowicie uruchomić kilka filtrów wyrażeń regularnych, ale to jest ogólny typ filtra / akcji, którą próbuję dodać.
Aktualizacja
Pamiętaj, że chcę przechwycić dane na drodze do ich zapisania w bazie danych - nie wtedy, gdy są wyświetlane w poście (np .: Nie poprzez dodanie filtra do the_content
)
This post was...
” danych, takich jak ten, należy zapisać jako meta wartość postu :-) BTW:save_post
jest wywoływane po zapisaniu danych, a więc po nim został zapisany w bazie danych (nie to, co chcesz).Odpowiedzi:
Wp_insert_post_data filtr może to zrobić:
źródło
add_action
zamiastadd_filter
. także twojewpse35931_filter_post_data
ifilter_handler
są niezgodne ...wp_insert_post_data
działa, ale jest nieco przytłoczony tym, co OP (i być może inni) chcą osiągnąć. Prostsza opcja w tej sytuacji jestcontent_save_pre
zalecana przez @drzaus.wp_insert_post_data
Używaj filtru
content_save_pre
dokładnie takthe_content
- różnica polega na tym, że działa on, gdy post jest zapisywany, a nie wyświetlany.http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre
źródło
Możesz także sprawdzić hak
pre_post_update
źródło
Dodaj następujący kod do aktywnego tematu zastąpić
<shell>
z[shell]
przed zapisaniem:źródło
Jeśli chcesz dodać coś podobnego na końcu wszystkich postów, sugerowałbym użycie
the_content
filtra.źródło