WordPress如何过滤URL中的多个自定义post_type



在我的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,你可以用它做任何你想做的事

相关内容

  • 没有找到相关文章

最新更新