WordPress как фильтровать несколько пользовательских post_type в URL

#php #wordpress #url #wordpress-theming #custom-wordpress-pages

#php #wordpress #url #wordpress-тематизация #пользовательские-wordpress-страницы

Вопрос:

В моем WordPress v5.6 я использую приведенный ниже код на странице автора, чтобы показать все сообщения текущего автора из пользовательской post_type песни.

 <?php
$author_page_link = esc_url(get_author_posts_url(false, ID->user_nicename));
?>
<a href="' . $author_page_link . '?post_type=song">All Songs</a>
 

Приведенная выше ссылка будет фильтровать все песни от текущего автора с URL-адресом ниже:

http://www.music.com/author/current_author/?post_type=song

Я хочу показать пользовательские сообщения «song» и «poem» от автора на странице фильтра.

Я пробовал ссылки ниже, но безуспешно:

 <a href="' . $author_page_link . '?post_type=song poem">All</a>
<a href="' . $author_page_link . '?post_type=songamp;post_type=poem">All</a>
 

Как я могу получить ссылку для фильтрации сообщений из нескольких пользовательских сообщений от одного автора?

Обновление 1

Я использовал archive-song.php шаблон, поэтому song на странице отображаются только пользовательские сообщения.

При использовании приведенного ниже URL-адреса с ?post_type=song poem , имеющего archive.php только в иерархии шаблонов, перенаправление URL на author.php .

http://www.music.com/author/current_author/?post_type=song poem

И если я использую приведенный ниже URL-адрес с ?post_type=songamp;post_type=poem , имея archive.php только в иерархии шаблонов, фильтруются только последние post_type результаты (может быть стихотворение или песня, в зависимости от того, что является последним запросом).

http://www.music.com/author/current_author/?post_type=songamp;post_type=poem

Обновление 2

Это моя страница автора (https://pastebin.com/kCrYebcD ). На этой странице отображаются только последние 10 сообщений от текущего автора всех типов сообщений.

Это страница моего архива (https://pastebin.com/twkWn5Bc ). Здесь я хочу показать все сообщения от автора из всех типов сообщений.

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

1. Как выглядит ваш файл шаблона автора? Не могли бы вы вставить свой author.php или аналогичный файл шаблона?

2. @Mikepote, ваш вопрос подводит меня к сути проблемы. Я показываю результаты приведенного выше запроса URL в archive-song.php . Обновляю мой вопрос.

3. хороший материал, но это все равно зависит от того, какую тему вы используете, потому что разные темы могут делать все, что захотят внутри archive.php или author.php . Решением было бы изменить эти файлы, чтобы разрешить включение нескольких типов сообщений в WPQuery. Итак, опубликуйте свой archive.php ?

4. Смотрите Обновленные примечания.

5. Я просмотрел ваши обновленные заметки. Кажется, что вы должны установить какой-то параметр для вашего author.php архивируйте, чтобы просто дополнить запрос по мере необходимости. Найдите этот параметр $_GET и выполните другой запрос на основе этого. Ваш «Вопрос», который читается в этом сообщении, заключается в фильтрации с использованием параметра URL, что и сделал мой ответ. Кажется, что остальная часть вашей проблемы — это действительно еще один вопрос?

Ответ №1:

Чтобы включить несколько типов сообщений с помощью параметра URL, вам нужно объявить его как массив.

Ваш URL-адрес должен выглядеть следующим образом:

 echo '<a href="' . $author_page_link . '?post_type[]=songamp;post_type[]=poem">All</a>';
 

Это должно сработать для вас.

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

1. URL перенаправляет на author.php страницу, а не archive.php .

2. Разве вы не хотите author.php страница, которая будет отображаться?

Ответ №2:

Хорошо, прежде всего, глядя на ваш код, вы должны получать некоторые ошибки, потому что вам не разрешено запускать php-код внутри html без php tags . Поэтому, если вы получите сообщение об ошибке, сначала убедитесь, что используете правильный синтаксис!

Второй момент в вашем коде, касающийся того custom post types , что при первой регистрации custom post type вы должны задать query_var аргумент true , если хотите использовать его как query var .

Итак, чтобы зарегистрировать его как a query_var , когда вы пытаетесь создать свой custom post type , выполните следующие действия: 'query_var' => true

ПРИМЕР РЕГИСТРАЦИИ ПОЛЬЗОВАТЕЛЬСКОГО ТИПА POST (обратите внимание на query_var аргумент)

 add_action( 'init', 'custom_poem_post' );

function custom_poem_post(){

$args = array(
        'public'             => true,
        'publicly_queryable' => true,
        'show_in_menu'       => true,
        'query_var'          => true, ############This has to be true in order for your custom post type to be recognized by the wordpress in the url
        'rewrite'            => array( 'slug' => 'poem' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
    );

    register_post_type( 'poem', $args );
}
 

Если это не a custom post type , то вы можете использовать query_vars фильтр для регистрации вашего пользовательского ключевого слова, например:

 add_filter("query_vars", "your_custom_query_vars");

function your_custom_query_vars($vars){
  $vars[] = "your_keyword_to_register_as_query_var";
  return $vars;
}
 

Тогда wordpress распознает его как a query var , и вы можете делать с ним все, что захотите.

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

1. 'query_var' => true, уже установлено, и я заметил, что это не оказывает никакого влияния.