我如何制作pdf上载的附件页面?

时间:2017-01-20 作者:Pete

我有一个用于发布图像的附件页,因此当我单击缩略图(在前端)时,它会将用户带到该图像的附件页,我如何对pdf文件执行同样的操作,以便在单击前端pdf的直接链接时重定向到pdf附件页?

<?php if ( wp_attachment_is_image( $post->id ) ) : $att_image = wp_get_attachment_image_src( $post->id, "full"); ?>
    <center>
    <p class="full-attachment">
        <?php /* <a href="<?php echo wp_get_attachment_url($post->id); ?>" title="<?php the_title(); ?>" rel="attachment"> */ ?>
            <img src="<?php echo $att_image[0];?>" width="<?php echo $att_image[1];?>" height="<?php echo $att_image[2];?>"  class="attachment-full" alt="<?php $post->post_title; ?>" />
        <?php /* </a> */ ?>
    </p>
    </center>
<?php else : ?>
    <a href="<?php echo wp_get_attachment_url($post->ID) ?>" title="<?php echo wp_specialchars( get_the_title($post->ID), 1 ) ?>" rel="attachment">
        <?php echo basename($post->guid) ?>
    </a>
<?php endif; ?> 
这是我的主题文件的单曲。php

<?php $file= get_post_meta( $post->ID, \'teacher-resume-upload\' );
 if ( $file) { foreach ( $file as $attachment_id ) { $full_size = wp_get_attachment_url( $attachment_id ); printf( \'<a href="%s">download</a>\', $full_size); } } ?>

3 个回复
最合适的回答,由SO网友:Matthew McVickar 整理而成

您可以使用pdf.php 或其他一些特殊命名的模板文件as described birgire\'s answer 要显示专用于PDF的附件页,或使用attachment.php 包含附件类型的条件语句的页面(就像您问题中的代码一样)。

与Yoast SEO插件的潜在冲突请注意,如果安装了Yoast SEO插件,附件模板页面可能无法工作。下的默认设置Yoast SEO › Search Appearance › Media 是“将附件URL重定向到附件本身”,这将覆盖任何附件页面模板,并直接链接到PDF、图像文件或您上载的任何内容。

如何仅对PDF使用附件页,并将其他附件类型直接重定向到其文件。另外,如果您只想显示PDF附件页并将其他内容重定向到附件文件,请使用以下代码。(你会把这个放在你的functions.php 文件。)

/**
 * Redirect media attachment URLs to the attachment itself *unless* it\'s a PDF.
 * See details: https://wordpress.stackexchange.com/questions/253226/
 */
add_action(
  \'template_redirect\',
  function() {
    // Exit if this is not an attachment page.
    if ( ! is_attachment() ) {
      return;
    }

    // Exit (do nothing; do not redirect; use
    // the pdf.php attachment template page) 
    // if this is a PDF attachment page.
    if ( false !== stripos( get_post_mime_type(), \'pdf\' ) ) {
      return;
    }

    // Redirect all other attachment pages to
    // their file. Use code \'301\' to indicate
    // this is a permanent redirect.
    if ( wp_get_attachment_url() ) {
      wp_safe_redirect( wp_get_attachment_url(), \'301\' );
    }
  }
);

SO网友:birgire

get_attachment_template() 我们可以看到附件的模板层次结构是如何构建的。

让我们看一些例子:

对于pdf文件applicaton/pdf mime类型:

- application-pdf.php
- pdf.php
- application.php
- attachment.php
对于jpeg图像image/jpeg mime类型:

- image-jpeg.php
- jpeg.php
- image.php
- attachment.php
对于png图像image/png mime类型:

- image-png.php
- png.php
- image.php
- attachment.php
对于mp3音频文件audio/mpeg mime类型:

- audio-mpeg.php
- mpeg.php
- audio.php
- attachment.php
如果当前主题目录中不存在这些文件,则回退顺序如下:

- {custom post template}.php
- single-attachment-{slug}.php
- single-attachment.php
- single.php
- singular.php
- index.php
我添加了{custom post template}.php 这里,因为我们可以为_wp_page_template 给定附件的键,模板文件名作为元值。

如果我们在Template Hierarchy, 然后,它似乎缺少了一些后备选项。

然后,如果我们想修改附件的嵌入模板,那么我们可以使用embed-attachment.phpembed.php

SO网友:Marinus Klasen

这应该可以做到:

<?php if ( get_post_mime_type($post->ID) == \'application/pdf\' ) : ?>
    <object data="<?php echo wp_get_attachment_url($post->ID); ?>" type="application/pdf" width="100%" height="1000px"><a href="<?php echo wp_get_attachment_url($post->ID); ?>">Download the PDF here.</a></object>
<?php endif; ?>
get_post_mime_type() 告诉你附件的类型-有点像wp_attachment_is_image($post->ID). 如果与PDF匹配,则执行代码。

当您在attachment.php 应该将代码包装在其中的模板文件<?php if is_attachment(): ?> <?php endif; ?>.

相关推荐

如何创建仅用于pdf的搜索选项

我需要搜索页面的帮助。我们是巡回法院,我们的网站(flcourts18.org)使用最新版本的WordPress。我们希望公众能够搜索我们的行政命令,这些命令都是pdf文件,只来自一个特定的文件夹,其中只存储了行政命令。如何设置仅从单个文件夹中搜索pdf的搜索页面?有数百个pdf。我们希望通过AO和文本进行搜索。谢谢你的帮助。