我一直在关注以下教程如何在 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, USER_CATEGORY_META_KEY, $new_categories_ids );
ru_update_users_categories_count( $previous_categories_ids, $new_categories_ids );
}
}
提交后没有任何反应,我也没有看到用户元中保存的数据。
我也处于同样的情况,经过大量挖掘和搜索,我发现我在项目中使用的这个插件名为 LH 用户分类法,他们在用户中保存术语的方式是使用以下函数。
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, $taxonomy, false );
}
// Clean the cache
clean_object_term_cache( $user_id, $taxonomy );
}
通常,他们与用户保存条款的主要部分是使用名为
的 WordPress 功能wp_set_object_terms( $user_id, $_terms, $taxonomy, false );
如果您有其他问题,您应该查看该插件,或者只是在您的项目中使用它。