Добавление правила перезаписи для пользовательской страницы автора

19 янв. 2012 г., 18:41:32
Просмотры: 15.4K
Голосов: 4

Пытался создать авторскую страницу с уникальным URL, и все работало хорошо, но при создании URL не учитывались два важных фактора:

  1. Конфликт имен авторов (одинаковые имена).
  2. Добавление пагинации на страницу автора (для его опубликованных записей).

Вот мое первоначальное правило:

function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('args');   
    add_rewrite_rule('writer\/(.*)','index.php?pagename=writer&args=$matches[1]','top'); 
    /* глобальная переменная $wp_rewrite;
    $wp_rewrite->flush_rules(); */
}
add_action('init', 'add_my_rule'); 

Это работало для URL вида:

www.myblog.com/writer/umesh-awasthi ,

Но если есть несколько авторов с одинаковым именем, это создаст проблему. Поэтому я планировал сделать URL авторов блога как на Stack Overflow:

www.myblog.com/writer/001/umesh-awasthi где 001 - это ID пользователя, который всегда уникален.

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

http://localhost/blog/wordpress/writer/umesh-awasthi/page/2/ и согласно моему правилу перезаписи я получу параметр umesh-awasthi/page/2, что означает, что мой запрос не будет работать, так как он ожидает имя автора как umesh-awasthi, а получает umesh-awasthi/page/2.

Вопрос: могу ли я переписать правило, чтобы получать данные в трех разных переменных:

  1. ID пользователя
  2. Имя автора
  3. Номер страницы (если есть)

Будучи новичком в WordPress и перезаписи URL, я не уверен, как этого добиться. Заранее спасибо за помощь.

0
Все ответы на вопрос 1
6
function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('args');   
    $wp->add_query_var('arg_username');
    add_rewrite_rule('writer/([0-9]+)/([^/]*)/page/([0-9]+)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]&paged=$matches[3]','top');
    add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top');
    /*global $wp_rewrite;
    $wp_rewrite->flush_rules();*/
}
add_action('init', 'add_my_rule');

Это должно сработать. Первое правило перезаписи для writer/user_id/username (имя пользователя не используется в правиле перезаписи, но необходимо для его работы). Второе правило аналогичное, но добавляет пагинацию.


РЕДАКТИРОВАНО: добавил arg_username в код выше.

19 янв. 2012 г. 20:43:00
Комментарии

это не работает, как ожидалось, используя приведенное выше правило, я получаю только user-id, а не имя автора. Это означает, что для www.myblog.com/writer/001/umesh-awasthi приведенное выше правило дает мне только 001, а не имя автора.

Umesh Awasthi Umesh Awasthi
20 янв. 2012 г. 18:44:00

Это работает так, как я сказал в своем ответе. Если у вас есть ID пользователя, вам не нужно имя пользователя. Если вам нужно и то, и другое, вы можете добавить еще один queryvar (например, arg_username) и добавить его в rewriterule: add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top'); (также измените это в другом rewriterule).

Rob Vermeer Rob Vermeer
20 янв. 2012 г. 18:48:20

возможно, я делаю что-то не так из-за недостатка знаний, но add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]','top'); add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top'); add_rewrite_rule('writer/([0-9]+)/([^/]*)/page/([0-9]+)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]&paged=$matches[3]','top'); правило все еще не дает мне имя автора.

Umesh Awasthi Umesh Awasthi
20 янв. 2012 г. 18:57:01

Отредактировал мой ответ.

Rob Vermeer Rob Vermeer
20 янв. 2012 г. 19:00:26

К сожалению, значение $paged всегда возвращается как 0. Я даже изменил значение на $page_num и добавил это в мою функцию $wp->add_query_var('paged_num');, но ничего не сработало.

Umesh Awasthi Umesh Awasthi
20 янв. 2012 г. 19:24:04

Моя ошибка, проверь обновленный ответ (правило перезаписи для страниц должно быть вверху).

Rob Vermeer Rob Vermeer
20 янв. 2012 г. 19:31:28
Показать остальные 1 комментариев