根据URL参数查询自定义帖子类型和自定义字段

时间:2019-09-06 作者:Stickers

我有一个自定义的帖子类型staff. 和自定义字段alphabet 对于该职位类型的职位。每位员工将被分配到一封信AB ... Z 根据员工姓名的第一个字母。

在目录页上会有导航链接A, B, ... Z. 是否可以通过URL参数列出每个字母中包含的所有帖子?

单击链接示例A 以字母A开头的姓名列出所有员工(Adam、Andrew…):

http://example.com/?post_type=staff&meta_key=alphabet&meta_value=A

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

要实现这一点,您可以从实现以下解决方案开始this question. 这将允许您按帖子的第一个字母过滤帖子(无需自定义元):

假设starts_with 是要使用的参数的名称,可以筛选posts_where 添加WHERE 子句将结果限制为以给定值开头的结果,如果starts_with 已在查询上设置:

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 );
添加此过滤器后,我们可以查询如下帖子:

$query = new WP_Query( array(
  \'starts_with\' => \'M\',
) );
这将返回所有以“M”开头的帖子。

要支持通过URL以这种方式过滤post类型存档,只需注册starts_with 作为查询变量:

function wpse_346729_query_vars( $query_vars ) {
    $query_vars[] = \'starts_with\';

    return $query_vars;
}
add_filter( \'query_vars\', \'wpse_346729_query_vars\' );
这样做意味着如果starts_with 参数通过URL传递,它将在主查询上设置,这将导致posts_where 要应用于当前主查询的筛选器。

http://example.com/?post_type=staff&starts_with=A

相关推荐

Altered Media Library URLs

我有一个客户的网站,是在他们离开另一家代理机构后我找到的。该机构使用了一个专有主题和自己的自托管页面生成器,以防止其在除他们之外的任何其他托管环境中更新或编辑。它的另一个方面是重新映射主题的URL并上载目录。因此,例如,代替WP在中查找主题文件http://domain.com/wp-content/themes/…. 它在里面找他们http://domain.com/t/….同样,对于图像上载,也可以在http://domain.com/wp-content/uploads/…, 它在里面找他们http