add_meta_box
应该给你一个盒子,就像你想象的那样。
您有一个选择下拉列表,因为这是您在此处创建的内容:
echo \'<select name="rating">\';
echo \'<option value=""\' . ((($value == \'\') || !isset($ratings[$value])) ? \' selected="selected"\' : \'\') . \'> Untouched </option>\';
// output each rating as an option
foreach ($ratings as $id => $text) {
echo \'<option value="\' . $id . \'"\' . (($value == $id) ? \' selected="selected"\' : \'\') . \'">\' . $text. \'</option>\';
}
echo \'</select>\';
你需要一系列
checkboxes. 在上面的代码中,您只需要
foreach
. 复选框的工作方式与选择的不同。下面将为您提供四个需要保存的不同值,每个值对应于
$ratings
大堆
foreach ($ratings as $id => $text) {
echo \'<input type="checkbox" name="\'.strtolower($text).\'" value="\' . $id . \'"\' . (($value == $id) ? \' selected="selected"\' : \'\') . \'"/><label for"\'.strtolower($text).\'">\'.$text.\'</label>\';
}
您可以将所有复选框按如下方式命名为一个数组:
foreach ($ratings as $id => $text) {
echo \'<input type="checkbox" name="ratings[]" value="\' . $id . \'"\' . (($value == $id) ? \' selected="selected"\' : \'\') . \'"/><label for"ratings[]">\'.$text.\'</label>\';
}
在第一种情况下,您必须修改更新功能。第二,我相信你的功能会起作用,但我不能百分之百肯定。
获取要使用的作者列表get_users
使用who
参数设置为“authors”,根据codex,该参数将返回“用户级别大于0”。也就是说,每个不是订阅者的人——作者、编辑、贡献者等等。。。
$alleds = get_users(\'who=authors\');
再次检查是否已选择任何作者。
$currenteds = get_post_meta($post->ID, \'currenteds\', true);
然后是
foreach
创建复选框,就像上面的
$ratings
. 您需要最后一个参数
true
只有在数据库中另存为单个条目时,这种情况才有意义。
foreach ($alleds as $ed) {
$checked = (in_array($ed->ID,$currenteds)) ? \'checked="checked"\' : \'\';
echo \'<input type="checkbox" name="currenteds[]" value="\' . $ed->ID . \'"\' . $checked . \'"/><label for"ratings[]">\'.$ed->user_nicename.\'</label>\';
}
当然还有另一个
update_post_meta
阻止以保存字段。
if ( is_null($_REQUEST["currenteds"]) ) {
delete_post_meta($postid, \'currenteds\');
} else {
update_post_meta($postid, \'currenteds\', $_REQUEST[\'currenteds\']);
}
我想是的。
此外,您正在将脏数据传递给这些函数。我不会讲课,但会查找“数据验证”和“数据清理”。)
下面是整件事,包括一些拼写错误更正和bug修复。我们的编辑们也为类似的事情对我进行了窃听,所以我对它进行了模拟:)。格式不存在,但可以使用。我将其作为插件进行了测试,所以请自己构建一个plugin header. 我不知道它是否会从function.php
.
// 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
The
add_filter
将自动显示作者。要手动显示作者,请在循环中使用以下内容:
$edusers = display_current_eds();
if (false !== $edusers) {
echo implode(\', \',$edusers);
}
我将把它留给你们来解决格式和其他问题。我认为这个问题现在已经得到了充分的回答。