Permalink for PDF of article

时间:2014-11-06 作者:Hal Atkins

我正在尝试了解这是否可行,以及我可能如何实施它。我们的网站是一本科学杂志,我们发表的文章遵循以下permalink结构:

http://ehponline.org/<article-slug>
i.e. http://ehponline.org/1306796
我们发表的每一篇文章都有相应的PDF 可供查看/下载。那些PDFs 当前存储在WP介质结构之外。

我想知道的是,是否有一种方法可以为每篇文章提供永久链接URL,例如:

http://ehponline.org/<article-slug>/pdf
i.e. http://ehponline.org/1306796/pdf
该页面要么列出可用的附件,要么被重定向到文件本身。

这样做的目的是:

为文章创建预期的URLPDF 为我们的读者提供一种更简单的跟踪方法PDF 通过查看Google Analytics如果您有任何关于如何做到这一点的想法,我们将不胜感激。

2 个回复
SO网友:jgraup

使用add_rewrite_endpoint

<?php

if ( ! class_exists( \'PDFRewriteEndpoint\' ) ):

    class PDFRewriteEndpoint {

        /**
         * Add actions and filters in constructor.
         */
        public function __construct() {
            add_action( \'parse_request\', array ( $this, \'sniff_requests\' ), 0 );
            add_action( \'init\', array ( $this, \'add_endpoint\' ), 0 );
        }

        /**
         * Add rewrite rules.
         */
        public function add_endpoint() {

            // article-slug/pdf/
            add_rewrite_endpoint( \'pdf\', EP_PERMALINK | EP_PAGES );

            //////////////////////////////////
            flush_rewrite_rules( true );  //// <---------- REMOVE THIS WHEN DONE TESTING
            //////////////////////////////////
        }

        /**
         * Redirect to PDF page or download
         *
         * @param $wp_query
         */
        public function sniff_requests( $wp_query ) {

            if ( isset( $wp_query->query_vars[ \'pdf\' ] ) ) {

                // anything after `/pdf/` like `extra/stuff`

                $pdf_extras = $wp_query->query_vars[ \'pdf\' ];
                echo $pdf_extras . PHP_EOL;

                // Do PDF Logic Here

                wp_die(\'PDF of \' . $wp_query->query_vars[\'name\']);
            }
        }
    }

    // Create the class
    $pdfRewriteEndpoint = new PDFRewriteEndpoint();

endif; // PDFRewriteEndpoint
使用add_rewrite_rule

<?php

if ( ! class_exists( \'PDFRewrite\' ) ):

    class PDFRewrite {

        const ENDPOINT_QUERY_PARAM = \'____pdf_api\';

        /**
         * Add actions and filters in constructor.
         */
        public function __construct() {
            add_filter( \'query_vars\', array ( $this, \'add_query_vars\' ), 0 );
            add_action( \'parse_request\', array ( $this, \'sniff_requests\' ), 99 );
            add_action( \'init\', array ( $this, \'add_endpoint\' ), 0 );
        }

        /**
         * Add our custom query arg to later check in `parse_request`.
         *
         * @param $vars
         *
         * @return array
         */
        public function add_query_vars( $vars ) {
            $vars[] = static::ENDPOINT_QUERY_PARAM;
            return $vars;
        }

        /**
         * Add rewrite rules.
         */
        public function add_endpoint() {

            // article-slug/pdf/
            add_rewrite_rule( "^([^/]+)/pdf/?$", \'index.php?\' . static::ENDPOINT_QUERY_PARAM . \'=1&name=$matches[1]\', \'top\' );

            //////////////////////////////////
            flush_rewrite_rules( true );  //// <---------- REMOVE THIS WHEN DONE TESTING
            //////////////////////////////////
        }

        /**
         * Redirect to PDF page or download
         *
         * @param $wp_query
         */
        public function sniff_requests( $wp_query ) {

            global $wp;

            if ( isset( $wp->query_vars[ static::ENDPOINT_QUERY_PARAM ] ) ) {

                 // Do PDF Logic Here

                wp_die(\'PDF of \' . $wp->query_vars[\'name\']);

                exit;
            }
        }
    }

    // Create the class
    $pdfRewrite = new PDFRewrite();

endif; // PDFRewrite

SO网友:Rarst

这似乎是一个合适的用例rewrite endpoint.

如果您为pdf (针对您的帖子等)您将能够在模板中检查相应的查询变量,或者在加载模板并相应地输出或重定向之前进行检查。

不确定GA部分,但如果您对这个URL结构有一个想法,那么endpoint将相对容易地将您带到那个里。

结束

相关推荐

如何为PDF上传创建缩略图?

我正在开发一个网站,需要允许用户在Gravity表单中提交PDF文件,并创建PDF第一页的JPG缩略图,然后显示在创建的帖子中。我的计划是要有一个允许这样做的功能,并将JPG链接添加到自定义字段,这样它就可以显示在帖子页面上。不幸的是,虽然我理解这个概念,并且有一个脚本我用来在非Wordpress网站中将PDF转换为JPG格式,但我不确定如何在Wordpress中实现这一点,或者是否最好将其创建为插件而不是函数。有没有人能为我从这个概念开始提供一些指导?CODE:作为参考,这里是我从之前的脚本中获得的代码