Условная постоянная ссылка WordPress

#php #wordpress

#php #wordpress

Вопрос:

У меня есть определенная страница на моем веб-сайте WordPress example.com/download/ , для которой у меня уже есть страница. Я хотел бы добавить какой-то php-код, чтобы включить следующие функции.

  • Если есть подпуть после /download/<name> , я хотел бы получить файл из некоторого каталога на основе <name>
  • Если не указан подпуть ( /download/ ), я хочу отобразить страницу, которая уже написана

Возможно ли это с помощью перехватов / фильтров WordPress?

У меня такое чувство, что это как-то связано с классом WP_Rewrite, но я не уверен точно, что писать, и куда его поместить без WP или обновлений темы, стирающих код

Ответ №1:

Да, вам нужно добавить пользовательское правило перезаписи. Вы можете использовать functions.php чтобы добавить новую функциональность.

 function custom_rewrite_rule() {
    add_rewrite_rule('^download/([^/] )/?','your_url_to_the_downloader_file.php?download=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
  

Чтобы это заработало, сначала вам нужно перейти Admin -> Settings -> Permalinks и нажать кнопку сохранить, чтобы было добавлено новое правило.

Комментарии:

1. Именно то, что я искал. Спасибо

2. Просто попытался включить это. Я получил сообщение об ошибке function custom_rewrite_rule() { add_rewrite_rule('^download/([^/] )/?','/wp-content/download_content/$matches[1]','top'); } add_action('init', 'custom_rewrite_rule', 10, 0); Warning: Cannot modify header information - headers already sent by (output started at /home/content/20/10282520/html/wp-content/themes/theme-child/functions.php:4) in /home/content/20/10282520/html/wp-includes/pluggable.php on line 1203

3. Неважно. Полная опечатка. Вот что я получаю за ночное программирование без кофе 🙂