从Get_Term_By获取模糊匹配

时间:2013-08-30 作者:steve

我想得到一个术语,只知道它的一部分。我的slug的设置方式是,使类别名称出现在语言代码之前,有时我需要从类别名称和语言代码中获取术语,但如果确切的术语不存在,我不会从get\\u term\\u by中获取任何信息。

那没关系,不过,我的一些术语是用多种语言表达的,当我知道这个类别和语言时,用法语和英语说它是apple,我需要从我正在和apple打交道,而且我是用英语找到这个术语。

更具体的例子:

术语名称:apple\\u en\\u fr

我想搜索apple\\u en或apple\\u fr并获取该术语。

一个人怎么能得到这样的模糊匹配呢?

2 个回复
SO网友:kaiser

你应该问自己几个问题:

#1) “语言代码”是否与ISO 639-2兼容?

Stephen Harris 我建立了一个所有可用ISO 639-2语言代码的列表-[可在GitHub上的WeCodeMore标签帐户上获得]-应该使用这些代码。这是官方列表(从官方ISO来源构建)。如果您正在使用其他代码,那么就不可能了,因为代码不可靠。

您现在可以将其作为Git子模块导入到您的项目中,获取它并与之进行比较。

#2) 字符串相似吗?

例如,您可以使用Levenshtein 比较以检查字符串是否在包括拼写错误的组合的各种组合中匹配。

#3) 这是明智的做法吗?

不,绝对不是。你应该重新考虑你做事的方式。看来你有X-Y-Problem.

SO网友:RCNeil

如果有人无意中发现了这一点,我需要进行搜索,其中包括来自函数get\\u terms的模糊匹配。我最初使用name__like 帮助优化搜索结果,但最终得到所有术语并使用similar_text() 比较搜索输入与术语名称。

下面是我最终使用的函数。希望它能帮助别人:

$search_text = "WHATEVER YOUR SEARCH INPUT IS";

$args = array(
    \'taxonomy\'      => array( \'product_cat\' ), // taxonomy name
    \'orderby\'       => \'id\', 
    \'order\'         => \'ASC\',
    \'hide_empty\'    => false,
    \'fields\'        => \'all\'
    //\'name__like\'    => $search_text  //I TOOK THIS PART OUT
); 
$terms = get_terms( $args );

//FILTER FUZZY MATCHING
foreach($terms as $term) {
    $item = similar_text($search_text, $term->name, $percentage);
    if($percentage >= 50) :
        echo $term->name . \' - \' . $percentage . \'<br />\';
    endif; 
}
您可以修改百分比阈值以产生所需的结果。就我而言,这对我来说非常有效。在某些情况下,它可能不会对其他人起到很好的作用。

结束

相关推荐

GET_TERMS不返回任何自定义分类

我有一个自定义的帖子类型,叫做project 调用自定义分类法tagportfolio我使用此代码生成以下两个: add_action(\'init\', \'project_custom_init\'); /*-- Custom Post Init Begin --*/ function project_custom_init() { $labels = array( \'name\' => _x(\'Project