Как Создать Шаблон Для Пользовательского Uri, Связанного С Пользователем

  • Автор темы Cas1245
  • Обновлено
  • 21, Oct 2024
  • #1

Я работаю над сайтом, где использую плагин под названием Любимые сообщения поэтому вошедшие в систему пользователи могут добавить сообщение (собственный тип сообщения) в избранное.

Я создал страницу под названием

 query_vars 
which allows the logged-in user to see the posts he has favorited.

Теперь мне нужно создать страницу, которая позволит другому пользователю или посетителю проверять избранное этого пользователя.

Итак, мне нужно уметь делать три вещи:

  1. Получите функцию, связанную с автором, которая возвращает ссылку типа [favorite-post user_id = ""] which I can append to /favorites to get the link - [favorite-post] ( favorites.php and the_author_posts_url() ссылка, похоже, ведет на сайт и get_the_author() outputs the a tag with the name. any function to just get the url or maybe modify author to show user instead?)

  2. Заставьте WordPress использовать шаблон под названием the_author_link() to display this page. (If the structure matches, then how do I tell WordPress which template to use?)

  3. Получите идентификатор пользователя, чтобы показать его/ее избранное example.com/user/username/favorites shortcode in my template file and can pass a parameter called

    example.com/user/username

    посетитель. Прямо сейчас я использую

Будет ли он автоматически получать идентификатор пользователя, если страница разветвлена ​​из /author? я нашел это статья my-favorites which I am not using. How do I make it work for the favorites page? Most other similar questions asked here were solved using a slug for the custom post type or taxonomy.

но он по-прежнему имеет дело с пользовательскими типами сообщений и

Cas1245


Рег
26 Jan, 2008

Тем
77

Постов
208

Баллов
593
  • 25, Oct 2024
  • #2

Прежде всего, вам нужна функция (тег шаблона) для отображения URL-адреса. Вы можете написать собственную функцию, которая выводит URL-адрес в нужном вам формате, однако размещение имени пользователя в общедоступном URL-адресе может стать проблемой безопасности.

Функция может обрабатывать ссылку и принимать аргумент.

 
 
 
 
 example.com/user/username/favorites 
that can be a user id or a user object. If non is passed, the function will try to use current post author (if in the loop).

example.com/my-favorites

Теперь вам нужно заставить WordPress понимать URL-адреса такого типа. Для этой цели вам необходимо использовать правило перезаписи.

В ОП вы сказали, что не используете переменные запросов, но вам следует это сделать. Проблема в том, что если вы хотите использовать красивую постоянную ссылку, вам придется использовать правило перезаписи, и любой параметр, добавленный с помощью правила перезаписи, доступен только через переменную запроса, а не через //favorites.php $user_required = user_favorites_get_user(); $user = FALSE; if ( ! empty($user_required ) ) { $user = get_user_by( 'login', $user_required ); } elseif ( is_user_logged_in() ) { $user = wp_get_current_user(); } if ( $user instanceof WP_User && $user->exists() ) { echo do_shortcode( '[favorite-post user_id = "' . $user->ID . '"]' ); } else { echo 'No user selected.'; } .

Так:

'favorites.php'

После добавления этого кода зайдите в свой бэкэнд и посетите страницу "Настройки -> Постоянные ссылки", чтобы сбросить правила перезаписи.

Теперь у вас есть формат URL-адреса, и когда вы посещаете этот URL-адрес, WordPress установит переменную запроса «Избранное», заполнив ее необходимым именем пользователя.

Однако мы не будем загружать страницу «Избранное» WordPress при вызове этого URL-адреса.

Я предлагаю вам создать собственный шаблон страницы и назначить ему страницу «Мое избранное».

Итак, создайте новый файл php, назовите его user_favorites_template , and inside it write only this:

user_favorites_get_user

Ничего больше.

Теперь в бэкэнде создайте страницу (если у вас ее еще нет) и назначьте ей только что созданный шаблон.

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

'page-favorites.php'

С помощью этого кода мы сообщаем WordPress вызвать первую страницу с шаблоном. function user_favorites_noquery( $query ) { if ( is_admin() || ! $query->is_main_query() || ! $query->is_home() ) return; $user = $query->get('favorites'); if ( ! empty($user) ) { $mq = array( 'meta_key' => '_wp_page_template', 'meta_value' => 'page-favorites.php' ); $query->set( 'post_type', 'page' ); $query->set( 'meta_query', array($mq) ); $query->set( 'posts_per_page', 1); $query->query['favorites'] = NULL; $query->query_vars['favorites'] = NULL; user_favorites_get_user( $user ); add_filter( 'template_include', 'user_favorites_template', 9999 ); // following line is to prevent WordPress redirect to the page standard url remove_filter('template_redirect', 'redirect_canonical'); } } add_action( 'pre_get_posts', 'user_favorites_noquery' ); function user_favorites_get_user( $user = NULL ) { static $the_user = NULL; if ( ! empty($user) ) $the_user = $user; return $the_user; } function user_favorites_template() { return get_template_directory() . '/favorites.php'; } when the favorites url is required.

Функция <?php /* Template Name: My Favorites */ require( 'favorites.php' ); is an helper function we use to save the required user, avoiding the use of global variables.

Функция 'page-favorites.php' force WordPress to load 'favorites.php' as template.

Внутри function user_favorites_rule() { add_rewrite_rule( 'user/([^/]+)/favorites', 'index.php?favorites=$matches[1]', 'top' ); } add_action( 'init', 'user_favorites_rule', 1 ); function user_favorites_var( $vars ) { $vars[] = 'favorites'; return $vars; } add_filter( 'query_vars', 'user_favorites_var' ); the relevant part is to output the shorcode for user favorites posts.

Есть 2 возможности: пользователь вошел в систему и хочет видеть свои избранные публикации, или кто-то (вошедший в систему или нет) хочет видеть публикации, добавленные пользователем в избранное.

Это может быть переведено в таком коде:

$_GET

Теперь, когда пользователь вошел в систему, он/она может посетить URL-адрес. function get_user_favorites_url( $user = NULL ) { if ( is_int($user) ) $user = new WP_User( $user ); if ( ! $user instanceof WP_User ) $user = get_the_author(); if ( $user instanceof WP_User && $user->exists() ) { return home_url( 'user/' . $user->user_login . '/favorites' ); } } (if 'my-favorites' is the slug of the page assigned to "My Favorites" page template) to see his/her own posts.

Любой вошедший или незарегистрированный посетитель может использовать URL-адрес типа $user and vieving the favorites post for that specific user.

 

Lilena


Рег
05 May, 2011

Тем
75

Постов
169

Баллов
584
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно