是否从搜索结果(图像名称等)中排除html?

时间:2014-05-15 作者:STing

我们正在大量标记我们的页面/帖子,因此使用了大量html和图片。问题是,我们的搜索结果正在命中图像名和类名(也许我还有其他一些例子,但这是两个最严重的违规者)。

是否只搜索页面上显示的文本?

2 个回复
SO网友:kaiser

一种可能是尝试更改搜索SQL查询。有一个过滤器。

$search = apply_filters_ref_array( \'posts_search\', array( $search, &$this ) );
和(旁注)影响ORDER BY 以及条款

$search_orderby = apply_filters( \'posts_search_orderby\', $search_orderby, $this );
我已经有一段时间没有看搜索了,但是当我看WP_Query::parse_search, 我可以找到一些可能感兴趣并且值得一试的东西。

看看

protected function parse_search( &$q ) {
其中包含完整的查询变量堆栈,因此添加的所有内容实际上都位于该函数中。下面是一行:

$n = ! empty( $q[\'exact\'] ) ? \'\' : \'%\';
如果$q[\'exact\'] 那么是emtpy$n 也将为空。接下来会发生以下情况:

if ( $n )
    $q[\'search_orderby_title\'][] = "$wpdb->posts.post_title LIKE \'%$term%\'";
以及

$search .= "{$searchand}(($wpdb->posts.post_title LIKE \'{$n}{$term}{$n}\') OR ($wpdb->posts.post_content LIKE \'{$n}{$term}{$n}\'))";
因此,如果您有一个查询变量(?)已命名exact 这需要TRUE, 您应该能够只运行精确匹配,而不是默认匹配LIKE 子句后面紧跟在任何事物中间的每个匹配项后面。

照现在的样子protected, 它可能会被extending类。所以你可以去创造class My_Search_Query extends WP_Query 并定义自己的内部结构以生成所需的SQL语句。

SO网友:s_ha_dum

Wordpress使用一个简单的MySQLLIKE 搜索核心搜索功能。通过运行这样一个简单的测试用例,您可以看到:

$q = new WP_Query(array(\'s\' => \'test\'));
var_dump($q->request);
die;
您应该看到以下内容(格式由提供http://sqlformat.org/):

SELECT SQL_CALC_FOUND_ROWS dev_posts.ID
FROM dev_posts
WHERE 1=1
  AND (((dev_posts.post_title LIKE \'%test%\')
        OR (dev_posts.post_content LIKE \'%test%\')))
  AND (dev_posts.post_password = \'\')
  AND dev_posts.post_type IN (\'post\',
                              \'page\',
                              \'attachment\',
                              \'book\')
  AND (dev_posts.post_status = \'publish\')
ORDER BY dev_posts.post_title LIKE \'%test%\' DESC, dev_posts.post_date DESC LIMIT 0,10
您可以过滤WHERE 带的子句posts_search filter 但是MySQL的REGEX 非常有限。我怀疑你能否让它忽略加价。

如果我面临这个问题,我会在save上解析帖子--save_postdraft_to_publish 例如--并将关键字列表存储到数据库中,然后使用posts_search 过滤器和/或其他过滤器,以更改搜索,以便搜索关键字列表。实现可能更复杂,也可能更复杂,这取决于您的操作方式,但我认为这是在不必依赖MySQL扩展或Sphinx等外部搜索引擎的情况下获得所需结果的唯一方法。

结束

相关推荐

add_rewrite_rule to search

新手WordPress开发者。我需要像这样映射WordPress URLwww.example.com/user/Username 基于该用户名的搜索结果我已经有了使用url进行搜索的页面www.example.com/search-results/?name=Username在functions.php 我有add_action( \'init\', \'add_username_rules\' ); function add_username_rules() { glo