Adicionei uma nova página em "Páginas" no administrador do wordpress e adicionei vários campos personalizados. Eu também gostaria de poder adicionar um campo de imagem de upload ao editor de páginas - existe alguma maneira de fazer isso através de campos personalizados?
Ou há uma direção diferente que preciso tomar se precisar dessa capacidade?
Respostas:
Para quem deseja saber mais sobre o upload de arquivos, aqui está uma cartilha rápida que aborda os principais tópicos e pontos problemáticos. Isso foi escrito com o WordPress 3.0 em uma caixa do Linux em mente, e o código é apenas uma visão geral básica para ensinar os conceitos. Tenho certeza de que algumas pessoas aqui podem oferecer conselhos para melhorar a implementação.
Descreva sua abordagem básica
Há pelo menos três maneiras de associar imagens a postagens: usar um campo post_meta para armazenar o caminho da imagem, usar um campo post_meta para armazenar o ID da biblioteca de mídia da imagem (mais sobre isso mais tarde) ou atribuir a imagem à postagem como um anexo . Este exemplo usará um campo post_meta para armazenar o ID da biblioteca de mídia da imagem. YMMV.
Codificação multipartes
Por padrão, os formulários de criação e edição do WordPress não têm nenhum tipo de código. Se você quiser fazer upload de um arquivo, precisará adicionar um "enctype = 'multipart / form-data'" à tag do formulário - caso contrário, a coleção $ _FILES não será pressionada. No WordPress 3.0, há um gancho para isso. Em algumas versões anteriores (não tenho certeza dos detalhes), você precisa substituir a tag de formulário por string.
Crie o campo Meta Box e Upload
Não vou muito longe na criação de meta boxes, pois a maioria de vocês provavelmente já sabe como fazê-lo, mas vou apenas dizer que você só precisa de uma meta box simples com um campo de arquivo. No exemplo abaixo, incluímos um código para procurar uma imagem existente e exibi-la, se houver. Também incluí algumas funcionalidades simples de erro / feedback que passam erros usando um campo post_meta. Você vai querer mudar isso para usar a classe WP_Error ... é apenas para demonstração.
Manipulando o Upload de Arquivos
Esse é o grande problema - na verdade, manipular o upload do arquivo conectando-se à ação save_post. Eu incluí uma função com muitos comentários abaixo, mas gostaria de observar as duas principais funções do WordPress que ele usa:
wp_handle_upload () faz toda a mágica de lidar com o upload. Você apenas passa uma referência ao seu campo na matriz $ _FILES e uma variedade de opções (não se preocupe muito com elas - a única importante que você precisa definir é test_form = false. Confie em mim). Essa função, no entanto, não adiciona o arquivo carregado à biblioteca de mídia. Ele simplesmente faz o upload e retorna o caminho do novo arquivo (e, comodamente, o URL completo). Se houver algum problema, ele retornará um erro.
wp_insert_attachment () adiciona a imagem à biblioteca de mídia e gera todas as miniaturas apropriadas. Você apenas passa uma variedade de opções (título, status da postagem, etc.) e o caminho LOCAL (não URL) para o arquivo que você acabou de enviar. O melhor de colocar suas imagens na biblioteca de mídia é que você pode excluir facilmente todos os arquivos posteriormente, chamando wp_delete_attachment e passando o ID da biblioteca de mídia do item (o que eu estou fazendo na função abaixo). Com essa função, você também precisará usar wp_generate_attachment_metadata () e wp_update_attachment_metadata (), que fazem exatamente o que você espera que eles façam - gerar metadados para o item de mídia.
Permissões, Propriedade e Segurança
Se você tiver problemas para fazer o upload, isso pode ter a ver com permissões. Eu não sou especialista em configuração de servidor, por favor, corrija-me se esta parte for instável.
Primeiro, verifique se a pasta wp-content / uploads existe e pertence ao apache: apache. Nesse caso, você deve poder definir as permissões para 744 e tudo deve funcionar. A propriedade é importante - até mesmo a configuração de permissões para 777 às vezes não ajudará se o diretório não for de propriedade adequada.
Você também deve limitar os tipos de arquivos carregados e executados usando um arquivo htaccess. Isso evita que as pessoas enviem arquivos que não são imagens e executem scripts disfarçados de imagens. Você provavelmente deve pesquisar no Google isso para obter informações mais autoritativas, mas pode limitar o tipo de arquivo simples como este:
fonte
if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
O código que o @MathSmath forneceu está correto. No entanto, se você lida com muitos campos de upload ou deseja carregar vários arquivos, é necessário modificá-lo bastante.
Além disso, ele não utiliza a biblioteca de mídia do WordPress para fazer upload de arquivos (o que faz todo o trabalho sujo nos bastidores).
Eu sugiro que você dê uma olhada em um plugin como o Meta Box . O plug-in suporta as duas maneiras de fazer upload de arquivos:
input[type="file"]
, que usa um código semelhante acima (consulte a documentação ) eIsso pode ajudá-lo a reduzir o esforço de escrever e manter o código, especialmente quando você deseja criar vários uploads.
Disclaimer: Eu sou o autor de Meta Box.
fonte