当我解释这件事时,请跟我坦白。我正在为我的多作者平台添加一个助理编辑器功能。在post edit页面中出现的框中,编辑可以勾选他们完成的任务(例如校对文章),然后检查他们的用户名(这样他们就可以在头版帖子中获得信任)。盒子看起来像这样:
框的代码:
// author checkboxes
add_action( \'add_meta_boxes\', \'assisting_editor\' );
function assisting_editor() {
add_meta_box(
\'assisting_editor\', // id, used as the html id att
__( \'Editorial Tasks\' ), // meta box title
\'editor_tasks\', // callback function, spits out the content
\'post\', // post type or page. This adds to posts only
\'side\', // context, where on the screen
\'low\' // priority, where should this go in the context
);
}
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);
foreach ($alleds as $ed) {
$checked = (in_array($ed->ID,(array)$currenteds)) ? \' checked="checked"\' : \'\';
echo \'<input type="checkbox" name="currenteds[]" value="\' . $ed->ID . \'"\' .$checked . \'"/><label for="ratings[]">\'.$ed->user_nicename.\'</label>\';
}
echo \'</span></div>\';
}
add_action( \'save_post\', \'save_metadata\');
function save_metadata($postid)
{
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return false;
if ( !current_user_can( \'edit_page\', $postid ) ) return false;
if( empty($postid) ) return false;
if ( is_null($_REQUEST["ratings"]) ) {
delete_post_meta($postid, \'ratings\');
} else {
update_post_meta($postid, \'ratings\', $_REQUEST[\'ratings\']);
}
if ( is_null($_REQUEST["currenteds"]) ) {
delete_post_meta($postid, \'currenteds\');
} else {
update_post_meta($postid, \'currenteds\', $_REQUEST[\'currenteds\']);
}
}
function display_current_eds($ID = \'\') {
if (empty($ID)) {
global $post;
if (!empty($post)) {
$ID = $post->ID;
}
}
if (empty($ID)) return false;
$eds = get_post_meta($post->ID,\'currenteds\',true);
if (!empty($eds)) {
foreach ($eds as $e) {
$edu = get_userdata($e);
$edusers[] = sprintf(
\'<a href="%1$s" title="%2$s" rel="author">%3$s</a>\',
get_author_posts_url( $edu->ID, $edu->user_nicename ),
esc_attr( sprintf( __( \'Posts by %s\' ), $edu->user_nicename ) ),
$edu->user_nicename
);
}
return $edusers;
}
return false;
}
function authors_content_filter($content) {
$authors = display_current_eds();
if (false !== $authors) {
$content .= implode(\', \',$authors);
}
return $content;
}
add_filter(\'the_content\',\'authors_content_filter\');
// add author checkboxes
现在,问题是用户可以勾选自己的名字and any of the other editors. 这意味着用户也可以取消选中任何名称。这不好。我的问题是,我该如何做才能让用户只勾选自己的名字,而其他名字会变灰?