Пользовательский WordPress переписать

Я пытаюсь пользовательский переписать для следующего URL …

http://www.domain.com/lp/1 

и он будет анализироваться с использованием

 lp.php?p=1 

Я пробовал следовать …

 add_action( 'init', 'aagt_rewrite_add_rewrites' ); function aagt_rewrite_add_rewrites() { add_rewrite_rule( '^lp/(\d+)/?$', // p followed by a slash, a series of one or more digits and maybe another slash 'lp.php?p=$matches[1]', 'top' ); } 

но если я попробую URL ( http://www.domain.com/lp/1 ) после кода выше, он не сработает. Я что-то пропустил, я попытался сбросить правила htaccess. пожалуйста, помогите, спасибо.

Solutions Collecting From Web of "Пользовательский WordPress переписать"

WordPress имеет два типа правил перезаписи – внутренние и внешние. Внутренние правила анализируются WordPress и перенаправляются на index.php . Внешние перезаписывания записываются в .htaccess и не направлены на WordPress.

Прямо сейчас ваше правило представляет собой сочетание между внутренним и внешним – вы структурированы как внутреннее правило, но вы неправильно указали на файл, отличный от index.php .

Если вы хотите использовать среду WordPress в коде, который получает это правило перезаписи, он должен быть внутренним переписыванием. Если вы хотите, чтобы это внешнее правило, которое не обрабатывается WordPress, вам нужно изменить свое правило, чтобы использовать $1 вместо $matches[1] .

РЕДАКТИРОВАТЬ

вот несколько методов, первый – быстрый и грязный метод –

Первый способ

Шаг 1 для обоих методов заключается в добавлении запроса var lpid в массив WordPress распознаваемых запросов:

 function wpa55759_query_vars( $query_vars ){ $query_vars[] = 'lpid'; return $query_vars; } add_filter( 'query_vars', 'wpa55759_query_vars' ); 

Шаг 2, добавьте правило перезаписи, чтобы установить только lpid при lpid нашего правила:

 function wpa55759_rewrites(){ add_rewrite_rule( 'lp/(\d+)/?$', 'index.php?lpid=$matches[1]', 'top' ); } add_action( 'init', 'wpa55759_rewrites' ); 

Шаг 3, parse_request и проверьте, установлен ли наш запрос var. Если да, загрузите lp.php из каталога шаблона и выйдите из него:

 function wpa55759_parse_request( $request ){ if( isset( $request->query_vars['lpid'] ) ): include( get_template_directory() . "/lp.php" ); exit(); endif; return $request; } add_action( 'parse_request', 'wpa55759_parse_request' ); 

Чтобы получить значение lpid внутри lp.php :

 global $wp; echo $wp->query_vars['lpid']; 

В основном мы проверяем наш запрос var и вырезаем раньше. WordPress никогда не запускает запрос базы данных для загрузки сообщений или страниц. Не знаете, какие побочные эффекты могут иметь место в противном случае.

Метод второй

Второй способ – создать страницу в WordPress, lp и указать наше правило на этом, также передавая запрос var:

 function wpa55759_rewrites(){ add_rewrite_rule( 'lp/(\d+)/?$', 'index.php?pagename=lp&lpid=$matches[1]', 'top' ); } add_action( 'init', 'wpa55759_rewrites' ); 

Теперь вы можете создать шаблонную page-lp.php и получить доступ к lpid с помощью:

 echo get_query_var( 'lpid' ); 

Еще один вариант этого второго метода заключается в фильтрации template_redirect и ярлыке иерархии шаблонов, загрузка собственного файла:

 function wpa55759_template_redirect(){ global $wp_query; if( $wp_query->get( 'lpid' ) ): include( get_template_directory() . "/lp.php" ); exit(); endif; } add_filter( 'template_redirect', 'wpa55759_template_redirect' ); 

перейдите в wp-admin / options-permalink.php

ничего не делать, кроме "Сохранить изменения"