首先,您正在设置$_GET[\'filterN\']
但你想用$_GET[\'condition_N\']
. 这永远不会奏效。
其次pagename
是“精确匹配”值,而不是搜索参数only 使用“页面”帖子类型(至少据我所知)。您使用的是CPT,可能不需要精确匹配。如果这样做,其他查询条件将毫无意义。所以这也不能正常工作。
您可以做的最简单的事情就是使用s
参数
$title = esc_textarea( $_GET[\'s\'] );
$args = array(
\'s\' => $title,
\'numberposts\' => -1,
\'post_type\' => \'my_custom_post\',
\'meta_query\' => array(
array(
\'key\' => \'filter_1\',
\'value\' => esc_attr( $_GET[\'filter1\'] )
),
array(
\'key\' => \'filter_2\',
\'value\' => esc_attr( $_GET[\'filter2\'] )
),
array(
\'key\' => \'filter_3\',
\'value\' => esc_attr( $_GET[\'filter3\'] )
)
)
);
$the_query = new WP_Query( $args );
将在帖子标题中搜索您的
$title
一串它还将搜索
post_content
. 要仅搜索标题,需要过滤查询的搜索部分。
function only_title_search_wpse_119422( $search ) {
remove_filter( \'posts_search\', \'only_title_search_wpse_119422\' );
global $wpdb;
$pattern = "/\\({$wpdb->posts}.post_title[^)]+\\)/";
preg_match_all( $pattern, $search, $matches );
if ( ! empty( $matches[0] ) ) {
$search = sprintf(
" AND (%s)",
implode( " AND ", $matches[0] )
);
}
return $search;
}
add_filter( \'posts_search\', \'only_title_search_wpse_119422\' );
在二次查询运行之前立即添加它。
我不能肯定,但我想知道你是否应该在pre_get_posts
而不是辅助查询。这两种情况都应采用相同的基本理念。
注意:始终使用esc_*()
以及使用前的其他消毒方法$_REQUEST/$_GET/$_POST
数据库调用中的值