Передача и получение параметров запроса в WordPress

31 янв. 2011 г., 20:48:53
Просмотры: 26.6K
Голосов: 17

У меня есть две страницы авторов, одна отображает около 5 записей. Затем я пытаюсь настроить другую страницу, которая будет показывать все их записи. Я создал шаблон под названием moreauthorposts.php и пытаюсь передать переменную автора на эту страницу. Проблема в том, что если я передаю domain.com/more-author-posts?author=johndoe, она удаляется. Как я могу получить это значение? Возможно ли это вообще в WordPress? Я знаю, что WP Rewrite как-то меняет структуру моего URL, просто не уверен как именно.

Я пробовал:

get_query_var('author')

и пытался разобраться с этим, но безуспешно:

http://codex.wordpress.org/Query_Overview

Есть предложения?

Спасибо.

0
Все ответы на вопрос 1
8
22

Я почти уверен, что author является встроенным, поэтому используйте что-то вроде author_more. Сначала вам нужно добавить эту переменную в query_vars. Пример:

// добавляем `author_more` к query vars
add_filter( 'init', 'add_author_more_query_var' );
function add_author_more_query_var()
{
    global $wp;
    $wp->add_query_var( 'author_more' );
}

Затем в вашем шаблоне more-author-posts.php вызывайте её так:

if ( get_query_var( 'author_more' ) )
{
    // делаем что нужно
}

Обновление

Это работает в следующем примере URL/варианте использования:

http://example.com/index.php?author_more=value

Но если вы хотите использовать это как "красивый" URL, вам нужно добавить правило перезаписи:

add_action('init','add_author_more_rewrite_rule');
function add_author_more_rewrite_rule()
{
    add_rewrite_rule(
        'more-author-posts/(\d*)$',
        'index.php?author_more=$matches[1]',
        'top'
    );
}

Теперь вы можете использовать это так:

http://example.com/more-author-posts/value
31 янв. 2011 г. 21:02:52
Комментарии

Хорошо, я добавил query vars в functions.php. Затем добавил другой код в мои дополнительные посты автора. Какой должна быть правильная структура URL для передачи этих параметров? Я знаю, что paged использует формат /page/2, но попытка использовать more-author-posts/more_author/johndoe, кажется, не работает?

codeisforeva codeisforeva
31 янв. 2011 г. 22:03:43

я обновил ответ

Bainternet Bainternet
31 янв. 2011 г. 22:32:53

Проблема в том, что я не пытаюсь передать переменные в index.php. Я пытаюсь передать их в пользовательский шаблон, который я разработал, так как он выглядит совершенно иначе, чем index. Поэтому если я передаю значения в moreauthor.php?author_more=johndoe... это, кажется, не работает. Я что-то делаю не так?

codeisforeva codeisforeva
31 янв. 2011 г. 22:46:31

@בניית אתרים выглядит очень понятным ответом! @codeisforeva Разве вы должны вызывать файл шаблона напрямую? index.php — это всего лишь корневой файл WordPress, все правила перезаписи должны проходить через него.

goldenapples goldenapples
1 февр. 2011 г. 00:20:09

Значит, в WordPress невозможно настроить пользовательский шаблон и передавать в него свои переменные? Кажется, это было бы серьезным ограничением платформы.

codeisforeva codeisforeva
1 февр. 2011 г. 16:52:24

Получилось сделать через index.php, большое спасибо за помощь. Просто странно, что это нельзя сделать с другими шаблонами.

codeisforeva codeisforeva
1 февр. 2011 г. 22:54:12

не совсем, потому что вы можете управлять всеми GET-запросами через один файл index.php

Bainternet Bainternet
1 февр. 2011 г. 23:17:17

@codeisforeva: Файл index.php в правилах перезаписи — это index.php в корневой директории WordPress, а не index.php в вашем файле шаблона. Вы по-прежнему можете выбирать, какой шаблон должен отображаться, используя фильтр template_include.

Jan Fabry Jan Fabry
7 февр. 2011 г. 19:29:36
Показать остальные 3 комментариев