Salvando o nome do arquivo pré-higienizado de um anexo como Título ou Legenda

4

Eu tentei um pouco de pesquisa, mas nada surgiu até agora. Eu tenho um cliente que tem que fazer upload de muitas imagens para galerias e economizar tempo ele salva as legendas como os nomes de arquivos quando no Photoshop. Pessoalmente eu preferiria fazê-lo dentro do WP, mas este é o fluxo de trabalho que ele tem e não vai ceder!

Existe alguma maneira de pegar o nome do arquivo pré-higienizado e salvá-lo como metadados?

Eu olhei para wp_handle_upload_prefilter , mas isso não está no ponto certo do que eu vejo.

    
por Tom G 23.09.2016 / 14:06

1 resposta

3

Infelizmente, wp_handle_upload_prefilter hook ainda não reconhece um ID de anexo. É muito cedo e executa o nome do arquivo pré-higienizado (antes de mover o anexo e armazená-lo como um post)

A lógica

O que você pode fazer é usar esse gancho wp_handle_upload_prefilter , mas armazenar um transiente com uma vida curta que contenha o nome do arquivo pré-higienizado.

Quando o anexo for adicionado, podemos verificar isso com add_attachment() hook. Você pode atualizar o título do anexo, a legenda ou qualquer outro metadado desejado usando o valor transitório armazenado.

Finalmente, você removerá o transiente.

Eu testei esse método e parece funcionar em uploads múltiplos e únicos de anexos na instalação do meu host local.

Ok, é assim que você pode fazer isso com código.

Anexe no wp_handle_upload_prefilter e armazene o nome do arquivo pré-limpo (sem extensão) como um transitório do WordPress usando set_transient

add_action( 'wp_handle_upload_prefilter', '_remember_presanitized_filename' );
function _remember_presanitized_filename( $file ) {
    $file_parts = pathinfo( $file['name'] );
    set_transient( '_set_attachment_title', $file_parts['filename'], 30 );
    return $file;
}

Capture a opção transitória para atualizar o anexo adicionado

add_action( 'add_attachment', '_set_attachment_title' );
function _set_attachment_title( $attachment_id ) {
    $title = get_transient( '_set_attachment_title' );
    if ( $title ) {

        // to update attachment title and caption
        wp_update_post( array( 'ID' => $attachment_id, 'post_title' => $title, 'post_excerpt' => $title ) );

        // to update other metadata
        update_post_meta( $attachment_id, '_wp_attachment_image_alt', $title );

        // delete the transient for this upload
        delete_transient( '_set_attachment_title' );
    }
}
    
por Ahmed Fouad 23.09.2016 / 14:59