当发布从私有状态转换为公共状态并且已具有特定类别时是否删除类别?

时间:2017-07-05 作者:karnehe

我正在尝试创建一个函数,如果帖子状态从private更改为published,并且所讨论的帖子已经设置了2个类别,那么该函数会自动删除一个类别。

以下是不起作用的代码:

function remove_cat( $new_status, $old_status, $post ) {
if ( $old_status == \'private\'  &&  $new_status = \'publish\' && in_category(array(\'1186\',\'1208\'))) {
    $catsID = array(1186);
    wp_remove_object_terms( $postID, $catsID, \'category\' ); // unset category with id 1186
} } add_action( \'transition_post_status\', \'remove_cat\', 10, 3 )
我到底做错了什么?当帖子状态从私有变为公共时,我试图从类别为1186+1208的帖子中删除类别1186。

谢谢

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

两件事:

您没有提供签到贴子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,它更容易预测,或者在某个地方设置与此功能相关的类别,然后将这些值拉入此功能。

结束

相关推荐

Custom taxonomy Rewrite Rule

我希望我的分类url如下:site。com/page/taxonomy\\u术语我如何才能做到这一点?我在函数中编写了wordpress重写规则代码。php如下所示:function sphere_custom_rewrite_rules( $rules ){ $newrules[\'(.+?)/([^/]*)/?\'] = \'index.php?pagename=$matches[1]&positive_sphere=$matches[2]\'; $newrul