在我的WordPressv5.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
我想同时显示";歌曲";以及";诗"在筛选页面中自定义作者的帖子。
我试过下面的一个链接,没有运气:
<a href="' . $author_page_link . '?post_type=song+poem">All</a>
<a href="' . $author_page_link . '?post_type=song&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=song&post_type=poem
一起使用,并且仅在模板层次结构中具有archive.php
,则仅过滤最后的post_type
结果(可以是诗歌或歌曲,以最后的查询为准)。
http://www.music.com/author/current_author/?post_type=song&post_type=poem
更新2
这是我的作者页面(https://pastebin.com/kCrYebcD)。此页面仅显示所有文章类型的当前作者的最新10篇文章。
这是我的存档页面(https://pastebin.com/twkWn5Bc)。在这里,我想显示来自所有帖子类型的作者的所有帖子。
要通过URL参数包含多个Post类型,需要将其声明为数组。
你的URL应该是这样的:
echo '<a href="' . $author_page_link . '?post_type[]=song&post_type[]=poem">All</a>';
这应该对你有用。
好的,首先,查看您的代码,您应该会遇到一些错误,因为不允许在没有php tags
的情况下在html中运行php代码。因此,如果您遇到错误,请确保首先使用正确的语法!
代码中关于custom post types
的第二点是,当您第一次注册custom post type
时,如果您想将query_var
参数用作query var
,则应将其设置为true
。
因此,当您尝试创建custom post type
时,要将其注册为query_var
,请执行以下操作:'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 );
}
如果它不是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会把它识别为query var
,你可以用它做任何你想做的事