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):
- Get the image source from the removed image and add it to a custom field. -OR-
- 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 if(!is_null($image_src)){ 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 mpb_set_featured_image($thumb_id,$post_id); // 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){ require_once('simple_html_dom.php'); $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.