#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,
уже установлено, и я заметил, что это не оказывает никакого влияния.