wordpress - 在 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, USER_CATEGORY_META_KEY, $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, $taxonomy, false );
}
// Clean the cache
clean_object_term_cache( $user_id, $taxonomy );
}
通常,他们与用户保存条款的主要部分是使用名为
wp_set_object_terms( $user_id, $_terms, $taxonomy, false );
如果您有其他问题,或者只是在您的项目中使用它,您应该查看该插件。
推荐阅读
- php - 如何保护android应用程序的rest api
- google-cloud-spanner - 如何查找 Google Spanner 表创建日期和时间?
- html - Html Profile Card 右对齐
- node.js - 如何将反应状态传递给 Node 后端?
- javascript - 从 HTML 类中提取日期并将与另一个日期的差异返回到文本框中(天)
- azure-devops - Azure DevOps - 如何跟踪计划内和计划外的工作项
- javascript - 这是“解构分配”的一个方面还是其他什么?
- ios - verifyReceipt in_app 和 latest_receipt_info 中缺少 Apple Sandbox IAP 交易
- java - 我如何@SerializedName 这个响应“name.0”
- reactjs - React Material - MUIDataTable - 如何更新行数据