post_title
不是的有效参数WP_Query
. 如果转储SQL,您将看到它被忽略:
字符串(189)“从wp\\U posts中选择SQL\\U CALC\\U FOUND\\U ROWS wp\\U posts.ID,其中1=1,wp\\U posts.post\\U type=\'调查员\'和(wp\\U posts.post\\U status=\'发布\')按wp\\U posts.post\\U title ASC LIMIT 0,6排序”
您可以使用name
(或pagename
) 相反,但您不能像那样推送原始SQL。这行不通:
字符串(158)“选择wp\\U帖子。*从wp\\U帖子中,其中1=1,wp\\U帖子。帖子名称=\'like-%d00d\'和wp\\U帖子。帖子类型=\'调查员\'顺序,按wp\\U帖子。帖子标题ASC”
如果您使用s
参数--像这样\'s\' => $_POST[\'s\']
--, 你会得到你想要的东西:
字符串(310)“从wp\\U posts中选择SQL\\U CALC\\U FOUND\\U ROWS wp\\U posts.ID,其中1=1和((wp\\U posts.post\\U title,如\'\'%d00d%\')或(wp\\U posts.post\\U content,如\'\'%d00d%\'))和(wp\\U posts.post\\U密码=\'\')以及wp\\U posts.post\\U类型=\'调查者\',(wp\\U posts.post\\U状态=\'发布\')顺序,按wp\\U posts.post\\U title ASC限制0,6”
但您搜索的字段不仅仅是标题。要将其限制为仅标题,可以使用another of my answers:
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\' );