У моего сайта WordPress есть портфолио, которое находится в www.mysite.com/portfolio/
. Разделы и элементы портфолио администрируются через пользовательский плагин, который я создал. Я хочу получить доступ к отдельным элементам, таким как www.mysite.com/portfolio/my-cool-photo
, и добавить «my-cool-photo» в строку запроса, например ?portfolio_item=my-cool-photo
, чтобы я мог прочитать ее из моего кода.Добавление пользовательских правил перезаписи в WordPress
В PHP файл активации плагинов у меня есть этот код:
function add_rewrite_rules($wp_rewrite) {
$new_rules = array(
'portfolio/(.+)/?$' => 'index.php?&portfolio_item=$1'
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');
function query_vars($public_query_vars) {
$public_query_vars[] = "portfolio_item";
return $public_query_vars;
}
add_filter('query_vars', 'query_vars');
Это добавляет правило перезаписи в массив OK. Проблема в том, что это ничего не делает. Когда я иду на www.mysite.com/portfolio/testing/
, я получаю «Это несколько смущает, не так ли?» Страница ошибки WordPress 404. Очевидно, что редирект не работает, так что строка запроса не будет заполнена, но только, чтобы убедиться, что я сделал это:
global $wp_query, $wp_rewrite;
if ($wp_rewrite->using_permalinks()) {
$searchKey = $wp_query->query_vars['portfolio_item'];
} else {
$searchKey = $_GET['portfolio_item'];
}
... и достаточно убедиться, что строка запроса не получает передается.
Есть ли что-то, что мне не хватает?
В 'add_rewrite_rules' функции я добавил' $ wp_rewrite-> flush_rewrite_rules (истинные), 'в конце. Это ничего не сказалось, и файл htaccess по-прежнему является файлом htaccess по умолчанию WordPress. – Gavin
вы можете попробовать использовать функцию 'add_rewrite_rule': http://codex.wordpress.org/Rewrite_API/add_rewrite_rule – Ygg
Я считаю, что переписывание фактически работает теперь с помощью' add_rewrite_rule'. Проблема в том, что WordPress не распознает mysite.com/portfolio/abcdefg/ как часть/портфолио/страницы, поэтому он дает мне «Это несколько смущает, не так ли?» экран ошибки. Есть ли что-то, что мне нужно сделать, чтобы «сообщить», что он все равно должен загружать страницу портфолио? – Gavin