我有一个模板
$terms = get_terms( "ingredient", array( \'name__like\' => $letter ) );
ingredient
开始于$letter
. 的行为name__like
was changed in WP 3.7 到文本搜索而不是开始。
我可以使用什么功能来实现以前的结果?我需要自定义查询吗?
" $letter="" )="" );返回自定义分类法ingredient="" 开始于$letter.="" 的行为name__like="" was="" changed="" in="" wp="" 3.7="" 到文本搜索而不是开始。我可以使用什么功能来实现以前的结果?我需要自定义查询吗?"="">
我有一个模板
$terms = get_terms( "ingredient", array( \'name__like\' => $letter ) );
ingredient
开始于$letter
. 的行为name__like
was changed in WP 3.7 到文本搜索而不是开始。
我可以使用什么功能来实现以前的结果?我需要自定义查询吗?
您需要过滤查询,您可以使用terms_clauses
钩这与G-M的解决方案非常相似,但不需要在搜索字符串上加前缀。
function old_style_name_like_wpse_123298($clauses) {
remove_filter(\'term_clauses\',\'old_style_name_like_wpse_123298\');
$pattern = \'|(name LIKE )\\\'%(.+%)\\\'|\';
$clauses[\'where\'] = preg_replace($pattern,\'$1 \\\'$2\\\'\',$clauses[\'where\']);
return $clauses;
}
add_filter(\'terms_clauses\',\'old_style_name_like_wpse_123298\');
// $letter = \'str\'; // test
$terms = get_terms( "ingredient", array( \'name__like\' => $letter ) )
这是一个骗局。
在要搜索奇怪字符串的字母前加前缀:
$letter = \'§§§\' . \'a\'; // strange string plus the letter you want to search
然后将筛选器应用于terms_clauses
挂钩:add_filter(\'terms_clauses\', \'replace_name__like_for_ingredients\', 10, 3);
$terms = get_terms( "ingredient", array( \'name__like\' => $letter ) );
最后使用该函数删除%
在奇怪字符串和奇怪字符串本身之前:function replace_name__like_for_ingredient( $pieces, $taxonomies, $args ) {
if ( in_array(\'ingredient\', $taxonomies) ) {
// replace the perc sign plus strange string with empty string so
// LIKE \'%§§§a%\' become LIKE \'a%\'
$pieces[\'where\'] = str_replace("%§§§", \'\', $pieces[\'where\']);
}
return $pieces;
}
Untested.我无法对之前的答案发表评论,因此我将在此处添加此注释,以防其他人也面临此问题:上述内容对我无效,因此我将其替换为:
$pattern = \'|(name LIKE )\\\'%(.+%)\\\'|\';
使用$pattern = \'|(name LIKE )\\\'{.*?}(.+{.*?})\\\'|\';
此处建议:https://stackoverflow.com/questions/47840519/listing-custom-taxonomy-terms-by-first-letter-using-name-like-does-not-work-ev根据gmazaap的回复,我得到了:
$terms_array = [
\'taxonomy\' => \'pa_myattr\',
\'name__like\' => \'§§§\' . \'A\'
];
$terms = get_terms($terms_array);
add_filter(\'terms_clauses\', \'replace_name__like_for_product_attribute\', 10, 3);
function replace_name__like_for_product_attribute($pieces, $taxonomies, $args)
{
if (in_array(\'pa_myattr\', $taxonomies)) {
// replace the perc sign plus strange string with empty string so
// LIKE \'{abc..}§§§a{abc...}\' become LIKE \'A%\'
$pieces[\'where\'] = preg_replace(\'/(.* LIKE ).*§§§([A-Z])(.*)/\', \'$1\\\'$2$3\', $pieces[\'where\']);
}
return $pieces;
}
用WordPress 5.2.2测试不得不用preg\\u匹配修改常规str\\u replace,因为现在WordPress似乎添加了哈希之类的内容来保护SQL注入。由于此字符串在查询之间似乎是随机的,因此唯一的解决方案是使用regex。
我有一个称为“水果”的自定义帖子类型,在这个类型下,我有一个称为“水果类别”的层次分类法当我在Fruit下创建一个新帖子时,我可以将其分配到一个“术语”,就像您在普通帖子类别下一样,但在Fruit Categories分类下。我在Fruit上增加了三个职位,每个职位分别分配给一个任期;“苹果”、“梨”和“香蕉”。所有这些都很好,但现在我想创建一个归档页面,简单地列出UL中的术语,用于自定义帖子类型,如下所示;我的网站。玉米/水果我面临的问题是,我使用的每个查询似乎只返回第一个词Apples。其他两个没有显