add_action( 'show_user_profile', 'restrict_user_form' );
add_action( 'edit_user_profile', 'restrict_user_form' );
function restrict_user_form( $user ) {
if ( ! current_user_can('add_users'))
return false;
$args = array(
'show_option_all' => '',
'show_option_none' => '未选择',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 0,
'hide_empty' => 0,
'child_of' => 0,
'exclude' => '',
'echo' => 1,
'selected' => get_user_meta( $user->ID, '_access', true),
'hierarchical' => 0,
'name' => 'allow',
'id' => '',
'class' => 'postform',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => 'category',
'hide_if_empty' => false,
'walker' => ''
);?>
<h3>限制该用户只能投稿到分类</h3>
<table class="form-table">
<tr>
<th><label for="access">选择分类:</label></th>
<td>
<?php wp_dropdown_categories($args);?>
<br />
<span class="description">用于限制投稿者的分类目录</span>
</td>
</tr>
</table>
<?php
}
add_action( 'personal_options_update', 'restrict_save_data' );
add_action( 'edit_user_profile_update', 'restrict_save_data' );
function restrict_save_data( $user_id ) {
if ( ! current_user_can( 'add_users' ) )
return false;
update_user_meta( $user_id, '_access', $_POST['allow'] );
}
// check if the user loggin in is author and be restricted
function is_restrict() {
if ( get_user_meta(get_current_user_id(), '_access', true) > 0 )
return true; else
return false;
}
add_action( 'save_post', 'save_restrict_post' );
function save_restrict_post( $post_id ) {
if ( ! wp_is_post_revision( $post_id ) && is_restrict() ) {
remove_action('save_post', 'save_restrict_post');
wp_set_post_categories( $post_id, get_user_meta( get_current_user_id() , '_access', true) );
add_action('save_post', 'save_restrict_post');
}
}
add_action( 'edit_form_after_title', 'restrict_warning' );
function restrict_warning( $post_data = false ) {
if (is_restrict()) {
$c = get_user_meta( get_current_user_id() , '_access', true);
$data = get_category($c);
echo 'You are allowing to post to category: <strong>'. $data->name .'</strong><br /><br />';
}
}
function restrict_remove_meta_boxes() {
if (is_restrict() )
remove_meta_box('categorydiv', 'post', 'normal');
}
add_action( 'admin_menu', 'restrict_remove_meta_boxes' );