在 WordPress 中保存用户类别

问题描述

我一直在关注以下教程 How to Add User Taxonomy in WordPress ,我的问题是用户类别没有保存。我希望能够为用户添加类别以实现过滤功能

这是我的保存功能

add_action( 'personal_options_update','ru_admin_save_user_categories' );
add_action( 'edit_user_profile_update','ru_admin_save_user_categories' );


function ru_admin_save_user_categories( $user_id ) {
    $tax = get_taxonomy( USER_CATEGORY_NAME );
    $user = get_userdata( $user_id );

if ( !user_can( $user,'administrator' ) ) {
    return false;
}

$new_categories_ids = $_POST[USER_CATEGORY_Meta_KEY];
$user_Meta = get_user_Meta( $user_id,USER_CATEGORY_Meta_KEY,true );
$prevIoUs_categories_ids = array();

if( !empty( $user_Meta ) ) {
    $prevIoUs_categories_ids = (array)$user_Meta;
}

if( ( current_user_can( 'administrator' ) && $_POST['role'] != 'author' ) ) {
    delete_user_Meta( $user_id,USER_CATEGORY_Meta_KEY );
    ru_update_users_categories_count( $prevIoUs_categories_ids,array() );
} else {
    update_user_Meta( $user_id,$new_categories_ids );
    ru_update_users_categories_count( $prevIoUs_categories_ids,$new_categories_ids );
}
}

提交后什么也没有发生,我也没有看到保存在用户元数据中的数据。

解决方法

我遇到了同样的情况,经过大量挖掘和搜索,我发现我在我的项目中使用的这个插件名为 LH user taxonomies,并且他们在用户中保存术语的方式使用以下功能。

function set_terms_for_user( $user_id,$taxonomy,$terms = array(),$bulk = false ) {

    // Get the taxonomy
    $tax = get_taxonomy( $taxonomy );

    // Make sure the current user can edit the user and assign terms before proceeding.
    if ( ! current_user_can( 'edit_user',$user_id ) && current_user_can( $tax->cap->assign_terms ) ) {
        return false;
    }

    if ( empty( $terms ) && empty( $bulk ) ) {
        $terms = isset( $_POST[ $taxonomy ] )
            ? $_POST[ $taxonomy ]
            : null;
    }

    // Delete all user terms
    if ( is_null( $terms ) || empty( $terms ) ) {
        wp_delete_object_term_relationships( $user_id,$taxonomy );

    // Set the terms
    } else {
        $_terms = array_map( 'sanitize_key',$terms );

        // Sets the terms for the user
        wp_set_object_terms( $user_id,$_terms,false );
    }

    // Clean the cache
    clean_object_term_cache( $user_id,$taxonomy );
}

通常,他们与用户保存条款的主要部分是使用名为

的 WordPress 功能
wp_set_object_terms( $user_id,false );

如果您有其他问题,或者只是在您的项目中使用它,您应该查看该插件。