Как изменить базовый пул автора с группами и slug для использования nice_nickname?

Прочитав следующие предложения от Jan Fabry относительно перезаписи URL-адресов и пропусков автора, я взял вызов в объединении обоих решений в одном.

  • Измените базовый пул автора для разных ролей
  • Измените пул автора с имени пользователя на псевдоним

Цель: цель состоит в том, чтобы иметь структуру для авторов:

http://domain.tld/employees/(department|group)/firstname-lastname 

Текущее решение: для этого я объединил решения, как упоминалось в ответах:

 // NOTE: This need to be stored different and need to be attached to author/profile // Will be added to user settings so this can be changed (only primary group will be stored) $wpa04142013_author_groups = array( 'staff', 'admin', 'support', 'itnerds', 'etc' ); /* * Init WordPress to add globals which can be used for the authors and levels of the authors. */ add_action( 'init', 'wpa04142013_init' ); function wpa04142013_init() { global $wp_rewrite; $author_groups = $GLOBALS['wpa04142013_author_groups']; // Define the tag and use it in the rewrite rule add_rewrite_tag( '%author_group%', '(' . implode( '|', $author_groups ) . ')' ); $wp_rewrite->author_base = 'employees/%author_group%'; } 

Вышеупомянутое решение гарантирует, что author_base будет изменен по мере необходимости на основе цели, определенной в начале. После этого author_link нужно подключить к другому, чтобы использовать правильную ссылку на страницу архивного архива.

 add_filter( 'author_link', 'wpa04142013_author_link', 10, 3 ); function wpa04142013_author_link( $link, $author_id, $author_nicename ) { //NOTE: This if/else needs to be changed --> either select case and use // global defined groups based upon user property if ( 1 == $author_id ) { $author_group = 'staff'; } else { $author_group = 'admin'; } $link = str_replace( '%author_group%', $author_group, $link ); //Below solution added from other WordPress Answers suggestion $author_nickname = get_user_meta( $author_id, 'nickname', true ); if ( $author_nickname ) { $link = str_replace( $author_nicename, $author_nickname, $link ); } return $link; } 

После реализации выше ссылка на автора работает правильно, но запрос и переписывание URL не работают. При нажатии на ссылку автора будет создано 404 страницы для шаблона.

Если я не ошибаюсь, мне также необходимо изменить следующий раздел, но здесь все происходит неправильно.

 /* * Hook into 'request' to modify the author request. * Change the way the lookup works (via nickname in stead of the slug) */ add_filter( 'request', 'wpa04142013_request' ); function wpa04142013_request( $query_vars ) { if ( array_key_exists( 'author_name', $query_vars ) ) { global $wpdb; $author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) ); if ( $author_id ) { $query_vars['author'] = $author_id; unset( $query_vars['author_name'] ); } } return $query_vars; } add_filter( 'author_rewrite_rules', 'wpa04142013_author_rewrite_rules' ); function wpa04142013_author_rewrite_rules( $author_rewrite_rules ) { foreach ( $author_rewrite_rules as $pattern => $substitution ) { if ( FALSE === strpos( $substitution, 'author_name' ) ) { unset( $author_rewrite_rules[$pattern] ); } } return $author_rewrite_rules; } 

Я уже немного помог на форуме поддержки WordPress в Голландии , но я все еще придерживаюсь правильного решения. Также просмотрел перезаписи с помощью Rewrite Analyzer, но не смог найти author_group . Надеюсь, вы можете помочь мне указать мне в правильном направлении.

Solutions Collecting From Web of "Как изменить базовый пул автора с группами и slug для использования nice_nickname?"

Изменить: предыдущий ответ не работает. Следующее решение не предоставляет дезинфицированные прозвища, но должно делать трюк:

  $nn = urldecode($query_vars['author_name'] ); $author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $nn ) ); 

Я провел несколько дополнительных тестов и пришел к следующему выводу. Помимо вышеприведенного ответа требуется сбросить постоянные ссылки, чтобы применить изменения к функциям.php.

  1. Сохраните изменения в функции functions.php
  2. Открыть параметры -> Постоянная ссылка.

Не нужно сохранять изменения, достаточно просто посетить страницу, чтобы сбросить постоянные ссылки. Кроме того, необходимо проверить новые правила перезаписи с помощью Rewrite Analyzer, если изменения не доступны, выполните следующие шаги, чтобы очистить постоянные ссылки.

Переписать правила, касающиеся базы авторов и страницы с группами