GET_TERM_BY“NAME”不使用&IN NAME

时间:2016-03-21 作者:Bhuvnesh Gupta

我想按名称获取类别id,因此我使用get_term_by

如果名称很简单,但如果使用“&;”,则可以正常工作是在术语名称中,它不是在获取类别id。

e、 我有一个术语叫做“网站开发与设计”skills taxonomy和我使用以下查询来获取其术语id。

$value = "Website Development & Designing"
get_term_by(\'name\',$value,\'skills\');
但它不返回术语对象:(

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

字符lt;,>&;,“and”(小于、大于、与号、双引号和单引号)在术语名称中出现。&been&amp;. 这是通过将术语对象传递给sanitize_term() 应用多个过滤器的函数。默认情况下,WordPress应用这些过滤器:sanitize_text_field(), wp_filter_kses()_wp_specialchars() (参见wp-includes/default-filters.php), 最后一个函数包含<;,>&;,“还有”。

因此,您需要:

$value = "Website Development &amp; Designing" get_term_by(\'name\',$value,\'skills\');

或者,对于未知值:

get_term_by( \'name\', esc_attr( $value ), \'skills\');

注:使用esc_attr(), 不_wp_specialchars() 直接因为_wp_specialchars() is marked as private function 而且它不适合插件或主题开发人员使用。

SO网友:Sumit

在术语中保存特殊字符时,它被编码为HTML实体。所以数据库中的术语名称如下所示Website Development &amp; Designing 您正在查询Website Development & Designing

您可以使用esc_attr() 在将特殊字符作为参数传递之前对其进行编码。

$value = esc_attr( \'Website Development & Designing\' );
get_term_by(\'name\', $value, \'skills\');
更好的是,我建议你总是用slug查询术语。名称可以随时更改,您需要每次更新代码。

相关推荐

GET_THE_TERMS与wp_GET_POST_TERMS中的奇怪结果

我正在尝试制作一个面包屑函数,但有一个小问题。。。使用时:$categories = get_the_terms( $post->ID, \'product_cat\' ); 我得到了一个循环中使用的类别数组,等等。唯一的问题是它是按字母顺序排列的。(我希望它按层次顺序排列。)经过一番挖掘,我发现了一种替代方法,即使用wp\\u get\\u post\\u terms(),但我肯定遗漏了一些东西,因为当我使用此方法时:$categories = wp_get_post_terms( $p