如果你register the post type 具有public
设置为true
, 标题将自动包括在内。你不应该做任何事情来实现这一点。像这样简单的事情from the Codex:
function codex_custom_init() {
$args = array( \'public\' => true, \'label\' => \'Books\' );
register_post_type( \'book\', $args );
}
add_action( \'init\', \'codex_custom_init\' );
如果您不确定是否可以使用以下方法进行测试:
function test_custom_types_inclusion($where) {
if (is_search()) {
wp_die(var_dump($where));
}
}
add_filter(\'posts_where\',\'test_custom_types_inclusion\');
这将彻底打破你的搜索,但你可以看到原始的
WHERE
条款确认您的CPT已包含在内。查找
post_type IN (
部分
这涵盖了这个问题:
有没有办法将自定义帖子标题作为搜索词[?]
但我想你的意思是你想搜索你用来注册类型的名字,而不是标题。包括自定义帖子类型中列出的所有帖子——我看不出这样做的逻辑,因为你可能会得到大量的结果,使搜索或多或少毫无用处——类似这样。。。
function custom_types_inclusion_wpse_81742($where) {
if (is_search()) {
global $wpdb;
$where .= " OR {$wpdb->posts}.post_type = \'your-type-name\'";
}
return $where;
}
add_filter(\'posts_where\',\'custom_types_inclusion_wpse_81742\');
但要让你的搜索词得到尊重,你必须变得更加复杂。
function custom_types_inclusion_wpse_81742_v2($search) {
global $wpdb;
$terms = preg_match_all(\'/%([^%]+)%/\',$search,$matches);
$ts = array();
if (!empty($matches[1])) {
$matches = array_unique($matches[1]);
if (!empty($matches)) {
foreach ($matches as $m) {
$ts[] = "{$wpdb->posts}.post_type LIKE \'%{$m}%\'";
}
}
if (!empty($ts)) {
$search .= "OR ((".implode(\') OR (\',$ts).\'))\';
}
}
return $search;
}
add_filter(\'posts_search\',\'custom_types_inclusion_wpse_81742\');
未经测试,但我认为应该这样做。
再一次,我看不出逻辑。结果不会有多大意义。