Отображение нескольких URL на одну страницу

20 нояб. 2011 г., 17:48:29
Просмотры: 23.1K
Голосов: 5

Я только что наткнулся на страницу с почти похожими требованиями, как у меня

Множественные конечные точки для одной страницы

Мне нужно достичь такой же функциональности, но я также хочу передать некоторые параметры на страницу, на которую будут отображаться все эти URL. Например:

http://mysite.com/test/link1
http://mysite.com/test/link2 
http://mysite.com/test/link3 

Я хочу отобразить их на один URL

http://mysite.com/test/finalDestination

Вместе с этим я также хочу отправить некоторые другие параметры, такие как:

  1. email пользователя
  2. имя пользователя

чтобы я мог использовать их на этой странице для своей пользовательской логики. Я знаю, как сделать это в JSP/Java, где я могу отправить их как параметры запроса в POST-запросе и получить их в финальном JSP

Как я могу достичь этого в WordPress используя PHP. Я предпочитаю не использовать строку запроса.

Или возможно ли создать URL вида:

http://mysite.com/test/user1
http://mysite.com/test/user2 
http://mysite.com/test/user3

где user1 и т.д. могут быть получены из базы данных, и мы можем гарантировать, что они будут уникальными во всем приложении и отображать эти URL на одну конечную точку. Как я могу получить имя пользователя на моей финальной странице?

Заранее спасибо

0
Все ответы на вопрос 3
18

Вы можете использовать тот же ответ, что и в указанном вами вопросе (я уже отвечал на него). Вот как нужно изменить код для передачи аргументов:

<?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');

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

22 нояб. 2011 г. 18:09:25
Комментарии

Спасибо за ваш вопрос. У меня есть страница с 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" для запроса к базе данных и получения его постов. Я не уверен, насколько это реализуемо.

Umesh Awasthi Umesh Awasthi
22 нояб. 2011 г. 18:19:29

Я попробовал ваш код следующим образом: $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

Umesh Awasthi Umesh Awasthi
26 нояб. 2011 г. 10:03:39

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

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 11:16:41

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

Umesh Awasthi Umesh Awasthi
26 нояб. 2011 г. 11:50:45

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

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 12:04:39

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

Umesh Awasthi Umesh Awasthi
26 нояб. 2011 г. 12:10:31

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

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 12:22:07

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

Umesh Awasthi Umesh Awasthi
26 нояб. 2011 г. 12:26:14

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

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 12:27:55

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

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 12:30:11

Я в чате, можешь написать мне там, если окажешься там

Umesh Awasthi Umesh Awasthi
26 нояб. 2011 г. 12:49:04

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

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 12:53:26

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

Umesh Awasthi Umesh Awasthi
26 нояб. 2011 г. 13:07:17

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

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 13:13:04

я пробовал с '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

Umesh Awasthi Umesh Awasthi
26 нояб. 2011 г. 13:29:07

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

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 13:47:17

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

Umesh Awasthi Umesh Awasthi
26 нояб. 2011 г. 14:07:52

Пожалуйста! Рад, что смог помочь! Вы сможете проголосовать/принять мой ответ позже, когда наберёте достаточно репутации! :)

Rutwick Gangurde Rutwick Gangurde
26 нояб. 2011 г. 14:18:38
Показать остальные 13 комментариев
0

Обязательно добавьте канонический 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;

WP Codex: get_user_by()

5 дек. 2012 г. 11:47:20
1
-1

Если я правильно понял ваши слова, возможные решения находятся здесь:

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

Для второй части вы можете использовать %author% в структуре постоянных ссылок. Ознакомьтесь с кодексом.

21 нояб. 2011 г. 11:23:27
Комментарии

Можем ли мы сделать это без плагина, так как я не в восторге от использования плагинов, когда вещи можно реализовать с помощью некоторых модификаций.

Umesh Awasthi Umesh Awasthi
21 нояб. 2011 г. 15:45:59