The problem:
I'm posting from the Wordpress iPhone app. When adding an image, the image shows up in the description itself, which I don't like.

What I'm trying to do:
Remove the image from the description and do one of the following (don't know the benefits of one option over the other):

  1. Get the image source from the removed image and add it to a custom field. -OR-
  2. Set the image as the featured image

I figure either one of those options would help me to isolate the image URL for use in my post templates.

What I've tried:
Literally everything under the sun. Right now I'm adding code to functions.php but would eventually like to make this a plugin.

I think the code below is way off, but I want to post it to show some of the attempts I've made:

I've added an action to run a function mpb_remove_post_image on content_save_pre ...

add_action('content_save_pre', 'mpb_remove_post_image');

Problem with that is I don't have access to the post_id (which I need in order to set the featured image) using content_save_pre so I have to get the image url and look for a post with the guid equal to the image src...

function mpb_remove_post_image( $content ){

    // strip slashes, I guess we need to readd slashes when we're done?
    $content = stripslashes($content);

    // get the first image src
    $image_src = get_first_image($content);

    // if there's an image src we can jam

        global $wpdb;

        // query the db for an attachment with this image
        //$thumb_id = $wpdb->get_var($wpdb->prepare("SELECT DISTINCT ID FROM $wpdb->posts WHERE guid='$image_src'"));
        $result = $wpdb->get_results("SELECT ID, post_parent FROM {$wpdb->posts} WHERE guid ='$image_src'");

        $thumb_id = $result[0]->ID;         
        $post_id = $result[0]->post_parent;

        // set the featured image
        // update_post_meta( $post_id, '_thumbnail_id', $thumb_id );


    // remove any images in the content
    $content = preg_replace("/<img[^>]+\>/i", "", $content);

    $content = addslashes($content);

    return $content;

the code above references this function I wrote to get the image...

function get_first_image($html){


    $post_dom = str_get_dom($html);

    // get the first image
    $first_img = $post_dom->find('img', 0);   

    // if any images then return the src attribute
    if($first_img !== null) {
        return $first_img->src;

    return null;

And to set the featured image ...

// set the featured image
function mpb_set_featured_image( $thumb_id, $post_id ){

    update_post_meta( $post_id, '_thumbnail_id', $thumb_id );


I've also tried to add an action for save_post, but anything I do inside the function that runs seems to trigger another hook that runs save_post again so it turns into an endless loop.

Does anyone know (even if it's at a high level) what steps I can take to accomplish this? To recap here's what I want to do...

On inserting a post 1) get the first image src 2) set it as a custom field or set it as a featured image 3) remove the image from the post.

edit - I should mention the code I posted does work if you add the post through the wp admin. But not if you add it via the mobile app.

  • 1
    The GIUD will change with the next wp version, so getting the post ID through the GUID is not a good plan.
    – kaiser
    Commented Jul 3, 2011 at 17:45
  • Thanks, yeah I figured this solution wasn't going to work. I was hoping there'd be someone who could look at what I'm trying to do and offer up another suggestion. I'm a newb at this so what I have so far is kind of hacky.
    – jyoseph
    Commented Jul 3, 2011 at 17:57

2 Answers 2


Why not utilize two hooks, one before post saved and one after post saved?

content_save_pre : Function attached with this hook will remove image from content and store it in session/transient.

save_post : With this hook you will have id of post. Function attached with this hook will set featured image for the post with that id and delete session/transient data.

Alternatively, If you want to go with your approach, I think you should use post_name, instead of guid, to retrieve post id from database.


Not sure if it's any use in your particular scenario, but might be worth checking out the get_the_image plugin


It checks multiple sources to try and find an image to display - according to the FAQ:

How does it pull images?

  • Looks for an image by custom field (one of your choosing).
  • If no image is added by custom field, check for an image using the_post_thumbnail() (WP 2.9's new image feature).
  • If no image is found, it grabs an image attached to your post.
  • If no image is attached, it can extract an image from your post content (off by default).
  • If no image is found at this point, it will default to an image you set (not set by default).
  • 1
    Just re-read your question, and TBH I'm not 100% convinced this would be that much use to you...
    – chrismou
    Commented Jul 6, 2012 at 15:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.