X

Como Anexar Arquivos PDF a um Post com Seleção de Arquivo de Metabox Personalizado

Snippets por IsItWP

Você está procurando uma maneira de criar uma nova metabox na sua tela de edição de postagens com um menu de seleção? Embora provavelmente exista um plugin para isso, criamos um snippet de código rápido que você pode usar para anexar arquivos PDF a posts com seleção de arquivos de metabox personalizada.

Instruções:

Tudo o que você precisa fazer é adicionar este código ao arquivo functions.php do seu tema ou a um plugin específico do site:

add_action("admin_init", "pdf_init");
add_action('save_post', 'save_pdf_link');
function pdf_init(){
	add_meta_box("my-pdf", "PDF Document", "pdf_link", "post", "normal", "low");
	}
function pdf_link(){
	global $post;
	$custom  = get_post_custom($post->ID);
	$link    = $custom["link"][0];
	$count   = 0;
	echo '<div class="link_header">';
	$query_pdf_args = array(
		'post_type' => 'attachment',
		'post_mime_type' =>'application/pdf',
		'post_status' => 'inherit',
		'posts_per_page' => -1,
		);
	$query_pdf = new WP_Query( $query_pdf_args );
	$pdf = array();
	echo '<select name="link">';
	echo '<option class="pdf_select">SELECT pdf FILE</option>';
	foreach ( $query_pdf->posts as $file) {
	   if($link == $pdf[]= $file->guid){
	      echo '<option value="'.$pdf[]= $file->guid.'" selected="true">'.$pdf[]= $file->guid.'</option>';
		 }else{
	      echo '<option value="'.$pdf[]= $file->guid.'">'.$pdf[]= $file->guid.'</option>';
		 }
		$count++;
	}
	echo '</select><br /></div>';
	echo '<p>Selecting a pdf file from the above list to attach to this post.</p>';
	echo '<div class="pdf_count"><span>Files:</span> <b>'.$count.'</b></div>';
}
function save_pdf_link(){
	global $post;
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ return $post->ID; }
	update_post_meta($post->ID, "link", $_POST["link"]);
}
add_action( 'admin_head', 'pdf_css' );
function pdf_css() {
	echo '<style type="text/css">
	.pdf_select{
		font-weight:bold;
		background:#e5e5e5;
		}
	.pdf_count{
		font-size:9px;
		color:#0066ff;
		text-transform:uppercase;
		background:#f3f3f3;
		border-top:solid 1px #e5e5e5;
		padding:6px 6px 6px 12px;
		margin:0px -6px -8px -6px;
		-moz-border-radius:0px 0px 6px 6px;
		-webkit-border-radius:0px 0px 6px 6px;
		border-radius:0px 0px 6px 6px;
		}
	.pdf_count span{color:#666;}
		</style>';
}
function pdf_file_url(){
	global $wp_query;
	$custom = get_post_custom($wp_query->post->ID);
	echo $custom['link'][0];
}

Para exibir o arquivo PDF, você pode usar este código:

<? pdf_file_url(); ?>
<a href="<? pdf_file_url(); ?>">My PDF File</a>

Observação: Se esta é a primeira vez que você adiciona trechos de código no WordPress, consulte nosso guia sobre como copiar / colar trechos de código corretamente no WordPress, para não quebrar acidentalmente seu site.

Se você gostou deste trecho de código, considere conferir nossos outros artigos no site, como: 20 melhores temas WordPress para igrejas para expandir o rebanho e como rastrear links de afiliados no Google Analytics.

Comentários   Deixe uma resposta

  1. Oi, preciso adicionar mais tipos de mime, é possível?

    1. Você pode fazer um array para o mime, por exemplo:

      ‘post_mime_type’ => array(‘application/doc’,’application/pdf’)

  2. O não está funcionando no loop.

    1. O <? pdf_file_url(); ?> não está funcionando no loop.

  3. obrigado pelo código. 🙂

  4. Olá, obrigado pelo script. Estou usando-o com um tipo de postagem personalizado.
    A exibição está correta, mas não consigo salvar o pdf. Na verdade, ele salva na primeira vez, mas depois não consigo alterá-lo. Então, acho que é a função 'salvar':

    function save_pdf_link(){

    global $post;
    if (defined(‘DOING_AUTOSAVE’) && DOING_AUTOSAVE){ return $post->ID; }
    update_post_meta($post->ID, “link”, $_POST[“link”]);

    Meu tipo personalizado é chamado de ‘events’. Alguma ideia para fazê-lo funcionar?

    Obrigado

  5. oi amigo, eu tenho um tipo de postagem personalizado, listagem, não consigo adicionar o código php acima a ele para exibir o PDF, quando adiciono este código ao functions.php, ele é adicionado aos meus Posts, mas não às minhas listagens.

    valeu

  6. Oi, desde a atualização para WP3.5 isso desapareceu das minhas edições de posts/páginas, então não consigo mais adicionar/editar PDFs. Alguém pode ajudar?

    Obrigado, Craig

  7. RESOLVIDO!!! o snippet estava faltando o “php”

  8. desculpe pelo meu inglês:

    você pode integrar este código para uma página? quais são as alterações a serem feitas?

    eu fiz um teste de volta em um post mas eu não trabalho que o link é não faz a conexão com meu arquivo ajuda por favor!!

  9. Ótimo trabalho! Mas se eu tentar adicionar múltiplos Metabox, acabo recebendo o mesmo arquivo para cada campo personalizado.. Tentei criar funções diferentes como: function pdf2_ Alguma ideia?

  10. seu código quebra meu site.

  11. achei muito útil, há alguma maneira de exibir o nome do arquivo em vez de apenas Arquivo PDF:?
    obrigado

    1. apenas substitua

      $pdf[]= $file->guid

      por

      $pdf[]= $file->post_title

  12. Este é um post fantástico, extremamente útil. Estou tentando adaptá-lo para permitir a seleção e saída de múltiplos PDFs, mas estou com dificuldades. Qual seria a melhor maneira de abordar? Qualquer conselho é apreciado, e obrigado novamente pelo artigo.

    1. Não testei, mas tenta inserir o atributo “multiple” no .

  13. Olá Kevin,

    Cheguei aqui através de uma pesquisa e a função pdf_link foi útil para corrigir como parte de um tema personalizado e tipos de post que estou trabalhando.

    Obrigado, você me economizou horas.

  14. Leanne Borrowman October 24, 2011 at 4:02 pm

    Kevin, encontrei a solução: 

    Substitua o seguinte: 

    echo ‘SELECIONAR ARQUIVO PDF’;

    por isto: 

    echo ”;

    1. patrick1991groot April 17, 2017 at 2:56 pm

      Sei que este é um post muito antigo, mas a solução correta seria passar um valor vazio, eu acho!

      Substitua o seguinte:

      echo ‘SELECIONAR ARQUIVO PDF’;

      por isto:

      echo ‘SELECIONAR ARQUIVO PDF’;

  15. Consigo pensar em tantos sites que se beneficiariam disto!

    Como eu faria para incluir isto em uma instrução if? Por exemplo, se um PDF foi carregado, mostrar o link…

    1. Você poderia simplesmente substituir a função pdf_file_url pela seguinte, que configuraria tudo para você. http://pastebin.com/KZmigAyF

      1. Muito obrigado Kevin, acabei de testar e funciona perfeitamente 🙂 incrível – vou retuitar

        1. Que bom saber que pude ajudar.

      2. link não funcionando

Adicionar um comentário

Ficamos felizes que você tenha escolhido deixar um comentário. Por favor, tenha em mente que todos os comentários são moderados de acordo com nossa política de privacidade, e todos os links são nofollow. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.

Checklist de Lançamento WordPress

O Checklist Definitivo para Lançamento de WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento do seu próximo site WordPress em um e-book prático.
Sim, envie-me o eBook Gratuito!