it-swarm.com.de

Wie kann ich Post-Daten bearbeiten, bevor sie gespeichert werden?

Ich habe ein Plugin und möchte den Beitragsinhalt durch einige Filter ausführen können, bevor er in der Datenbank gespeichert wird. Wenn ich mir das plugin api ansehe, sehe ich, dass zwei Hooks hilfreich sein könnten:

save_post
wp_insert_post

Das einzige Problem ist, dass es so aussieht, als ob save_post keine Variable zurückgeben muss. Daher weiß ich nicht, wie ich den Inhalt filtern soll, und wp_insert_post sieht dokumentiert aus.

Ich würde gerne so etwas machen:

add_action('whatever_hook_name','my_function');

function my_function($post_content){
    return $post_content.' <br> This post was saved on '.time();
}

Ich werde etwas Nützlicheres tun, als einen Zeitstempel anzufügen, nämlich einige Regex-Filter auszuführen, aber dies ist die allgemeine Art von Filter/Aktion, die ich hinzufügen möchte.

Update

Bitte beachten Sie, dass ich die Daten abfangen möchte, während sie in der Datenbank gespeichert werden - nicht, wenn sie im Beitrag angezeigt werden (z. B .: Nicht durch Hinzufügen eines Filters zu the_content).

17
cwd

Der wp_insert_post_data Filter kann das tun:

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;
}
25
Anh Tran

Verwenden Sie den Filter content_save_pre genau wie the_content - der Unterschied besteht darin, dass er ausgeführt wird, wenn ein Beitrag gespeichert und nicht angezeigt wird.

http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre

6
drzaus

Sie können auch nach dem Haken pre_post_update suchen.

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}
2
user28231

Fügen Sie dem aktiven Design den folgenden Code hinzu, um <Shell> vor dem Speichern durch [Shell] zu ersetzen:

 add_filter('content_save_pre', 'my_sanitize_content', 10, 1);
 function my_sanitize_content($value) {
   return str_replace('<Shell>', '[Shell]', $value);
 }
1
Suyash Jain

Wenn Sie am Ende aller Beiträge nur etwas Ähnliches hinzufügen möchten, empfehle ich Ihnen, den the_content-Filter zu verwenden.

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' );
0
Joshua Abenazer