Мне нужен первый подкаталог в моем 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-мя именами букв, такими как «тест» или «страница», поскольку они будут переписаны на страницу программ с помощью «теста» или «страницы» в качестве программного кода, который не будут действительными программами. Это проблема, которую легко обойти, когда именовать страницы.
Спасибо, Томас