问题描述
我一直在关注以下教程 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 );
如果您有其他问题,或者只是在您的项目中使用它,您应该查看该插件。