Как создать динамическую страницу в WordPress?

20 июл. 2012 г., 11:11:53
Просмотры: 15.4K
Голосов: 4

Я хочу создать что-то похожее на то, как BuddyPress делает страницы участников. Например: http://www.example.com/members/foo

http://www.example.com/members/bar

и т.д.

Я попытался изучить код BuddyPress и увидел, что они не используют пользовательские типы записей или таксономии. Также не похоже, что они используют add_rewrite_rule().

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

ОБНОВЛЕНИЕ:

Я следовал инструкциям из этой темы, которая как раз то, что мне нужно: Как создать профиль пользователя с дружественным URL

Вот код:

    add_filter( 'query_vars', 'analytics_rewrite_add_var' );
function analytics_rewrite_add_var( $vars )
{
    $vars[] = 'analytic'; // Добавляем переменную analytic в массив query_vars
    return $vars;
}

function add_analytic_rewrite_rule(){
    add_rewrite_tag( '%analytic%', '([^&]+)' ); // Добавляем тег перезаписи
    add_rewrite_rule(
        '^analytics/([^/]*)/?', // Паттерн URL для перезаписи
        'index.php?analytic=$matches[1]', // Куда перенаправлять
        'top' // Приоритет
    );
}
add_action('init', 'add_analytic_rewrite_rule'); // Вешаем на хук init

add_action( 'template_redirect', 'analytics_rewrite_catch' );
function analytics_rewrite_catch()
{
    global $wp_query;

    if ( array_key_exists( 'analytic', $wp_query->query_vars ) ) {
        include ( get_stylesheet_directory() . '/html/analytics.php'); // Подключаем наш шаблон
        exit;
    }
}

Однако URL вида /analytics/foo/ все равно возвращает 404 ошибку. Что я делаю не так?

6
Комментарии

можете уточнить... какой контент вы хотите видеть на странице? если вам нужна отдельная страница для каждого Автора (как участники в BuddyPress), то это возможно

Damien Damien
20 июл. 2012 г. 11:27:24

Контент может быть любым. Для обсуждения предположим, что я просто хочу вывести последнюю часть URL, например "foo" или "bar".

Deepak Mittal Deepak Mittal
20 июл. 2012 г. 11:38:00

можно ли это сделать через перезаписанную get-переменную? например ?members=foo в members/foo ? Таким образом у нас будет одна страница, которая меняется в зависимости от get-переменной.

Sisir Sisir
20 июл. 2012 г. 13:10:58

@DeepakMittal, пожалуйста, уточните таксономию, для которой вам нужен пример: /category/foo или /tag/foo. WordPress должен знать, что такое foo. Если foo — это ЗАГОЛОВОК записи, то /foo будет просто заголовком записи или страницы.

Damien Damien
20 июл. 2012 г. 18:51:05

@Damien, это просто произвольная строка. Это может быть что угодно. И нет никакой таксономии.

Deepak Mittal Deepak Mittal
20 июл. 2012 г. 18:55:34

Обратите внимание, что после внесения подобных изменений необходимо пересохранить постоянные ссылки. Перейдите в Настройки → Постоянные ссылки и сохраните изменения. Это сохранит новое правило в базе данных.

Otto Otto
22 июл. 2012 г. 00:03:05
Показать остальные 1 комментариев
Все ответы на вопрос 2
1

Вот ответ. И на будущее, Дипак, тебе нужно публиковать решение именно как ответ. Вместо этого ты разместил свой ответ в собственном вопросе и затем оставил комментарий об этом. Пожалуйста, не делай так.

function analytics_rewrite_add_var( $vars ) {
    $vars[] = 'analytic';
    return $vars;
}
add_filter( 'query_vars', 'analytics_rewrite_add_var' );

function add_analytic_rewrite_rule() {
    add_rewrite_tag( '%analytic%', '([^&]+)' );
    add_rewrite_rule(
        '^analytics/([^/]*)/?',
        'index.php?analytic=$matches[1]',
        'top'
    );
}
add_action('init', 'add_analytic_rewrite_rule');

function analytics_rewrite_catch() {
    global $wp_query;

    if ( array_key_exists( 'analytic', $wp_query->query_vars ) ) {
        include ( get_stylesheet_directory() . '/html/analytics.php');
        exit;
    }
}
add_action( 'template_redirect', 'analytics_rewrite_catch' );
21 июл. 2012 г. 01:59:07
Комментарии

@Deepak - Если вы нашли решение своего вопроса, вам следует оставить вопрос как есть, а решение опубликовать в качестве ответа на свой собственный вопрос.

Androliyah Androliyah
21 июл. 2012 г. 22:31:13
2
-2

Спасибо, чувак. Возможно, я недостаточно ясно выразился в своем вопросе. У меня была точно такая же проблема: Как создать профиль пользователя на фронтенде с дружественным ЧПУ

Я исправил ее с помощью кода, который вставил в своем вопросе выше. Я забыл сбросить правила, о чем меня попросил MadLem в IRC, и теперь все работает.

Извините за неясность и спасибо, что нашли время ответить :)

20 июл. 2012 г. 18:57:05
Комментарии

Дипак, я думаю, что код, который ты опубликовал в обновлении, должен быть внутри этого Ответа...

brasofilo brasofilo
20 июл. 2012 г. 19:30:55

Подумал, что копирование того же кода не будет хорошей идеей.

Deepak Mittal Deepak Mittal
21 июл. 2012 г. 11:21:14