Hmmm.您需要跟踪是谁添加了哪些术语,您目前可以在usermeta字段中以逗号分隔的列表的形式最好地添加这些术语(我假设您预计每个用户不会超过1000个术语?我担心会超过1000个)
您可以使用\'edited_terms\'
如您所见:
基本上,您的代码可能如下所示”
add_filter(\'edited_terms\', \'yoursite_edited_terms\');
function yoursite_edited_terms($term_id) {
if($_POST[\'taxonomy\'] == \'your_taxonomy\'): {
$user = wp_get_current_user();
if ($user->ID) {
$terms = get_user_meta($user->ID,\'users_terms_for_your_taxonomy\');
$terms = (empty($terms) ? $term_id : "{$terms},{$term_id}");
update_user_meta($user->ID,\'users_terms_for_your_taxonomy\',$terms);
}
}
}
那么您需要使用
\'list_terms_exclusions\'
钩子将您的术语限制为当前用户所需的术语,但允许管理员通过添加
\'can_manage_all_terms\'
您可以使用的功能
Members plugin 要创建:
以下是可能的情况:
add_filter(\'list_terms_exclusions\', \'yoursite_list_terms_exclusions\', 10, 2);
function yoursite_list_terms_exclusions( $exclusions, $args ) {
global $pagenow;
if (current_user_can(\'can_manage_all_terms\') &&
$pagenow==\'edit-tags.php?taxonomy=your_post_taxonomy\') {
$terms = get_user_meta($user->ID,\'users_terms_for_your_taxonomy\');
$exclusions = " {$exclusions} AND t.ID NOT IN ({$terms})";
}
return $exclusions;
}
我还没有测试过这段代码,但它应该会让您走上正轨。并确保替换代码中的任何内容
\'your_taxonomy\'
参考您的实际分类法。