it-swarm.com.de

Wie ändere ich den Inhalt eines Beitrags, bevor ich in die Datenbank schreibe?

Hallo ~ Ich bin wieder da und versuche, dem Skript, an dem ich gearbeitet habe, eine weitere Funktion hinzuzufügen ein Plugin, das meine Freunde über neue Posts benachrichtigt, in denen (@) sie erwähnt werden . Jetzt möchte ich den Klartext der Namen meiner Freunde, die ich erwähnt habe, in Links zu ihrer eigenen WordPress-Blogadresse ändern (falls vorhanden), sobald ich auf "Veröffentlichen" klicke. Also wird @David David .

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

add_filter('the_content', 'replace_custom_Word');

was ändert nicht wirklich die Datenbank, oder? Edit: Ich weiß nicht, vielleicht irre ich mich.

Unten ist der Code, mit dem ich Davids Blogadresse erhalte.

        $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 geht. Vielen Dank im Voraus!

Der vollständige Code für dieses Skript ist ebenfalls unten eingefügt. Bitte kommentieren Sie auch, was ich jetzt habe. :) Sie können meinen letzten Beitrag überprüfen, wenn Sie etwas Seltsames sehen, oder Sie können 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 < $mentionCount; $mentionIndex++) {

            $mentionName = $matches[0][$mentionIndex];  
            $mentionName = str_replace('_',' ',$mentionName); //change _ back to space
            $mentionName = substr($mentionName, 1); //get rid of @
            //for security and add wildcard
            $friend_display_name_like = '%' . like_escape($mentionName) . '%'; 

            global $wpdb;

            // get correct name first
            $friendCorrectName = $wpdb->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 = "[email protected]";
                $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 =    '[email protected]';
        $subject =   "Your new post《".$postTitle . 
        "》has notified ".count($friendList)."friends successfully";
        $from = "[email protected]";
        $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 über dem Kommentar "// Hier brauche ich Hilfe." Ist der Ort, an dem ich Hilfe brauche.

2
Arch1tect

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

Der Haken ist vom Typ publish_{post_type} btw. Sie sollten 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' );
3
RRikesh

vielleicht können Sie wp_update_post (wenn Sie einen Beitrag bearbeiten) oder wp_insert_post (wenn es sich um einen neuen Beitrag handelt) verwenden, um das zu bearbeiten, was Sie im Beitrag haben möchten. Es funktioniert wirklich.

0
bigwolk