Прикрепите медиафайл к публикации без предварительного автосохранения

В WordPress я использую wp_editor, чтобы пользователи могли использовать редактор и загрузчик мультимедиа. Я бы не хотел создавать автосохранение поста, но проблема в том, что вложения не имеют post_id для присоединения до тех пор, пока пост не будет сохранен.

Мне было интересно, есть ли способ загрузить медиафайл, а затем прикрепить его к новому сообщению после его сохранения.

Могу ли я передать временный идентификатор вложению, чтобы идентифицировать его при сохранении сообщения? Или, может быть, получить идентификатор вложения после его загрузки?

Идеи оценены!


person HWD    schedule 20.07.2012    source источник


Ответы (2)


После долгих возни я пришел к выводу, что ID поста нужен заранее.

В итоге я сделал то, что делает экран редактирования сообщений WordPress. Я использовал немного jQuery и Ajax для динамического создания автосохранения после того, как пользователь ввел заголовок сообщения.

Как только автосохранение выполнено, он заменяет href iframe загрузки мультимедиа на тот, который содержит идентификатор автосохранения сообщения.

Таким образом, все еще есть шанс, что будут некоторые заброшенные черновики сообщений, но, по крайней мере, это требует небольшого обязательства, набрав заголовок сообщения.

person HWD    schedule 01.08.2012

Вы можете создать неприкрепленный медиафайл, а затем прикрепить его к сообщению позже:

function file_into_database( $filetype, $filename, $target )
{
    $title = $this->clean_file_info[ 'basename' ];

    $attachment = array
    (
          'post_mime_type' => $filetype
        , 'post_title'     => $title
        , 'post_content'   => ''
        , 'post_status'    => 'inherit'
        , 'guid'           => $target[ 'uri' ]
        , 'post_author'    => $this->author
    );


    $attach_id = wp_insert_attachment( $attachment, $target[ 'path' ] );


    $attach_data = wp_generate_attachment_metadata( $attach_id, $target[ 'path' ] );
    wp_update_attachment_metadata( $attach_id,  $attach_data );

    return $attach_id;
}

Затем позже прикрепите его:

wp_update_post
(
    array
    (
           'ID'          => $attachment[ 'id' ]
        ,  'post_parent' => $id_new_post
    )
)

Я только что нашел это в плагине, не нашел его задокументированным, поэтому я не знаю, есть ли какие-либо побочные эффекты, но я не сталкивался с ними. Также обратите внимание, что если сообщение в конечном итоге не будет опубликовано, вы не получите устаревшие автоматические сохранения, но вы можете получить устаревшие вложения, поэтому вам, возможно, придется запланировать их удаление в какой-то момент в будущем и отменить это, когда и если пост сохраняется.

person Community    schedule 18.08.2015