wp_set_post_terms不起作用。每次添加新术语而不是设置现有术语

时间:2014-05-15 13:06:51

标签: php wordpress

我想更新现有帖子的条款。例如,我有分类“job_listing_type” 以下是此分类法的条款。 保姆,草坪割草,叶耙,宠物坐,植物浇水,铲雪。 它的工作岗位。现在我已经发布了一份工作,并为这篇文章选择了“保姆”类别。 现在,“保姆”一词是为帖子设定的。现在我想编辑我的职位,并希望为这篇文章设置“草坪割草”类别。我正在使用此代码

wp_set_post_terms( $_POST['postid'], $_POST['job_type'], 'job_listing_type' );
//$_POST['postid']  has post id.
// $_POST['job_type']  has name of term. In this case, it is Lawn Mowing
//job_listing_type is custom taxonomy

现在我想取消之前设定的术语(保姆),然后设置新的“草坪割草” 但是上面的代码添加了一个新术语“草坪割草”,然后设置它。正如我从codex中理解的那样,它应首先检查,如果该术语不存在,那么它应该添加新的并设置它。 我也用过

wp_set_object_terms( $_POST['postid'], $_POST['job_type'], 'job_listing_type' );

但两者都有相同的结果 提前谢谢

4 个答案:

答案 0 :(得分:2)

当您考虑如何注册hierarchial设置时,

Custom Taxonomies可能会有点混乱。

分类&标签非常相似,但一个主要的区别(我认为这可能是混乱)是类别是分层的而标签不是。

当您注册job_listing_type时,(使用register_taxonomy)您是否将层次结构设置为true或false?

如果hierarchical设置为true(意味着它类似于帖子类别),则函数wp_set_post_terms()需要接收该字词 ID < / strong>(而不是它的名字)。您可以使用term_exists()通过名称​​获取ID,然后使用该ID来调用wp_set_post_terms()

如果hierarchical设置为false(意味着它与帖子标记类似),那么函数wp_set_post_terms() 接受名称。

如果我正确理解了您的问题,我相信您会先获取一个字词的ID,然后使用它来拨打wp_set_post_terms()

答案 1 :(得分:0)

我也有同样的问题,但下面的解决方案适合我。

代码中的问题是,当你得到术语的ID时,你必须在数组中发送它,比如

wp_set_post_terms( $postid, array( $jobtype_id), 'job_listing_type' );

希望这对你有用。

答案 2 :(得分:0)

我有类似的问题。 我通过确保ID是一个Intervals数组而不是一个字符串或字符串数​​组来解决它。

您可以这样做:

$integerIDs = array_map('intval', $_POST['job_type']);
$integerIDs = array_unique($integerIDs);
wp_set_post_terms( $_POST['postid'], $integerIDs, 'job_listing_type' );

它也由官方文档推荐: https://codex.wordpress.org/Function_Reference/wp_set_object_terms

答案 3 :(得分:0)

问题出在函数第4个参数wp_set_post_terms

用作

wp_set_object_terms( $_POST['postid'], $_POST['job_type'], 'job_listing_type', false );

如果您将其与真正的第4个参数一起使用,它将每次通过删除现有的分类来添加新的分类法

希望这会有所帮助。