Intereting Posts
Откуда появляются изображения с размерами? Проблемы с попыткой получить элемент по идентификатору Применить код для всего остального первого блока Возможность создания CSS-сайта на нескольких сайтах Есть ли хороший способ использовать SVN для каталога загрузок? Как я могу найти «общедоступный» путь к файлу? Таблица wp_options имеет повторяющиеся строки, а первичный ключ / автоинкремент удален как удалить всех пользователей и сообщений на основе 'user_meta'? Пользовательская постоянная ссылка ведет на страницу индекса Как использовать файл style.css вне субдомена wordpress? Использование ob_start () в плагине Сбор информации о пользователе при нажатии ссылки на скачивание Wp_user_query поиск по meta_key не возвращает никаких результатов Как обновить meta сообщения внутри цикла WP_Query или цикла WordPress? Как добавить следующие и предыдущие ссылки только на один пользовательский тип сообщения?

Пользовательский пользователь WordPress постоянная ссылка

У меня небольшая проблема с моим сайтом wordpress. Мне нужно изменить постоянные ссылки пользователя. Постоянная ссылка должна содержать данные из таблицы wp_usermeta. Я сделал некоторые функции, и ссылки были изменены, но когда я обращаюсь к ним, он говорит: Страница не найдена. Я куплю вам пиво, если вы скажете мне, что не так в моем коде. Вот код:

add_filter( 'request', 'wpse5742_request' ); function wpse5742_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'] ) ); $query_vars['author'] = $author_id; unset( $query_vars['author_name'] ); } return $query_vars; } add_filter( 'author_link', 'wpse5742_author_link', 10, 3 ); function wpse5742_author_link( $link, $author_id, $author_nicename ) { $part1 = get_user_meta( $author_id, 'nickname', true ); $part2 = get_user_meta( $author_id, '_themex_city', true ); $part3 = get_user_meta( $author_id, '_themex_thesubject', true ); $newlink = $part1.'/'.$part2.'/'.$part3; if ( $newlink ) { $link = str_replace( $author_nicename, $newlink, $link ); } return $link; } add_action( 'user_profile_update_errors', 'wpse5742_set_user_nicename_to_nickname', 10, 3 ); function wpse5742_set_user_nicename_to_nickname( &$errors, $update, &$user ) { if ( ! empty( $user->nickname ) ) { $user->user_nicename = sanitize_title( $user->nickname, $user->display_name ); } } 

Постоянная ссылка, которую я хочу создать: example.com/username/city/occupation

Solutions Collecting From Web of "Пользовательский пользователь WordPress постоянная ссылка"

проблема с этим вопросом и множество вопросов, подобных этому, – это то, что было отмечено @Milo в комментариях: если вы пишете правило перезаписи для обработки пользовательского url, это противоречит правилам WordPress, например, если ваши URL-адреса находятся

 htt://example.com/username/city/occupation 

как WordPress может знать, действительно ли вы смотрите на страницу, на которой вы работаете с дочерью страницы страницы granchild страницы?

Ответ не может , если вы не делаете запрос в базе данных, чтобы узнать, является ли username действительным именем пользователя или нет.

Чтобы упростить такие вещи, я написал плагин под названием «Умные правила», и в этом ответе я буду использовать технику, которую я использовал для этого плагина. Этот метод не может использоваться внутри тем, но его нужно использовать в плагинах, поэтому для этого anwser я пишу небольшой плагин, который использует 2 функции, взятые из вашего кода (немного оптимизирован) и небольшой класс, который будет делать магию ,

Как это работает

  1. Я создаю класс, который расширяет класс WP .
  2. Затем я заменяю глобальную переменную $wp (которая обычно содержит экземпляр WP ) с экземпляром моего класса. Этот метод содержит только метод: parse_request который переопределяет метод WP , поэтому, когда WordPress вызывает parse_request один из моих классов вызывается вместо основного.
  3. В этом методе я проверяю текущий URL-адрес, если кажется, что мы хотим настроить таргетинг. Я проверяю первую часть URL-адреса, и если это действительное имя пользователя, настроенное на вазы запросов, в противном parse_request запустить core parse_request .

Код

 <?php /** * Plugin Name: GM Custom Author Url WPSE Q#122829 * Plugin URI: http://wordpress.stackexchange.com/questions/122829/custom-wordpress-user-permalink * Author: GM * Author URI: http://wordpress.stackexchange.com/users/35541/gm * */ class GMWPE extends WP { function parse_request( $extra_query_vars = '' ) { $home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' ); $full = str_replace( $home_path, '', add_query_arg( array() ) ); $sane_array = explode( '?', $full ); $sane = trim( $sane_array[0], '/\\' ); $parts = array_filter( explode( '/', $sane ) ); if ( count($parts) === 3 ) { $maybe_author = $parts[0]; $user = get_user_by('slug', $maybe_author); if ( $user !== false ) { remove_filter( 'template_redirect', 'redirect_canonical' ); $this->query_vars = array( 'author' => $user->ID ); return; } } parent::parse_request( $extra_query_vars = '' ); } } add_action( 'setup_theme', 'GMWPE_init', 9999 ); function GMWPE_init() { global $wp; if ( get_class( $wp ) === 'WP' ) $wp = new GMWPE(); } add_filter( 'author_link', 'gmcau_author_link', 10, 3 ); function gmcau_author_link( $link, $author_id, $author_nicename ) { $part2 = get_user_meta( $author_id, '_themex_city', true ); $part3 = get_user_meta( $author_id, '_themex_thesubject', true ); if ( $part2 && $part3 ) { $newlink = $author_nicename . '/' . $part2 . '/' . $part3; $link = home_url( $newlink ); } return $link; } add_action( 'user_profile_update_errors', 'gmcau_set_user_nicename_to_nickname', 10, 3 ); function gmcau_set_user_nicename_to_nickname( &$errors, $update, &$user ) { if ( ! empty( $user->nickname ) ) { $user->user_nicename = sanitize_title( $user->nickname, $user->display_name ); } } 

Это единственное, что вам нужно (вы можете удалить функции, которые вы опубликовали). Сохраните этот код в файле, поместите его в свою папку плагинов и активируйте его на панели инструментов.


PS: если вы заинтересованы в том, чтобы посмотреть мой плагин, который использует эту технику для гибкой обработки URL-адресов, вы можете найти ее здесь .