Mám plugin a chtěl bych být schopen spustit obsah příspěvku prostřednictvím některých filtrů před tím, než bude uložen do databáze. Z pohledu plugin api , vidím, že dva háčky, které vypadají, že by mohly být užitečné:
save_post
wp_insert_post
Jediný problém je, že to vypadá, že save_post
nepotřebuje vrátit proměnnou, a tak nevím, jak filtrovat obsah, a wp_insert_post
vypadá zdokumentováno.
Chci něco takového udělat:
add_action('whatever_hook_name','my_function');
function my_function($post_content){
return $post_content.' <br> This post was saved on '.time();
}
Udělám něco užitečnějšího, než připojit časové razítko, konkrétně spustit některé regex filtry, ale toto je obecný typ filtru/akce, kterou se snažím přidat.
Aktualizovat
Vezměte prosím na vědomí, že chci zachytit data o tom, jak se ukládají do databáze - ne když se zobrazují v příspěvku (např .: Ne přidáním filtru do the_content
)
Filtr wp_insert_post_data filter to může udělat:
add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );
function filter_post_data( $data , $postarr ) {
// Change post title
$data['post_title'] .= '_suffix';
return $data;
}
Použijte filtr content_save_pre
přesně jako the_content
- rozdíl je v tom, že funguje, když je příspěvek uložen, spíše než zobrazen.
http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre
Můžete také zkontrolovat háček pre_post_update
add_action('pre_post_update', 'before_data_is_saved_function');
function before_data_is_saved_function($post_id) {
}
Chcete-li nahradit <Shell>
[Shell]
před uložením, přidejte následující kód do aktivního motivu:
add_filter('content_save_pre', 'my_sanitize_content', 10, 1);
function my_sanitize_content($value) {
return str_replace('<Shell>', '[Shell]', $value);
}
Pokud chcete přidat něco podobného na konci všech příspěvků, doporučuji použít filtr the_content
.
function append_to_content( $content ) {
global $post;
return $content.'<br />This post was saved on '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );