根据当前用户ID检查编辑器ID并添加disabled="disabled"
如果他们不匹配。
$current_user = get_currentuseinfo();
foreach ($alleds as $ed) {
$checked = (in_array($ed->ID,(array)$currenteds)) ? \' checked="checked"\' : \'\';
$disabled = (!current_user_can(\'administrator\') && $current_user->ID !== $ed->ID) ? \' disabled="disabled" : \'\';
echo \'<input type="checkbox" name="currenteds[]" value="\' . $ed->ID . \'"\' .$checked . \'" \'.$disabled.\' /><label for="ratings[]">\'.$ed->user_nicename.\'</label>\';
}
请注意,这并不是万无一失的。我可以在10秒内绕过它。认为这只是视觉上的便利。在保存数据时,您也会希望执行相同的操作。这更为棘手。我想我会改变这一点:
if ( is_null($_REQUEST["currenteds"]) ) {
delete_post_meta($postid, \'currenteds\');
} else {
update_post_meta($postid, \'currenteds\', $_REQUEST[\'currenteds\']);
}
更像是:
// admins have full capabilities
if (current_user_can(\'administrator\')) {
if ( is_null($_REQUEST["currenteds"]) ) {
delete_post_meta($postid, \'currenteds\');
} else {
update_post_meta($postid, \'currenteds\', $_REQUEST[\'currenteds\']);
}
} else {
$meta_values = get_post_meta($postid, \'currenteds\', true);
// I don\'t remember what the relevant arrays look like
// even though I wrote much of that code :)
// Here is the idea
// Check the IDs in $meta_values against the IDs in $_REQUEST[\'currenteds\']
// and only allow manipulation of IDs that match get_currentuserinfo()->ID
// I\'ll have to install the code to do better but if you can\'t get it I will.
}
两种改进方法,轻度测试。
function editor_tasks( $post ) {
global $wpdb;
$value = get_post_meta($post->ID, \'ratings\', true);
echo \'<div class="misc-pub-section misc-pub-section-last"><span id="timestamp"><label>Editorial tasks: </label>\';
$ratings = array(
1 => \' Proofread \',
2 => \' Graphics Added \',
3 => \' SEO Fixed \',
4 => \' Ready for Publish \'
);
foreach ($ratings as $id => $text) {
$checked = (in_array($id,(array)$value)) ? \' checked="checked"\' : \'\';
echo \'<input type="checkbox" name="ratings[]" value="\' . $id . \'"\'. $checked . \'/><label for="ratings[]">\'.$text.\'</label>\';
}
$qry[\'relation\'] = \'OR\';
$qry[] = array(
\'key\' => $wpdb->prefix.\'capabilities\',
\'value\' => \'editor\',
\'compare\' => \'like\'
);
$qry[] = array(
\'key\' => $wpdb->prefix.\'capabilities\',
\'value\' => \'administrator\',
\'compare\' => \'like\'
);
$qry = array(\'fields\' => \'all_with_meta\',\'meta_query\'=>$qry);
$alleds = get_users($qry);
$currenteds = get_post_meta($post->ID, \'currenteds\', true);
global $current_user;
get_currentuserinfo();
foreach ($alleds as $ed) {
$checked = (in_array($ed->ID,(array)$currenteds)) ? \' checked="checked"\' : \'\';
$disabled = (!current_user_can(\'administrator\') && $current_user->ID !== $ed->ID) ? \' disabled="disabled"\' : \'\';
echo \'<input type="checkbox" name="currenteds[]" value="\' . $ed->ID . \'" \' .$checked . \' \'.$disabled.\' /><label for="ratings[]">\'.$ed->user_nicename.\'</label>\';
}
echo \'</span></div>\';
}
还有。。。
function save_metadata($postid)
{
$rid = wp_is_post_revision($postid);
if ($postid !== $rid) $postid = $rid;
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return false;
if ( !current_user_can( \'edit_page\', $postid ) ) return false;
if( empty($postid) ) return false;
if (!empty($_REQUEST[\'ratings\'])) {
if ( is_null($_REQUEST["ratings"]) ) {
delete_post_meta($postid, \'ratings\');
} else {
update_post_meta($postid, \'ratings\', $_REQUEST[\'ratings\']);
}
}
// admins have full capabilities
if (current_user_can(\'administrator\')) {
if ( is_null($_REQUEST["currenteds"]) ) {
delete_post_meta($postid, \'currenteds\');
} else {
update_post_meta($postid, \'currenteds\', $_REQUEST[\'currenteds\']);
}
} else {
global $current_user;
get_currentuserinfo();
$meta_values = get_post_meta($postid, \'currenteds\', true);
if (!empty($_REQUEST["currenteds"]) && in_array($current_user->ID,$_REQUEST["currenteds"])) {
$meta_values[] = "$current_user->ID";
} else {
$u = array_search($current_user->ID,$meta_values);
var_dump($u);
if (false !== $u) {
unset($meta_values[$u]);
}
}
$meta_values = array_unique($meta_values);
update_post_meta($postid, \'currenteds\', $meta_values);
}
}