Как я могу переписать URL-адрес WordPress, чтобы использовать первый подкаталог в качестве строки запроса?

Мне нужен первый подкаталог в моем URL-адресе, чтобы переписать URL-адрес с запросом, если категория соответствует программному коду, то есть: 4 символа верхнего регистра, такие как AUBU

Например, мне понадобится:

http://www.georgiancollege.ca/devprograms/AUBU/

Переписать:

http://www.georgiancollege.ca/devprograms/index.php?page_id=16&major=AUBU

Но я не хочу, чтобы это влияло на текущие URL-адреса, такие как

http://www.georgiancollege.ca/devprograms/a-to-z/

который не следует переписывать:

http://www.georgiancollege.ca/devprograms/index.php?page_id=16&major=a-to-z

Вот что я до сих пор не работаю. (на основе: http://thereforei.am/2011/10/28/advanced-taxonomy-queries-with-pretty-urls/ )

function eg_add_rewrite_rules() { global $wp_rewrite; $new_rules = array( '(.+)/?$' => 'index.php?page_id=16&major=' . $wp_rewrite->preg_index(1) ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' ); 

UPDATE: вышеприведенный код переадресовывается на нужную страницу, но на этой странице я не могу прочитать строку запроса, вероятно, из-за перезаписи URL-адреса, на которой запрашивается не на последней странице …

Таким образом,

 $program = $_GET['major']; 

Не возвращает основной код …

Похоже на взлом для повторного написания URL-адреса Apache. Я бы об этом подумал с Mod_Rewrite. Что касается вашего кода, вы соответствуете регулярному выражению, которое недостаточно специфично. Вы хотите только совместить 4 символа в верхнем регистре? Возможно, попробуйте это вместо этого:

 'devprograms/([AZ]{4})/?$' => 'index.php?page_id=16&major=' . $wp_rewrite->preg_index(1) 

Спасибо за ввод.

Я должен был использовать решение «работать», потому что он просто не хочет работать.

Я попытался использовать $ wp_query-> query_vars, чтобы получить данные запроса, а не $ _GET или $ _POST:

 if(isset($wp_query->query_vars['major'])) { $program = urldecode($wp_query->query_vars['major']); } 

Как было предложено по адресу : http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/, но query_var для «major» не существовало, хотя запрос pagename var от такой же переписывающий URL-адрес существовал.

Поэтому я переехал …

Вот новый URL-адрес перезаписи:

 function add_rewrite_rules($aRules) { $aNewRules = array('([AZ]{4})/outline/?$' => 'index.php?pagename=programs&major=$matches[1]'); $aNewRules2 = array('([AZ]{4})/?$' => 'index.php?pagename=programs&major=$matches[1]'); $aRules = $aNewRules + $aNewRules2 + $aRules; return $aRules; } add_filter('rewrite_rules_array', 'add_rewrite_rules'); 

Поскольку мой URL-код переписывает код программы по URL-адресу только красивее, я просто захватываю REQUEST_URI и разбираю программный код следующим образом:

 $parts = explode('/',$_SERVER['REQUEST_URI']); if (isset($_GET['major'])) { $program = $_GET['major']; } elseif ($parts[1] == 'devprograms') { $program = $parts[2]; } else { $program = get_the_title(); } 

Это объясняет как стили ссылок / devprograms / BUSN, так и / devprograms / programs? Major = BUSN

Единственным недостатком этого является то, что у меня не может быть других страниц при установке с 4-мя именами букв, такими как «тест» или «страница», поскольку они будут переписаны на страницу программ с помощью «теста» или «страницы» в качестве программного кода, который не будут действительными программами. Это проблема, которую легко обойти, когда именовать страницы.

Спасибо, Томас