Olá amigos, hoje quero dar uma dica rápida e super útil de como enviar arquivos de mídias para a Biblioteca do WordPress fora do Administrador ou da infra do WordPress.
Recentemente precisei fazer um widget para Android que habilitava o upload de arquivos direto para o WordPress, devido a restricão de uso o xml-rpc do WordPress, precisei desenvolver uma API externa, mas isso não vem ao caso, irei demonstrar como usar as funções de API para trabalhar com uploads de arquivos e imagem destacada.
if(! isset($_POST['post_id']) return false; $id = (int) $_POST['post_id']; if(!empty($_FILES['file'])) { $file = $_FILES['file']; if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ROOT_WP . 'wp-admin/includes/file.php' ); //Chamada para a funcao que efetiva o upload $upload = wp_handle_upload($file,array('test_form' => false)); //Se Upload ok if(!isset($upload['error']) && isset($upload['file'])) { $filetype = wp_check_filetype(basename($upload['file']), null); $title = $file['name']; $ext = strrchr($title, '.'); $title = ($ext !== false) ? substr($title, 0, -strlen($ext)) : $title; $attachment = array( 'post_mime_type' => $filetype['type'], 'post_title' => addslashes($title), 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment($attachment, $upload['file']); $attach_data = wp_generate_attachment_metadata( $attach_id, $upload['file']); //Cadastra o arquivo como Media wp_update_attachment_metadata( $attach_id, $attach_data ); if(set_post_thumbnail($id,$attach_id)) return true; }else { error_log("\$_FILES not defined or empty!"); }//check empty return false;
Primeiramente verificamos se um arquivo foi enviado ao script. Depois precisamos verificar se a função wp_handle_upload() está disponível em caso negativo tornamo-as disponivel incluindo ‘wp-admin/includes/file.php’.
Está função é resposável por lidar com envios PHP no WordPress, sanitização de nomes de arquivos, verificação extensões, mime-types, e mover o arquivo para o diretório apropriado dentro do diretório uploads.
Depois, se o upload foi feito obtemos os dados do arquivo enviado usando a função wp_check_filetype() e formatamos os dados para incluir na tabela “post” como um “attachment” que passaremos como argumentos para a função wp_insert_attachment() e adicionalmente podemos gerar todos os tamanhos de imagens utilizada no site chamando a função wp_generate_attachment_metada().
E finalmente você pode definir como uma imagem destacada de um Post.
Para obter mais informações sobre as funções exibidas acesse o Codex lá você encontrará todos os detalhes de como usar cada uma das funções utilizadas neste exemplo.
Have a lot of fun! :)