Home > other >  Wordpress save_post creates duplicate content in 1 entry
Wordpress save_post creates duplicate content in 1 entry

Time:09-13

I am encountering issue whereby my post content got duplicated. I want to be able to modify the content only on first publish. I tried to use wp_insert_post_data filter but it keeps crashing. So i use save_post. Here is what I want to achieve.

Example:

This is my post and I [bbsmall]create it using[/bbsmall] save_post

Filter:

Remove tag and use only simple html tags and do many other modification.

Ideal Output:

This is my post and I create it using save_post

However, my current output is:

This is my post and I create it using save_post

This is my post and I create it using save_post

This is my code

add_action('save_post', 'my_modified_content');
function my_modified_content($post_id) {
    $post_content = get_post( $post_id );
    if( $post_content->post_type != "post" ) {
        return;
       }else{
      if (isset($post_content->post_status) && 'auto-draft' == $post_content->post_status ) {
        return;
      }
      else{
            $add_extra_tag = $myweb_settings['myoption_set'];
            $post_checked = get_post_meta( $post_id, 'my_post_meta_style', true );
            $alreadydone =  get_post_meta(  $post_id, 'check_post_style', true );
            if ($alreadydone!=1){
                if (isset($add_extra_tag) and $add_extra_tag=="Yes"){
                    remove_action('save_post', 'my_modified_content');
                    $content = add_simple_tags($post_content->post_content);
                    $title =add_simple_tags($post_content->post_title);
                    update_post_meta($post_id, 'check_post_style', '1');
                    $my_post = array();
                    $my_post['ID'] = $post_id;
                    $my_post['post_title'] = $title;
                    $my_post['post_content'] = $content;
                    $my_post['post_status'] = 'publish';
                    wp_update_post($my_post);
                    add_action('save_post', 'my_modified_content');
                }else{
                    if (isset($post_checked ) ) {
                        remove_action('save_post', 'my_modified_content');
                        $content = add_simple_tags($post_content->post_content);
                        $title =add_simple_tags($post_content->post_title);
                        update_post_meta($post_id, 'check_post_style', '1');
                        $my_post = array();
                        $my_post['ID'] = $post_id;
                        $my_post['post_title'] = $title;
                        $my_post['post_content'] = $content;
                        $my_post['post_status'] = 'publish';
                        wp_update_post($my_post);
                        add_action('save_post', 'my_modified_content');
                    }else{
                        return ;
                    }
                }
            }else{
                return ;
            }
            
        }
   }
}

CodePudding user response:

Okay so I am able to fix the issue. Instead of using save_post, I use wp_insert_post_data filter. Previously I failed to use the filter due to the wrong format of coding and I did not return the $data.

So these are the modifications I did. Hope this is helpful for others who are facing the same issue.

add_filter('wp_insert_post_data', 'my_modified_content',10,3);
function my_modified_content($data, $postarr, $unsanitized_postarr) {

    if( $data['post_type'] != "post" ) {
        return;
       }else{
      if (isset($data['post_status']) && 'auto-draft' == $data['post_status'] ) {
        return;
      }
      else{
            $add_extra_tag = $myweb_settings['myoption_set'];
            $post_checked = $postarr['my_post_meta_style'];
            
            //Do other checks and modifications
        }
   }
   return $data;
}
  • Related