Wie ändert man den Post-Inhalt vor dem Schreiben in die database?

Hi ~ Ich bin wieder zurück und ich versuche, dem Skript, das ich an einem Plugin arbeitete, eine weitere function hinzuzufügen , die meine Freunde über einen neuen Eintrag informiert, der sie (@) erwähnt . Jetzt möchte ich den Klartext der Namen meiner Freunde, die ich erwähnt habe, in Links zu ihrer eigenen WordPress-Blog-Adresse ändern (wenn sie es getan haben), sobald ich auf “Veröffentlichen” klicke. Also @ David wird David werden .

Ich suche diese Frage viele Male, aber alle Ergebnisse sind wie folgt:

add_filter('the_content', 'replace_custom_word'); 

was die database nicht wirklich verändert, oder? Edit: Ich weiß nicht, vielleicht liege ich falsch.

Unten ist der Code, den ich verwenden werde, um Davids Blog-Adresse zu erhalten.

  $friend_url = $wpdb->get_var( $wpdb->prepare( " SELECT comment_author_url FROM $wpdb->comments WHERE comment_author LIKE %s ", $friendCorrectName )) ; 

Also sag mir bitte, wie das am besten funktioniert. Vielen Dank im Voraus!

Der vollständige Code für dieses Skript ist ebenfalls unten eingefügt. Bitte zögern Sie nicht, zu kommentieren, was ich jetzt auch habe. 🙂 Du kannst meinen letzten Post sehen, wenn du etwas Seltsames siehst, oder du kannst mich einfach fragen.

 function email_friend() { // get post object $post = get_post($id); // get post content $content = $post->post_content; // get how many people is mentioned in this post $mentionCount = preg_match_all('/(@[^\s]+)/', $content, $matches); // if there is at least one @ with a name after it if (0 !== $mentionCount) { $friendList = array();//for storing correct names for ($mentionIndex=0; $mentionIndex get_var( $wpdb->prepare( " SELECT comment_author FROM $wpdb->comments WHERE comment_author LIKE %s ", $friend_display_name_like )) ; // get friend email by comment author name $friend_email = $wpdb->get_var( $wpdb->prepare( " SELECT comment_author_email FROM $wpdb->comments WHERE comment_author LIKE %s ", $friendCorrectName )) ; // get friend's blog address $friend_url = $wpdb->get_var( $wpdb->prepare( " SELECT comment_author_url FROM $wpdb->comments WHERE comment_author LIKE %s ", $friendCorrectName )) ; //if we have David's blog address in database if ($friend_url) { //this is where I need help with. //I need to modify post content before writing it into database now //I need to change the plain text name after @ to a link to his blog } if($friend_email) {// if found email address then email $postTitle = get_the_title($id); $post_permalink = get_permalink( $id ); $to = $friend_email; $subject = 'Arch!tect mentioned you in his new post 《'.$postTitle . '》'; $from = "noreplay@swotong.com"; $headers = "From:" . $from; $message = "Arch!tect mentioned you in his new post《".$postTitle . "》 check it out?\n\n" ."Post link:".$post_permalink ."\n\n\nPlease don't reply this email.\r\n"; if(mail($to, $subject, $message, $headers)) { //if send successfully put his/her name in my list array_push($friendList, $friendCorrectName); } } } $comma_separated_list = implode(",", $friendList); //friend list array to string // now send an email to myself about the result $postTitle = get_the_title($id); $post_permalink = get_permalink( $id ); $to = 'myOwn@email.com'; $subject = "Your new post《".$postTitle . "》has notified ".count($friendList)."friends successfully"; $from = "noreplay@email.com"; $headers = "From:" . $from; //list all friends that received my email $message = "Your new post《".$postTitle . "》has notified ".count($friendList)."friends successfully:\n\n". $comma_separated_list; mail($to, $subject, $message, $headers); } }//end of email_friend function add_action ( 'publish_post', 'email_friend' ); 

EDIT2: um genauer zu sein, der Code oben, wo ich “// das ist, wo ich Hilfe mit.” Kommentieren ist der Ort, an dem ich Hilfe brauche.

Solutions Collecting From Web of "Wie ändert man den Post-Inhalt vor dem Schreiben in die database?"

In der Regel verwenden Sie add_filter bevor Sie Informationen anzeigen. Für Ihren Fall können Sie add_action('publish_post', 'your_function') und dann $_POST Werte abfangen. Der Inhalt des WYSIWYG-Editors ist über $_POST['content'] verfügbar.

Der Hook ist vom Typ publish_{post_type} btw. Sie sollten sich entsprechend ändern.

Beispiel:

 function wpse_89292_save_my_post() { print_r( $_POST['content'] ); # will display contents of the default wysiwyg editor die; } add_action('publish_post', 'wpse_89292_save_my_post'); 

Verwenden des wp_insert_post_data Filters:

 function wpse_89292_save_my_post( $content ) { global $post; if( isset($post) && get_post_type( $post->ID ) == 'post' ){ $content['post_content'] = function_to_manipulate_the_content(); } return $content; } add_filter( 'wp_insert_post_data', 'wpse_89292_save_my_posts' ); 

Vielleicht können Sie wp_update_post (wenn Sie Post bearbeiten) oder wp_insert_post (wenn es sich um einen neuen Post handelt) function verwenden, um das zu bearbeiten, was Sie im Beitrag wünschen. Es funktioniert wirklich.