moviemaker
moviemaker

Reputation: 49

Wordpress - Get Attachment url when publish post

I have a problem. I want to get the featured image url when a post was published.

It works when I update a post, but not when it was published for the first time, because the meta data seems not to be stored in the database at this moment. Even when I use 'wp_insert_post' instead of 'save_post' it does not work.

In my functions.php i check for new/updated posts with:

add_action( 'save_post', 'my_function' );

When a post was updated I read the featured image url by using:

 $image_url = get_post_meta( get_post_meta( $post_id, "_thumbnail_id", true ), "_wp_attached_file", true );

Can you help me?

Upvotes: 2

Views: 1206

Answers (2)

Danijel
Danijel

Reputation: 12719

save_post action hook runs after the data is saved to the database ( wordpress codex ), so this should do it, it works on post publish and post update. A couple of useful links is commented within the code.

// http://codex.wordpress.org/Plugin_API/Action_Reference/save_post
add_action( 'save_post', function ( $post_id ) {

    if ( wp_is_post_revision( $post_id ) ) return;
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    // save_post action is executed on all post actions like publish, trash, auto-draft, etc.
    // http://codex.wordpress.org/Post_Status_Transitions
    if ( get_post_status( $post_id ) == 'publish' ) {

        // http://codex.wordpress.org/Function_Reference/get_post_thumbnail_id
        $thumb_id = get_post_thumbnail_id( $post_id );

        // http://codex.wordpress.org/Function_Reference/wp_get_attachment_image_src
        $thumb_url = wp_get_attachment_image_src( $thumb_id, 'full' );

        $thumb_url = $thumb_url ? $thumb_url[0] : false;

    }

});

Upvotes: 0

Maciej Mączko
Maciej Mączko

Reputation: 133

Well, if you want to take attachments from the post you are publishing, save_post is a no go.

Try publish_post

At the moment when publish_post is fired, the post and its attachments already exists in the database and can be accessed.

Upvotes: 1

Related Questions