如何通过标题中包含搜索词的任何文章过滤 WordPress Rest API?

问题描述 投票:0回答:1

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

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

我在这篇文章中看到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 过滤器。我没有从那里发布的解决方案中得到什么(在以“与此同时,我找到了解决方案”开头的部分中,提供了“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 如何接受自定义参数吗?

php wordpress wordpress-rest-api
1个回答
1
投票

我想通了。为了使其正常工作,我需要将参数添加到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 );

之后,这个网址就起作用了: /wp-json/wp/v2/posts?filter[queryByTitle]=some-text

© www.soinside.com 2019 - 2024. All rights reserved.