自定义帖子标题作为搜索词

时间:2013-01-16 作者:Dido Kotsev

是否有任何方法可以将自定义帖子标题作为搜索词。我创建自定义帖子类型-VHS、DVD、蓝光。然后,当我写DVD时,我想在搜索框中列出自定义post类型DVD中的所有帖子。

提前感谢大家:)

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

如果你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\');
未经测试,但我认为应该这样做。

再一次,我看不出逻辑。结果不会有多大意义。

结束

相关推荐

“MANAGE_POSTS_CUSTOM_COLUMN”操作挂钩与“MANAGE_${POST_TYPE}_COLUMNS”筛选器挂钩有何关系?

怎样add_action(\"manage_posts_custom_column\", \"custom_callback_fun01\"); 与…有关add_filter(\"manage_{xxxx-xxx}_columns\", \"cusotm_callback_fun02\" );?它们是如何一起工作的?通过使用这两者,我们可以将自定义列添加到自定义帖子类型和显示日期,例如,在特色列中显示特色图像这是我的代码示例,它工作得很好,但我对过滤器如何与动作挂钩一起工作有点困惑?//slides&#x