Wordpress Автор Постоянные ссылки - PullRequest
2 голосов
/ 18 февраля 2011

Я знаю, как изменить базу постоянных ссылок автора, однако на моем сайте я обращаюсь к пользователям не по их имени пользователя, а по номеру, основанному на их идентификаторе пользователя, поэтому пользователь № 5 написал этот пост, а не JohnDoe123этот пост.

Проблема возникает, когда я захожу в архив этих пользователей и вместо того, чтобы увидеть что-то вроде example.com/authors/5/, я вижу example.com/authors/johndoe123/.

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

[wordpress_site_url] / авторы / [идентификатор_пользователя] /

1 Ответ

5 голосов
/ 19 февраля 2011

Это можно сделать, добавив новые правила перезаписи для каждого пользователя точно так же, как при изменении или удалении базы авторов.Таким образом, адаптируя код из предыдущего ответа , вы добавляете свои правила перезаписи примерно так:

add_filter('author_rewrite_rules', 'my_author_url_with_id_rewrite_rules');
function my_author_url_with_id_rewrite_rules($author_rewrite) {
  global $wpdb;
  $author_rewrite = array();
  $authors = $wpdb->get_results("SELECT ID, user_nicename AS nicename from {$wpdb->users}");    
  foreach ($authors as $author) {
    $author_rewrite["authors/{$author->ID}/page/?([0-9]+)/?$"] = 'index.php?author_name=' . $author->nicename . '&paged=$matches[1]';
    $author_rewrite["authors/{$author->ID}/?$"] = "index.php?author_name={$author->nicename}";
  }
  return $author_rewrite;
}

и затем фильтруете ссылку автора:

add_filter('author_link', 'my_author_url_with_id', 1000, 2);
function my_author_url_with_id($link, $author_id) {
  $link_base = trailingslashit(get_option('home'));
  $link = "authors/$author_id";
  return $link_base . $link;
}

На самом деле, я не думаю, что вам нужно создавать правила для каждого пользователя в этом случае, достаточно двух следующих правил:

add_filter('author_rewrite_rules', 'my_author_url_with_id_rewrite_rules');
function my_author_url_with_id_rewrite_rules($author_rewrite) {
  $author_rewrite = array();
  $author_rewrite["authors/([0-9]+)/page/?([0-9]+)/?$"] = 'index.php?author=$matches[1]&paged=$matches[2]';
  $author_rewrite["authors/([0-9]+)/?$"] = 'index.php?author=$matches[1]';
  return $author_rewrite;
}
...