就在几天前,我开始了我新的基于wordpress的网站的工作。
我有一个插件,它提供了一个汽车数据库。我想通过从这个插件获取信息来自动填充我的自定义字段和分类法。
因此,我在函数中创建了一个自定义函数。php。我从car的数据库插件中输入了一个ID,当我发布或更新帖子时,我的函数会自动填充我的字段(wp\\u insert\\u post)。一切似乎都很好,但。。。
在我的函数中,我有以下代码:
if ( isset( $cardet[\'marks\'] ) )
wp_set_object_terms( $post_id, implode(\', \', $cardet["marks"]), \'mark\' );
此函数的作用是什么?它只需从$cardet[“marks”]中获得3-4个不同的汽车标记,然后将其内爆。这仅适用于分类法。
So, after I click publish or update the post:
没关系,这是“编辑后”页面中的样子。创建了3个不同的术语。
这就是我的问题。当我转到我的分类页面时,我发现:它只创建了一个术语:
我真的需要你的帮助。我需要有不同的条款。无法找到此问题的解决方案。
最合适的回答,由SO网友:s_ha_dum 整理而成
第二个参数为wp_set_object_terms()
接受数组、整数或字符串。
(数组/int/string)(必需)术语的slug或id(例如类别或标记id)将替换此分类法中所有现有的相关术语。要清除或删除对象中的所有术语,请传递空字符串或NULL。整数被解释为标记ID 警告:某些函数可能会将term\\u id作为字符串返回,这些字符串将被解释为由数字字符组成的段塞!
创建阵列($cardet["marks"]
) 但是后来implode()
信息技术当你implode()
如果将该数组转换为逗号分隔的字符串wp_set_object_terms()
解释为单个值。wp_set_object_terms()
不会中断逗号上的字符串并为您创建多个术语,但解决方案很简单,因为您添加了一个中断内容的步骤。删除该步骤并将阵列传递给wp_set_object_terms()
.
if ( isset( $cardet[\'marks\'] ) )
wp_set_object_terms( $post_id, $cardet["marks"], \'mark\' );
Codex中的示例代码正是这样做的,但ID:
// An array of IDs of categories we want this post to have.
$cat_ids = array( 6, 8 );
/*
* If this was coming from the database or another source, we would need to make sure
* these where integers:
$cat_ids = array_map( \'intval\', $cat_ids );
$cat_ids = array_unique( $cat_ids );
*/
$term_taxonomy_ids = wp_set_object_terms( 42, $cat_ids, \'category\' );
如果
$cardet["marks"]
请提供用户提供的数据
sanitize 请在使用前使用它。
SO网友:unknowndomain
内爆使你的阵型变成这样array( \'Audi\', \'BMW\', \'Mercedes-Benz\' )
转换为一个字符串,该字符串由函数的第一个参数中设置的分隔符分隔,在本例中,
逗号和空格。在某种程度上,您可以将一个数组从此转换为CSV。结果是:Audi, BMW, Mercedes-Benz
.
WordPress的工作方式是查找现有术语(在该分类法中),如果不存在,则创建一个新术语。。。
在WordPress Codex 它说术语可以作为数组、整数或字符串提供,但是我认为整数和字符串选项可能是一次添加一个术语,我不认为它会重新分解字符串,更重要的是,这是一个无意义的过程,当它获取数组时,会内爆和分解数组,而这正是您的$cardet[\'marks\']
变量