Adicionando uma checkbox de editor de assistência à página de postagem

Eu executo uma plataforma de autor múltiplo e para melhorar a moderação, eu quero adicionar alguns editores auxiliares. Quero adicionar uma checkbox personalizada à página Post, onde o editor auxiliar pode confirmar quais tarefas foram concluídas.

Então, esta checkbox contém uma lista de opções de opções, por exemplo:

1 => ' Proofread ', 2 => ' Graphics Added ', 3 => ' SEO Fixed ', 4 => ' Ready for Publish ' 

E, em seguida, conter uma lista de verificação que lista todos os editores assistentes (usuários que podem edit_published_posts ) e lá o usuário pode se marcar como eles contribuíram para a edição.

A checkbox poderia ser assim:

Tarefas editoriais

Então, finalmente, na página de publicação da frente, eu quero listar os usuários que editaram o post.

Na tentativa de fazer isso, eu tenho esse código:

 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, 'rating', true); echo '
'; $ratings = array( 1 => ' Proofread ', 2 => ' Graphics Added ', 3 => ' SEO Fixed ', 4 => ' Ready for Publish ' ); echo ''; echo ' Untouched '; // output each rating as an option foreach ($ratings as $id => $text) { echo '' . $text. ''; } echo ''; echo '
'; } 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["rating"]) ) { delete_post_meta($postid, 'rating'); } else { update_post_meta($postid, 'rating', $_REQUEST['rating']); } }

No entanto , este código adiciona uma lista suspensa, não uma lista de seleção e, o mais importante, não lista os usuários do editor.

Minha pergunta é : como posso fazer uma checkbox como a imagem acima e com esses resources, e como faço eco da lista de usuários que editaram a publicação?

Solutions Collecting From Web of "Adicionando uma checkbox de editor de assistência à página de postagem"

add_meta_box deve dar-lhe o contêiner da checkbox como o seu foto.

Você tem um menu suspenso selecionado porque é o que você criou aqui:

 echo ''; 

Você precisa de uma série de checkboxs de seleção . Do código acima, você só precisa do foreach . As checkboxs de seleção funcionam de forma diferente que seleciona. O seguinte lhe dará quatro valores diferentes que você precisa salvar, um para cada elemento da matriz de $ratings .

 foreach ($ratings as $id => $text) { echo ''; } 

Você pode colocar todas as checkboxs de seleção em uma matriz, nomeando-as assim:

 foreach ($ratings as $id => $text) { echo ''; } 

No primeiro caso, você terá que modificar sua function de atualização. No segundo, acredito que sua function funcionará, mas não tenho 100% de certeza.

Para obter a sua lista de autores, você deseja usar get_users com o parâmetro who define para “autores”, que, por código, retornará “nível de usuário maior que 0”. Ou seja, todos os que não são assinantes – autores, editores, contribuidores, etc. Então …

 $alleds = get_users('who=authors'); 

Outra verificação para ver se algum dos autores já está selecionado.

 $currenteds = get_post_meta($post->ID, 'currenteds', true); 

E, em seguida, um foreach para criar as checkboxs de seleção, bem como a acima para $ratings . Você quer esse último parâmetro true somente se você salvar como uma única input no database, o que provavelmente faz sentido neste caso.

 foreach ($alleds as $ed) { $checked = (in_array($ed->ID,$currenteds)) ? 'checked="checked"' : ''; echo ''; } 

E, claro, outro bloco update_post_meta para salvar os campos.

 if ( is_null($_REQUEST["currenteds"]) ) { delete_post_meta($postid, 'currenteds'); } else { update_post_meta($postid, 'currenteds', $_REQUEST['currenteds']); } 

Eu acho que é isso.

Além disso, você está passando dados sujos para essas funções. Não vou dar palestra, mas procurar “validação de dados” e “sanitização de dados”. 🙂

Aqui está tudo com algumas correcções de digitação e correções de bugs. Nossos editores me criticaram por algo parecido, então eu zombiei disso :). A formatação é inexistente, mas funciona. Eu testei isso como um plugin, então crie-se um header de plugin . Não sei se funcionará a partir de 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 '
'; $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 ''; } $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 ''; } echo '
'; } 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( '', 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

O add_filter exibirá os autores automaticamente. Para exibir os autores, use manualmente o seguinte dentro do Loop:

 $edusers = display_current_eds(); if (false !== $edusers) { echo implode(', ',$edusers); } 

Eu vou deixá-lo para elaborar formatação e outros sinos e assobios. Penso que esta questão já foi respondida de forma adequada.