如何通过标题中包含搜索词的任何文章过滤 wordpress rest api?

How do I filter wordpress rest api by any articles that contain the search term in the title?

我们的 wordpress 安装使用后端的 REST API 来查找文章。目前,查询似乎正在返回任何字段中包含任何单词的任何文章。我们正在尝试更改此设置,以便仅显示 returns 篇标题中包含搜索词的文章。例如,如果搜索词是 "this is the title",则只会返回标题中包含该短语的文章。

我认为这样做需要为 WP_Query 创建自定义过滤器,安装 WP Rest Filter 插件以允许通过 REST 进行过滤,并将自定义过滤器添加到查询中。但我不确定如何实现它。

我在这个 post https://wordpress.stackexchange.com/questions/286081/how-to-filter-my-search-in-post-if-contains-a-word-in-title-content-or-excerpt/286083#286083 中看到了如何添加 WP_Query 过滤器。我没有从解决方案 post 中得到什么(在以 "Well in the meantime, I found the solution" 开头的部分中,提供 'search_prod_title' 的地方。它在下面的这一行中被选中,但我不'看看那是在哪里设置的。

    if ( $search_term = $wp_query->get( 'search_prod_title' ) ) {

我不明白的另一部分是如何在调用 REST API 时选择自定义过滤器。这是我们目前调用 REST API:

的地方
    $( '#article-assign' ).select2( {
        minimumInputLength: 3,
        ajax: {
            delay: 300,
            url: window.CFEwpApiSettings.root + 'wp/v2/posts',
            data: function( params ) {
                let query = {
                    _embed: true,
                    search: params.term
                };

                if ( articleIds.join( ',' ) !== '' ) {
                    query.exclude = articleIds.join( ',' );
                }

                return query;
            },

有谁知道我应该如何修改 REST 调用的 URL(或查询,如果那是它所属的地方)以使用自定义过滤器?

感谢您提供的任何帮助。

更新: 我已经能够 wp_query 正常工作:

    add_filter( 'posts_where', function ( $where, \WP_Query $q ) 
    {
            global $wpdb;
            $query_by_title = $q->get( 'queryByTitle' );
            if ( $query_by_title = $q->get( 'queryByTitle' ) ) {
                $where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'' . esc_sql( $wpdb->esc_like( $query_by_title ) ) . '%\'';
            }
            return $where;    

    }, 10, 2 ); // Note the priority 10 and number of input arguments is 2

当我像这样从 PHP 调用它时,效果很好:

    $query = new WP_Query( array( 'queryByTitle' => 'hmi' ) );

现在我想弄清楚如何将这个参数从 JavaScript 传递给 PHP。我正在使用 WP Rest Filter 插件来允许过滤,但我不确定如何指定 'queryByTitle' 的新参数。我正在尝试这样的事情:

/wp-json/wp/v2/posts/?filter[meta_key]=queryByTitle&filter[meta_value]=words_to_find

但这不起作用。知道 REST API 如何接受自定义参数吗?

我明白了。为了让它工作,我需要将参数添加到 rest_query_vars 中:

    function wpse_20160526_rest_query_vars( $valid_vars ) {
        $valid_vars = array_merge( $valid_vars, array( 'queryByTitle' ) );
        return $valid_vars;
    }

    add_filter( 'rest_query_vars', 'wpse_20160526_rest_query_vars', PHP_INT_MAX, 1 );

之后,这个 URL 起作用了: /wp-json/wp/v2/posts?filter[queryByTitle]=一些文本