2014-10-26 5 views
2

У меня проблема. Я хочу, чтобы URL-адрес отображаемого изображения был опубликован.Wordpress - Get Attachment url при публикации публикации

Он работает, когда я обновляю сообщение, но не когда он был опубликован в первый раз, потому что метаданные, похоже, не хранятся в базе данных в данный момент. Даже когда я использую «wp_insert_post» вместо «save_post», он не работает.

В моей functions.php я проверить для новых/обновленных сообщений с:

add_action('save_post', 'my_function'); 

Когда пост был обновлен я прочитал признакам URL изображения с помощью:

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

Можете ли вы мне помочь ?

+0

Возможно, функция get_attached_media() * поможет вам в дальнейшем. – pbaldauf

+0

@pbaldauf: Нет успеха :( – moviemaker

+0

Вы пробовали wp_get_attachment_url? 'wp_get_attachment_url (get_post_thumbnail_id ($ post-> ID))' – Prateek

ответ

1

Ну, если вы хотите использовать вложения из сообщения, которое публикуете, save_post - это не гонка.

Попробуйте publish_post

В тот момент, когда publish_post обжигают, пост и его приложение уже существует в базе данных и могут быть доступны.

+0

** publish_post ** не работал для меня. Я думаю, что метаданные не записываются в база данных еще при вызове ** publish_post ** – moviemaker

+0

Невозможно. publish_post запускается после публикации и сохраняется его содержимое. Попробуйте это: возьмите post_id в publish_post и var_dump (get_post_meta ($ id)) и var_dump (get_post_thumbnail_id ($ id)) давайте посмотрим, что там происходит. –

0

10 Действие крюка запускается после того, как данные сохраняются в базе данных (wordpress codex), поэтому это должно быть сделано, оно работает на публикацию публикации и публикации. В коде содержится несколько полезных ссылок.

// 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; 

    } 

}); 
+0

Все равно неважно, что я использую «save_post» или «publish_post». Даже «get_post_thumbnail_id» не возвращает значения. – moviemaker

+1

Действительно странно, это не поведение WP по умолчанию, возможно, это какая-то проблема с плагинами или что-то в этом роде. – Danijel

Смежные вопросы