如果在后期转换期间未设置其他类别,则取消设置类别

时间:2018-07-14 作者:karnehe

如果另一个类别未设置,我将尝试取消设置该类别。

首先,我有一个函数,如果设置了另一个类别,可以添加的类别,例如:

function add_category_automatically($post_ID) {
    global $wpdb;
    if ( in_category(\'3152\') ) {
        $cat = array(1208);
        wp_set_object_terms($post_ID, $cat, \'category\', true);
    }
}
add\\u action(\'save\\u post\',\'add\\u category\\u automatically\');

如果帖子的类别id为3152,则会添加id为1208的类别。

现在,我需要一个函数,它的作用正好相反,如果id为3152的类别被取消设置,那么我需要这个函数也取消id为1208的类别的设置。

我知道我可以简单地做这样的事情,但它会把事情搞砸,因为我希望最终用户能够自己设置id为1208的类别,只有在id为3152的类别被删除时,它才应该被删除。

function remove_category_automatically($post_ID) {
    global $wpdb;
    if ( !in_category(\'3152\') ) {
        $cat = array(1208);
        wp_remove_object_terms($post_ID, $cat, \'category\', true);
    }
}
add\\u action(\'save\\u post\',\'remove\\u category\\u automatically\');

因此,上面的代码不起作用,因为使用此代码您无法自行设置类别1208,除非有3152,否则它将始终删除1208。我希望一些帖子有类别1208,而没有类别3152。

所以我尝试了这样的方法,但它并没有真正起作用。

function on_all_status_transitions( $new_status, $old_status, $post ) {
    if ( in_category(\'3152\') ) {
        if ( $new_status != $old_status && has_category(\'3152\') ) {
            $cat = array(3152);
            wp_remove_object_terms($post_ID, $cat, \'category\', true);
        }
    }
}
添加\\u操作(“transition\\u post\\u status”、“on\\u all\\u status\\u transitions”,10,3);

如有任何解决方法,我们将不胜感激。

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

您可以使用deleted_term_relationships 检查是否从post对象中删除了某个术语的操作。

这个钩子在wp_remove_object_terms()

function custom_remove_category( $object_id, $tt_ids, $taxonomy ) {
    if( $taxonomy == \'category\' ) {
        if( in_array( 3152, $tt_ids ) ) {
            wp_remove_object_terms( $object_id, [1208], \'category\' );
        }
    }
    return $object_id;
}
add_action( \'deleted_term_relationships\', \'custom_remove_category\', 10, 3 );

结束

相关推荐

Dropdown menu for categories

当我使用下面的代码时<?php wp_nav_menu( array(\'menu\' => \'categories\' )); ?> 我可以创建一个新的菜单来列出我创建的wordpress中的所有类别。我用它在页面中间列出所有类别。我现在的问题是:有没有一种简单的方法可以为存在的每个子类别创建下拉菜单?那么,当我点击一个特定的类别时,它的子类别会显示出来吗?