admin管理员组文章数量:1415476
I have a custom post type staff
. and a custom field alphabet
for posts in that post type. Each staff will be assigned to a letter either A
or B
... Z
based on the first letter of the staff's name.
On the directory page there will be navigation links A
, B
, ... Z
. Is it possible to list all posts with in each letter via URL parameters?
Example click link A
to list all staff with name begins with letter A (Adam, Andrew...):
/?post_type=staff&meta_key=alphabet&meta_value=A
I have a custom post type staff
. and a custom field alphabet
for posts in that post type. Each staff will be assigned to a letter either A
or B
... Z
based on the first letter of the staff's name.
On the directory page there will be navigation links A
, B
, ... Z
. Is it possible to list all posts with in each letter via URL parameters?
Example click link A
to list all staff with name begins with letter A (Adam, Andrew...):
http://example/?post_type=staff&meta_key=alphabet&meta_value=A
Share
Improve this question
edited Sep 6, 2019 at 3:50
Stickers
asked Sep 6, 2019 at 3:45
StickersStickers
2521 gold badge6 silver badges17 bronze badges
1 Answer
Reset to default 0To achieve this, you can start by implementing the solution for this question. That will allow you to filter posts by their first letter (no custom meta required):
Assuming
starts_with
is the name of the argument we want to use, we can filterposts_where
to add aWHERE
clause limiting results to those that begin with the given value ifstarts_with
has been set on the query:function wpse_298888_posts_where( $where, $query ) { global $wpdb; $starts_with = $query->get( 'starts_with' ); if ( $starts_with ) { $where .= " AND $wpdb->posts.post_title LIKE '$starts_with%'"; } return $where; } add_filter( 'posts_where', 'wpse_298888_posts_where', 10, 2 );
With this filter added, we can query posts like this:
$query = new WP_Query( array( 'starts_with' => 'M', ) );
That will return all posts beginning with "M".
To support filtering the post type archive this way via the URL, you just need to register starts_with
as a query var:
function wpse_346729_query_vars( $query_vars ) {
$query_vars[] = 'starts_with';
return $query_vars;
}
add_filter( 'query_vars', 'wpse_346729_query_vars' );
Doing this means that if the starts_with
parameter is passed via the URL, it will be set on the main query, which will cause our posts_where
filter to be applied to the current main query.
http://example/?post_type=staff&starts_with=A
本文标签: Query custom post type and custom field by URL parameters
版权声明:本文标题:Query custom post type and custom field by URL parameters 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745180319a2646434.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论