WP REST API-将分类搜索限制为第一个字母

时间:2019-07-16 作者:shubhra

我正在尝试建立一个a-Z索引,并希望通过分类名称的第一个字母过滤自定义分类的响应。所以,如果我有[\'Ana\', \'Olina\', \'Ford\'], 我想要一些wp-json/wp/v2/names/?starts_with=A 只给我一个“Ana”。现在如果我这样做了names/?search=A, 我得到“安娜”和“奥莉娜”

我已经找过了,但没有找到任何类似的。

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

您可以使用rest_names_query 筛选以处理自定义starts_with REST API参数,并使用terms_clauses 筛选以添加自定义SQL子句,用于搜索名称以指定字母开头的术语(例如。Aa 对于/wp/v2/names/?starts_with=A):

add_filter( \'rest_names_query\', function( $args, $request ){
    if ( \'/wp/v2/names\' === $request->get_route() && // check the route
        ( $starts_with = $request->get_param( \'starts_with\' ) ) ) {
        $args[\'name_starts_with\'] = $starts_with;
    }
    return $args;
}, 10, 2 );

add_filter( \'terms_clauses\', function( $clauses, $taxonomies, $args ){
    if ( ! empty( $args[\'name_starts_with\'] ) ) {
        global $wpdb;

        // "t" below is an alias for the WordPress terms table (wp_terms), and it is set by WordPress.
        $where = $wpdb->prepare( \'t.name LIKE %s\', $wpdb->esc_like( $args[\'name_starts_with\'] ) . \'%\' );

        $clauses[\'where\'] .= " AND $where";
    }
    return $clauses;
}, 10, 3 );