多个用户-仅允许他们在登录时管理自己的术语以进行自定义分类

时间:2011-02-03 作者:mha

登录“编辑标记”页面时,如何允许每个用户管理自己的自定义分类术语?用户将仅显示(&A);为自定义分类法管理仅由他创建而非其他人创建的术语。但管理员和编辑器可以管理所有内容。我该怎么做?

任何帮助都将不胜感激。谢谢

2 个回复
最合适的回答,由SO网友:Rashy 整理而成

谢谢你的绝妙解决方案MikeSchinkel:D

我刚刚对代码进行了以下更新,效果非常好:

add_filter(\'list_terms_exclusions\', \'yoursite_list_terms_exclusions\', 10, 2);

function yoursite_list_terms_exclusions( $exclusions ) {
    $currentScreen = get_current_screen();

    if( current_user_can( \'my_custom_capability_assigned_to_specific_users\' )
            && !current_user_can( \'manage_options\' ) // Show everything to Admin
            && is_object( $currentScreen )
            && $currentScreen->id == \'edit-<my_taxonomy>\'
            && $currentScreen->taxonomy == \'<my_taxonomy>\' ) {
        // Get term_id\'s array that you want to show as per your requirement
        $terms      = implode( \',\', $term_id );
        $exclusions = ( empty( $exclusions ) ? \'\' : $exclusions ) . \' AND\' . \' t.`term_id` IN (\' . $terms . \')\';
    }
    return $exclusions;
}

SO网友:MikeSchinkel

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\' 参考您的实际分类法。

结束

相关推荐

Saving Taxonomy Terms

我有一个有趣的问题,希望有人能尽快回答。我已经创建了自己的metabox,它基于“我的metabox代码”(下面的列表)正确地显示了我创建的“event\\u types”分类中所有术语的下拉列表。我遇到的问题是,当从下拉列表中选择不同的术语并更新帖子时,能够保存/更新与帖子相关的术语。在对各种代码位进行修补之后,我发现通过手动将term\\u ID number[用逗号分隔]输入数组区域,我得到了我想要的结果。例如,如果在保存帖子时,函数将调用此代码wp_set_post_terms( $post_id