两件事:
您没有提供签到贴子in_category()
.你在打电话wp_remove_object_terms()
在…上$postID
, 尚未设置此代码应适用于:
function my_remove_category_on_status_change( $new_status, $old_status, $post ) {
if ( $old_status == \'private\' && $new_status = \'publish\' && in_category( array( \'1186\', \'1208\' ), $post ) ) {
wp_remove_object_terms( $post->ID, 1186, \'category\' ); // unset category with id 1186
}
}
add_action( \'transition_post_status\', \'my_remove_category_on_status_change\', 10, 3 );
注:
我通过了$post
对象从函数参数到in_category()
这样它就可以检查那些类别是否在状态发生变化的帖子上我用过$post->ID
将正在更改状态的帖子的ID提供给wp_remove_object_terms()
功能此外,remove_cat()
是一个非常通用的函数名,很容易成为WordPress或其他插件中的函数,并可能导致冲突。我建议更具体一点,并在它前面加上项目特有的东西。在我的示例中,我使用my_
.
注:硬编码特定类别ID会将您锁定在这些类别ID中,并且会使维护变得有些困难。我建议使用slug,它更容易预测,或者在某个地方设置与此功能相关的类别,然后将这些值拉入此功能。