You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce搜索中处理带声调的希腊字符

WordPress WooCommerce 希腊语带声调字符搜索修复方案

核心思路

将用户输入的搜索关键词、数据库中的内容(商品标题/描述、分类/标签名称)统一转换为无声调希腊字符,实现带声调与无声调字符的双向匹配。

实现代码

将以下代码添加到主题的functions.php文件或自定义插件中:

1. 希腊字符规范化辅助函数

// 转换带声调希腊字符为无声调版本
function normalize_greek_chars($string) {
    $accented_chars = array('ά','έ','ή','ί','ό','ύ','ώ','Ά','Έ','Ή','Ί','Ό','Ύ','Ώ');
    $plain_chars = array('α','ε','η','ι','ο','υ','ω','Α','Ε','Η','Ι','Ο','Υ','Ω');
    return str_replace($accented_chars, $plain_chars, $string);
}

2. 拦截并修改搜索查询

// 调整搜索查询,处理希腊字符声调
add_action('pre_get_posts', 'adjust_greek_search_query');
function adjust_greek_search_query($query) {
    // 仅处理前台主搜索请求
    if (!is_admin() && $query->is_main_query() && $query->is_search()) {
        $search_term = $query->get('s');
        if (!empty($search_term)) {
            $normalized_term = normalize_greek_chars($search_term);
            // 若关键词存在声调字符,替换为无声调版本并修改查询规则
            if ($normalized_term !== $search_term) {
                $query->set('s', $normalized_term);
                add_filter('posts_search', 'modify_greek_search_sql', 10, 2);
            }
        }
    }
}

// 修改搜索SQL,让数据库字段也做字符规范化匹配
function modify_greek_search_sql($search, $query) {
    global $wpdb;
    
    if (!empty($search) && !is_admin()) {
        $search_term = $query->get('s');
        $escaped_term = $wpdb->esc_like($search_term);
        
        // 处理文章标题的字符匹配
        $search = str_replace(
            "{$wpdb->posts}.post_title LIKE '%{$escaped_term}%'",
            "REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE({$wpdb->posts}.post_title, 'ά','α'), 'έ','ε'), 'ή','η'), 'ί','ι'), 'ό','ο'), 'ύ','υ'), 'ώ','ω') LIKE '%{$escaped_term}%'",
            $search
        );
        
        // 处理文章内容的字符匹配
        $search = str_replace(
            "{$wpdb->posts}.post_content LIKE '%{$escaped_term}%'",
            "REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE({$wpdb->posts}.post_content, 'ά','α'), 'έ','ε'), 'ή','η'), 'ί','ι'), 'ό','ο'), 'ύ','υ'), 'ώ','ω') LIKE '%{$escaped_term}%'",
            $search
        );
        
        // 处理WooCommerce商品分类与标签的字符匹配
        if (class_exists('WooCommerce')) {
            $search .= " OR EXISTS (
                SELECT 1 FROM {$wpdb->term_relationships} tr
                JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
                JOIN {$wpdb->terms} t ON tt.term_id = t.term_id
                WHERE tr.object_id = {$wpdb->posts}.ID
                AND tt.taxonomy IN ('product_cat', 'product_tag')
                AND REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.name, 'ά','α'), 'έ','ε'), 'ή','η'), 'ί','ι'), 'ό','ο'), 'ύ','υ'), 'ώ','ω') LIKE '%{$escaped_term}%'
            )";
        }
    }
    
    return $search;
}

效果说明

  • 用户输入带声调的希腊字符(如άνθρωπος)或无声调字符(如ανθρωπος),均可匹配到对应的商品、分类和标签。
  • 优先匹配完全一致的内容,同时支持声调转换后的模糊匹配。

内容的提问来源于stack exchange,提问作者Kyriakos13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:47:45