Intereting Posts
Создание архивных страниц для детских категорий Область содержимого слишком мала Подключить тип сообщения как пользовательскую таксономию к пользователям и другой пользовательский тип сообщения в панели администратора Вытягивать сообщения из другой установки WordPress на одном сервере wpdb получить сообщения по таксономии SQL Пользовательский WP отключает ссылку активации электронной почты, отправленную по электронной почте пользователя. Как запустить запрос mysql, когда администратор обновляет роль пользователя? не удалось переопределить блок стиля в wp_head () Правило перезаписи для переименования wp-admin для wordpress multisites WordPress с Composer и различными плагинами для dev / live. Невозможно изменить исходный язык с польского языка Защищенные паролем фотогалереи Автоматически ли активированный плагин означает, что его методы доступны для других функций WP? Полностью замаскировать * все * следы подстановки для установки WordPress? Пользовательский тип сообщения, шаблон страницы, не захватывающий шаблон страницы

Постоянная ссылка для PDF статьи

Я пытаюсь узнать, возможно ли это, и как я могу его реализовать. Наш сайт является научным журналом, и наши опубликованные статьи следуют этой структуре постоянной ссылки:

http://ehponline.org/<article-slug> ie http://ehponline.org/1306796 

Каждая статья, которую мы публикуем, имеет соответствующий PDF который доступен для просмотра / загрузки. Эти PDFs в настоящее время хранятся вне структуры WP Media.

Я задаюсь вопросом, есть ли способ иметь постоянный URL для каждой статьи, например:

 http://ehponline.org/<article-slug>/pdf ie http://ehponline.org/1306796/pdf 

и эта страница либо отображает доступное вложение, либо перенаправляется на сам файл.

Цели этого будут заключаться в следующем:

  1. Создайте ожидаемый URL для статьи PDF для наших читателей
  2. Сделайте более легкое средство, с помощью которого мы можем отслеживать просмотры PDF через Google Analytics

Любые идеи о том, как это можно было бы сделать, получили бы большую оценку.

Это похоже на подходящий вариант использования для конечной точки перезаписи .

Если вы создадите pdf для pdf (настройте таргетинг на свои сообщения и т. Д.), Вы сможете проверить соответствующий запрос var в шаблоне или до того, как шаблон будет загружен и выведен или перенаправлен соответствующим образом.

Не уверен в части GA, но если у вас есть идея об этом для этой структуры URL, то конечная точка доставит вас туда относительно легко.

Использование 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