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.
Oi, preciso adicionar mais tipos de mime, é possível?
Você pode fazer um array para o mime, por exemplo:
‘post_mime_type’ => array(‘application/doc’,’application/pdf’)
O não está funcionando no loop.
O <? pdf_file_url(); ?> não está funcionando no loop.
obrigado pelo código. 🙂
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
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
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
RESOLVIDO!!! o snippet estava faltando o “php”
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!!Ó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?
seu código quebra meu site.
achei muito útil, há alguma maneira de exibir o nome do arquivo em vez de apenas Arquivo PDF:?
obrigado
apenas substitua
$pdf[]= $file->guid
por
$pdf[]= $file->post_title
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.
Não testei, mas tenta inserir o atributo “multiple” no .
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.
Kevin, encontrei a solução:
Substitua o seguinte:
echo ‘SELECIONAR ARQUIVO PDF’;
por isto:
echo ”;
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’;
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…
Você poderia simplesmente substituir a função pdf_file_url pela seguinte, que configuraria tudo para você. http://pastebin.com/KZmigAyF
Muito obrigado Kevin, acabei de testar e funciona perfeitamente 🙂 incrível – vou retuitar
Que bom saber que pude ajudar.
link não funcionando