使用$ query_vars过滤自定义字段上的结果

时间:2018-07-02 15:33:59

标签: php wordpress

我试图通过先过滤post_type(使用PODS的CPT),然后再过滤post_type中的字段来扩展wordpress主题中的搜索范围。

我有以下代码:

add_filter( 'request', 'custom_filter_search_result_by_post_type' );

function custom_filter_search_result_by_post_type( $query_vars ) {

if ( empty( $query_vars['s'] ) || empty( $_GET['post_type'] ) ) {
    return $query_vars;
}

$post_type        = $_GET['post_type'];
$search_value     = $_GET['s'];
$valid_post_types = get_post_types( array(
    'public'             => TRUE,
    'publicly_queryable' => TRUE
) );


if ( ! isset( $valid_post_types[ $post_type ] ) ) {
    return $query_vars;
}

$query_vars['post_type'] = $post_type;

echo '<script>console.log("Searching in ' . $post_type . ' for ' . $search_value . '")</script>';

switch( $post_type ) {
        case 'book':
        $query_vars->set('meta_query', array(
            'relation'      => 'OR',
                array(
                    'key' => 'book_author',
                    'value' => $search_value,
                    'compare' => 'LIKE'
            )
        ));
    break;      
    case 'jobs':
    break;
    default:
break;
}

echo '<script>console.log(' . json_encode($query_vars) . ')</script>';
return $query_vars;
}

但是,开关内部的数组导致黑屏,因此在某处显然存在错误,但是我对找到它的语法非常熟悉。

从本质上讲,我只有一个搜索词,我希望与书名,图书作者或出版商相匹配。在上面的过滤器代码中这可能吗?

****编辑****

我已将代码更新为:

$meta_query = array(
             'relation'      => 'OR',
                array(
                  'key'       => 'book_author',
                  'value'     => $_GET['author'],
                  'compare'   => 'LIKE'
                )
              );

 $query_vars->set( 'meta_query', $meta_query );

我现在确实得到了结果,但是我不得不将's'传递为空并将作者添加到查询字符串中(不需要)。这导致所有书籍都被显示并且根本没有被过滤。

我认为这可能是因为搜索的大部分是在主题本身内进行的,因此当仅使用s参数作为标准时,它已经有零个结果要过滤。 -不解释为什么当“ s”为空白但填写了作者时,它仍不过滤结果的原因。

0 个答案:

没有答案