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.

inserir midia

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! :)