2016-01-04 2 views
2

Я добавил этот код, чтобы мои темы functions.php файлWordPress add_rewrite_rule не переписывание

function custom_rewrite_rule() { 
    add_rewrite_rule('^shop/([^/]*)/?','index.php?page_id=1247&page=$matches[1]','top'); 
} 
add_action('init', 'custom_rewrite_rule', 'top'); 

так, когда я просматриваю к domain.com/shop/page1 он должен переписать index.php?page_id=1247&page=page1, но когда я делаю следующее на page_id=1247 я получить эти результаты

echo $_GET["page"]; // = nothing 
print_r($_GET) // = `Array()` 

ответ

1

Вы должны получить параметры с $wp_query->query_vars

Вот пример

global $wp_query; 
echo $wp_query->query_vars['id']; 

UPDATE

Вы должны использовать add_rewrite_tag

add_rewrite_tag('%id%', '([^&]+)'); 

Также WordPress использование page в запросе, поэтому используйте другое имя

+0

ive изменен ['id'] на ['page'], что и есть находится в моем правиле rewrite, но его просто возвращается 0 – charlie

+0

проверяет его на 'var_dump ($ wp_query-> query_vars)', также очищает кеш с сохранением постоянной ссылки в admin – Cooper

+0

, который возвращается как: ["page"] => int (0) – charlie

0

Вы очистили и обновили правила перезаписи в базе данных? Как заявил the docs:

ВАЖНО: Не забудьте очистить и восстановить базу данных правил перезаписи после изменения правил. Из экранов администрирования WordPress выберите «Настройки» -> «Постоянная ссылка» и просто нажмите «Сохранить изменения» без каких-либо изменений.

При добавлении нового правила перезаписи, что вам нужно нажать кнопку «Сохранить изменения» в странице администратора Permalinks (даже если вы ничего не меняющиеся на этой странице), чтобы убедиться, что Wordpress обновляет правила в базе данных.

+0

где я могу убедиться, что он обновляет базу данных? – charlie

+0

@charlie Вы можете попробовать [Rewrite Rules Inspector] (https://wordpress.org/plugins/rewrite-rules-inspector/) плагин. – mathielo

+0

ОК, я вижу правило там (^ магазин/([^ /] *) /? \t index.php? Page_id = 1247 & page = $ matches [1]), но на странице все еще отображается массив() с помощью print_r и ничего при использовании echo – charlie

Смежные вопросы