在这里发布了一些易受攻击的解决方案,我提供了一个经过简化和净化的版本。
首先,我们为posts_where
过滤器,允许您仅显示符合特定条件的帖子:
function cc_post_title_filter($where, &$wp_query) {
global $wpdb;
if ( $search_term = $wp_query->get( \'cc_search_post_title\' ) ) {
$where .= \' AND \' . $wpdb->posts . \'.post_title LIKE \\\'%\' . $wpdb->esc_like( $search_term ) . \'%\\\'\';
}
return $where;
}
现在我们添加
cc_search_post_title
进入我们的查询参数:
$args = array(
\'cc_search_post_title\' => $search_term, // search post title only
\'post_status\' => \'publish\',
);
最后,将过滤器包装在查询周围:
add_filter( \'posts_where\', \'cc_post_title_filter\', 10, 2 );
$query = new WP_Query($args);
remove_filter( \'posts_where\', \'cc_post_title_filter\', 10 );
使用get\\u posts()某些检索帖子的函数不会运行过滤器,因此附加的posts\\u过滤器函数不会修改查询。如果您计划使用
get_posts()
要查询您的帖子,您需要设置
suppress_filters
要在参数数组中为false,请执行以下操作:
$args = array(
\'cc_search_post_title\' => $search_term,
\'suppress_filters\' => FALSE,
\'post_status\' => \'publish\',
);
现在您可以使用
get_posts()
:
add_filter( \'posts_where\', \'cc_post_title_filter\', 10, 2 );
$posts = get_posts($args);
remove_filter( \'posts_where\', \'cc_post_title_filter\', 10 );
那么
s
参数The
s
参数可用:
$args = array(
\'s\' => $search_term,
);
将搜索词添加到
s
参数起作用,它将搜索帖子标题,也将搜索帖子内容。
那么title
WP 4.4中添加的参数
将搜索项传递到
title
参数:
$args = array(
\'title\' => $search_term,
);
区分大小写,并且
LIKE
, 不
%LIKE%
. 这意味着搜索
hello
不会返回带有标题的帖子
Hello World
或
Hello
.