Отображение нескольких URL на одну страницу
Я только что наткнулся на страницу с почти похожими требованиями, как у меня
Множественные конечные точки для одной страницы
Мне нужно достичь такой же функциональности, но я также хочу передать некоторые параметры на страницу, на которую будут отображаться все эти URL. Например:
http://mysite.com/test/link1
http://mysite.com/test/link2
http://mysite.com/test/link3
Я хочу отобразить их на один URL
http://mysite.com/test/finalDestination
Вместе с этим я также хочу отправить некоторые другие параметры, такие как:
- email пользователя
- имя пользователя
чтобы я мог использовать их на этой странице для своей пользовательской логики. Я знаю, как сделать это в JSP/Java, где я могу отправить их как параметры запроса в POST-запросе и получить их в финальном JSP
Как я могу достичь этого в WordPress используя PHP. Я предпочитаю не использовать строку запроса.
Или возможно ли создать URL вида:
http://mysite.com/test/user1
http://mysite.com/test/user2
http://mysite.com/test/user3
где user1 и т.д. могут быть получены из базы данных, и мы можем гарантировать, что они будут уникальными во всем приложении и отображать эти URL на одну конечную точку. Как я могу получить имя пользователя на моей финальной странице?
Заранее спасибо

Вы можете использовать тот же ответ, что и в указанном вами вопросе (я уже отвечал на него). Вот как нужно изменить код для передачи аргументов:
<?php
add_action('init', 'add_my_rule');
function add_my_rule()
{
global $wp;
$wp->add_query_var('args');
add_rewrite_rule('test\/finaldestination\/(.*)','index.php?pagename=about&args=$matches[1]','top');
}
?>
Предполагая, что 'finaldestination' всегда остается неизменным, а имя страницы (слаг) - 'about' (вы можете изменить оба параметра). Примените свой пользовательский шаблон к этой странице, и в шаблоне сделайте следующее:
// если вы посетите http://.../test/finaldestination/name/romeo, то $params будет содержать name/romeo. Вы можете разбить эту строку и получить значение.
$params = get_query_var('args');
После добавления этого кода в ваш файл, просто перейдите в Настройки>Постоянные ссылки
и нажмите кнопку сохранения.
Я не проверял этот конкретный код, но использовал нечто подобное в недавнем проекте и уверен, что он будет работать.

Спасибо за ваш вопрос. У меня есть страница с URL http://localhost/blog/wordpress/author/admin/, где отображаются посты автора. У меня есть файл author.php, в котором я использую пользовательский запрос на основе некоторых параметров. Всё, что мне нужно - это чтобы при наличии автора с именем "my-author" URL выглядел как http://localhost/blog/wordpress/author/my-author/, но при этом сопоставлялся с "http://localhost/blog/wordpress/author/admin/", и я мог бы использовать "my-author" для запроса к базе данных и получения его постов. Я не уверен, насколько это реализуемо.

Я попробовал ваш код следующим образом: $wp->add_query_var('args'); add_rewrite_rule('author/(.*)','index.php?pagename=author&args=$matches[1]','top'); И когда я попытался обратиться по URL http://localhost/blog/wordpress/author/my-work/, я получил ошибку 404

Почему вы пытаетесь создать такой URL? В WordPress уже есть архив автора по этому URL. Так что http://localhost/blog/author/my-author
всегда будет указывать на архивную страницу для my-author
. Кроме того, одной из возможных причин может быть то, что author
- это зарезервированный термин в WordPress. Вам стоит попробовать использовать другой термин вместо author. И еще - ваш slug страницы действительно author
?

Я не совсем понимаю, что вы имеете в виду под слагом страницы 'author', так как я новичок на платформе, и это меня запутывает. Дело в том, что эти авторы будут гостями, без сохраненного профиля, или мы не будем создавать учетную запись пользователя для них. Все, что мы можем сделать, это сохранить поле имени автора в пользовательском разделе записи и использовать его для получения его/ее записей.

Ох... если вы новичок на платформе, то вам не стоит экспериментировать с URL. То, что вы пытаетесь сделать, потребует гораздо большего, чем простое правило перезаписи URL! Один из способов — добавить ключ метаполя (например, имя автора) к URL и затем получать записи, которые имеют этот мета-ключ.

Вот чего я пытаюсь достичь. Моя тема уже имеет файл author.php, поэтому я пытаюсь сделать так, чтобы при вводе URL, например localhost/blog/wordpress/author/aum-kumar, каждый URL с шаблоном localhost/blog/wordpress/author/ перенаправлялся на страницу author.php, где я могу использовать последний параметр как значение для поиска. В моем случае "aum-kumar" будет значением метаполя, но пока мне не удается этого добиться.

Вам не нужно писать новое правило, потому что то, что вам нужно, уже существует. Вы можете создать аккаунт для гостевого автора с ролью Contributor
, чтобы он мог написать пост, но не публиковать его. Таким образом, его архивная страница будет доступна именно так, как вы хотите, без переписывания URL. Подробнее о ролях в WordPress: http://codex.wordpress.org/Roles_and_Capabilities

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

давайте продолжим это обсуждение в чате

@Модератор Система не позволяет мне общаться в чате, похоже, у меня нет 20 репутации в сети!

Я уже пытался общаться в чате! Но по какой-то причине мне не разрешают!

это действительно печально, не мог бы ты подсказать, как мне этого добиться? Потому что я застрял здесь

Объяснение довольно длинное, но я дам несколько советов. Во-первых, не используй термин author
, используй что-то другое при написании правила. Используй параметр args
, чтобы передать имя автора в ваш файл шаблона, а затем получить и отобразить записи, используя это имя.

я пробовал с 'writer', даже что-то вроде add_action('init', 'add_my_rule');
function add_my_rule() {
global $wp;
$wp->add_query_var('args');
add_rewrite_rule('writer\/(.*)','index.php?pagename=author&args=$matches[1]','top'); } но всё равно не работает. Кстати, у меня есть страница author.php как пользовательская страница в директории моей темы, но всё равно получаю 404

Вам также потребуется изменить ярлык страницы! Отредактируйте страницу, к которой вы применили шаблон, и измените ярлык на writer
. Затем в этом правиле замените pagename=author
на pagename=writer
. После этого перейдите в Настройки>Постоянные ссылки
и просто нажмите "Сохранить".

Я понял, что вы имели в виду. Я не создавал страницу через панель администратора, но после создания страницы и назначения ей моего пользовательского шаблона она также отображается в меню. Могу ли я попросить WordPress не показывать её в меню/подменю? У меня нет возможности проголосовать за ваш ответ, но вы сделали мой день :) Спасибо за вашу помощь!

Обязательно добавьте канонический URL в заголовок дублирующихся страниц, ссылающийся на основной экземпляр страницы... иначе вы получите дублирующийся контент — что плохо для SEO (имеет значение только если эти страницы публичные и индексируются).
Также можно использовать author.php темы или постоянную ссылку %author%, если это обычные пользователи WordPress. Доступ к данным автора можно получить следующим образом:
$author = get_user_by('slug', $author_name);
$author_id = (int)$author->ID;
$name = $author->first_name.' '.$author->last_name;

Если я правильно понял ваши слова, возможные решения находятся здесь:
Для первой части вы можете использовать плагин WordPress Redirection, чтобы легко удовлетворить ваши потребности.
Для второй части вы можете использовать %author% в структуре постоянных ссылок. Ознакомьтесь с кодексом.
