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

16

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

Я пробовал:

get_query_var('author')

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

http://codex.wordpress.org/Query_Overview

Предложения?

Благодарю.

codeisforeva
источник

Ответы:

21

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

// add `author_more` to 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' ) )
{
    // do your stuff
}

Обновить

Это работает в следующем примере / варианте использования 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
Bainternet
источник
Итак, я добавил запрос Vars в functions.php. Затем добавил другой код в мои сообщения автора. Какова будет правильная структура URL для прохождения? Я знаю, что paged использует формат / page / 2, но кажется, что делать больше-author-posts / more_author / johndoe не работает?
codeisforeva
я обновил ответ
Bainternet
Проблема в том, что я не пытаюсь передать переменные в index.php. Я пытаюсь передать их в пользовательский шаблон, который я разработал, так как он выглядит совершенно иначе, чем индекс. Так что, если я передам значения moreauthor.php? Author_more = johndoe .. это, похоже, не работает. Здесь что-то не так?
codeisforeva
@ בניית אתרים выглядит очень четким ответом! @codeisforeva Вы не должны вызывать файл шаблона напрямую, не так ли? index.php - это просто корневой файл WordPress, каждое правило переписывания должно проходить там.
золотые яблоки
1
@codeisforeva: index.phpПравило перезаписи находится index.phpв корневом каталоге WordPress, а не index.phpв файле шаблона. Вы все еще можете выбрать, какой шаблон должен отображаться, подключившись к template_includeфильтру.
Ян Фабри