Intereting Posts
Как размыть the_post_thumbnail () через blur.js (jquery)? json_decode не работает на WordPress Как получить увеличенное изображение с изображением, чтобы открыть большую версию на странице вложений? Как запрашивать сообщения с избранными изображениями Как добавить новый файл CSS в новый файл PHP 301 перенаправление не работает через .htaccess Что я должен писать в почтовом действии этой формы переднего конца? Ограничить поисковый запрос до определенной даты Сделать значение posts_per_page одинаковым на всех страницах Пользовательский метабокс, вызывающий ошибку: «Вы уверены, что хотите это сделать? Пожалуйста, попробуйте еще раз." Как добавить имя редактора в запись meta byline? Получите массив пользовательской таксономии с сообщениями внутри каждого элемента Единый знак между двумя сайтами wordpress Есть ли способ прогматически создавать категории продуктов и назначать миниатюры в PHP и WooCommerce? Сортировка таблицы списков типов сообщений по отображаемому имени идентификатора пользователя, хранящегося в качестве значения посылки

Переписать вопросительный знак в шаблоне post с URL-параметром для чистых URL-адресов

Я использую следующий код ( источник ), чтобы изменить шаблон одиночного сообщения через параметр url:

function sjc_add_query_vars($vars) { return array('template') + $vars; } add_filter('query_vars', 'sjc_add_query_vars'); function sjc_template($template) { global $wp; if ($wp->query_vars['template']=='basic') { return dirname( __FILE__ ) . '/single-basic.php'; } else { return $template; } } add_filter('single_template', 'sjc_template'); 

Код выше работает отлично, так например:

…….. ком / мой-вопрос /

изменяет шаблон, вызывая:

…….. ком / мой-вопрос /? = Шаблон с одним основным /

Вопрос:

Как я могу переписать URL-адрес, чтобы удалить часть «? Template =», чтобы получить чистые URL-адреса, например

…….. ком / мой-вопрос / одной основной /

Заметка:

Решение этой проблемы было бы потрясающе – потому что я также понял, что мой Caching Plugin «CACHIFY», к сожалению, не кэширует сообщения с частью «? Template =» в url 🙁

Solutions Collecting From Web of "Переписать вопросительный знак в шаблоне post с URL-параметром для чистых URL-адресов"

Вам следует добавить template конечной точки перезаписи на крючок активации темы и init . Также есть некоторые небольшие проверки для предотвращения ошибок.

 function sjc_theme_activate () {
     sjc_theme_add_rewrite_endpoint ();
     flush_rewrite_rules ();
 }
 // для получения дополнительной информации http://codex.wordpress.org/Plugin_API/Action_Reference/after_switch_theme
 add_action ('after_switch_theme', 'sjc_theme_activate');


 function sjc_theme_deactivate () {
     flush_rewrite_rules ();
 }
 // для получения дополнительной информации http://codex.wordpress.org/Plugin_API/Action_Reference/switch_theme
 add_action ('switch_theme', 'sjc_theme_deactivate');

 функция sjc_add_query_vars ($ vars) {
     $ vars [] = 'template';
     return $ vars;
 }
 add_filter ('query_vars', 'sjc_add_query_vars');

 function sjc_template ($ template) {
     глобальный $ wp_query;
     // вы должны сначала проверить, существует ли файл
     if ((isset ($ wp_query-> query_vars ['template'])) && ($ wp_query-> query_vars ['template'] == 'basic') && (file_exists (dirname (__FILE__). '/ single-basic. php '))) {
         return dirname (__FILE__).  '/single-basic.php';
     } else {
         return $ template;
     }
 }
 add_filter ('single_template', 'sjc_template');

 // добавить конечную точку перезаписи
 function sjc_theme_add_rewrite_endpoint () {
      add_rewrite_endpoint («шаблон», EP_PERMALINK | EP_PAGES);
 }
 // для получения дополнительной информации http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint
 add_action ('init', 'sjc_theme_add_rewrite_endpoint');

затем активируйте красивые ссылки для wordpress. Вы можете посетить любое сообщение с
http://example.com/post-title/?template=basic
http://example.com/post-title/template/basic
И получить тот же результат (не забудьте добавить файл single-basic.php в single-basic.php базы тем). Я надеюсь, что это поможет вам.

Вы также можете переписать URL-адрес с помощью htaccess, он также может перенаправлять на симпатичный URL-адрес. Просто поместите этот код в ваш .htaccess файл.

 RewriteEngine On RewriteRule ^my-question/([^/]*)$ /my-question/?template=$1 [L] 

Или

Вы также можете сделать это с помощью функции.php, используя следующий фрагмент кода.

 global $wp_rewrite; add_rewrite_rule('^my-question/([^/]*)?$', '/my-question/single-basic.php?template=$matches[1]', 'top'); $wp_rewrite->flush_rules(); 

Обновление: я понял, что у нас разные цели … @NewUser соглашается с тем, что оба стиля URL работают:

http://example.com/post-title/?template=basic

а также

http://example.com/post-title/template/basic .

Хотя моя цель – никогда не видеть http://example.com/post-title/?template=basic , перенаправляя ее на симпатичный URL. Точно так же, как domain.com/?p=100 перенаправляет на красивый URL-адрес страницы / страницы. Сам WP выполняет это через функцию wp_redirect в canonical.php .

Обратите внимание: наличие разных стилей URL (симпатичное и некрасивое) служит одному и тому же контенту, может рассматриваться как дублирующее содержимое поисковыми системами. Используйте функцию перенаправления 301 (как описано ниже) или канонические теги, чтобы предотвратить это: https://support.google.com/webmasters/answer/139066?hl=ru Это также объясняет всю цель WP's canonical.php (предотвращение ошибок ).

Непринужденная функция Pretty URL / 301 redirect: я изменил следующую функцию . Теперь он перенаправляет на симпатичный URL-адрес и предотвращает дублирование контента, вызванного разными стилями URL (симпатичными и некрасивыми), которые обслуживают один и тот же контент:

 function redirect_to_pretty_url() { if ( is_singular() && !empty( $_GET['template'] ) ) { wp_redirect( home_url( "/my-question/" ) . urlencode( get_query_var( 'template' ) ), 301 ); exit(); } } add_action( 'template_redirect', 'redirect_to_pretty_url' );