Como habilitar as edições sugeridas?

Eu gosto da idéia de permitir que qualquer usuário do meu site sugira mudanças em uma página. Muito parecido com o sistema de edição no Stack Exchange, mas diferente em que qualquer pessoa deve ser capaz de editar, não apenas usuários registrados. Todas as edições passariam por um processo de aprovação.

Como eu poderia implementar isso?

Solutions Collecting From Web of "Como habilitar as edições sugeridas?"

Diff o conteúdo do post, título e autor

Como fez algo relacionado há algum mês, aqui é o modo de prova mais fácil e mais futuro (que eu poderia bem) para verificar se houve uma alteração no conteúdo ou título ou se o autor mudou:

// Update Title '' !== wp_text_diff( $el['post_title'], $GLOBALS['post']->post_title ) AND $GLOBALS['post']->post_title = $el['post_title']; // Update Content '' !== wp_text_diff( $el['post_content'], $GLOBALS['post']->post_content ) AND $GLOBALS['post']->post_content = $el['post_content']; // Update author $GLOBALS['post']->post_author !== $el['post_author'] AND $GLOBALS['post']->post_author = $el['post_author']; 

Para explicar meu cenário brevemente: eu estava procurando mensagens de um local remoto através de uma API remota. Em seguida, eu devolvi o global $post , durante um único loop de publicação, contendo os dados originais ou os novos dados. Desta forma, eu me movi em torno de configurar todos os outros valores de postagem que eu não precisava verificar para as mudanças.

Propor a edição

O fato principal que se deve ter em mente ao pesquisar um local onde uma cópia-edição do conteúdo do post pode ser (temporariamente) salvo é que o conteúdo é uma input db de longtext . Então, o lugar onde se deseja salvar a edição sugerida deve atender a esse requisito. Os comentários fazem isso.

Depois, há o bom fato de que eles oferecem uma API para colocá-los bem em um loop, então ele se integra de forma suave, é altamente personalizável e pode ser configurado rapidamente. Por último, mas não menos importante, a maioria dos temas já vem com comentários integrados, de modo que é fácil encaminhar o sistema e se encheckboxr em quase todos os temas disponíveis.

Eu sugeriria apenas (ou) estender ou alterar o formulário de comentário. Use o seguinte ou adicione campos adicionais com uma chamada de retorno ligada aos comment_form_default_fields .

 < ?php // Add it for logged in users and guests: add_action( 'comment_form_logged_in_after', 'wpse_proposed_edit_textarea' ); add_action( 'comment_form_after_fields', 'wpse_proposed_edit_textarea' ); function wpse_proposed_edit_textarea() { ?> 

< ?php }

Então adicionei um campo hidden para comment_approved com um valor de 0 para configurá-lo na fila. Não tenho certeza se isso funcionará ou se esse valor (core) for realmente metadados de comentários e precisa ser adicionado usando add_comment_meta() durante a gravação. Caso contrário, você poderia usar algo ao longo das seguintes linhas de código

 add_filter( 'pre_comment_approved' , 'wpse_pre_suggest_edit', 100, 2 ); function wpse_pre_suggest_edit( $approved , $commentdata ) { // You might need to inspect $commentdata // to determine approval, disapproval, or spam status if ( ! empty( $commentdata['wpse_propsed_edit'] ) ) { # Now add a filter to the comment post action, so we save a meta entry add_action( 'comment_post', 'wpse_set_proposed_edit' ); return 0; } return 1; } // This function makes it easier for us to identify the comments by their meta value function wpse_set_proposed_edit( $comment_id ); { // Only run once remove_filter( current_filter(), __FUNCTION__ ); add_comment_meta( $comment_id, 'proposed_edit', true, true ); } 

Exibindo os comentários no lado administrativo

Aqui eu iria com uma extensão de class simples e uma página de administração personalizada:

 function wpse_add_proposed_edits_admin_page() { add_menu_page( 'Proposed Edits', 'Suggested Edits', 'activate_plugins', 'proposed_edits', 'wpse_proposed_edits_page_cb' ); } add_action( 'admin_menu', 'wpse_add_proposed_edits_admin_page' ); function wpse_proposed_edits_page_cb() { $proposed_edits_table = new WP_Proposed_Edits_Table(); $proposed_edits_table->prepare_items(); $proposed_edits_table->display(); } class WP_Proposed_Edits_Table extends WP_List_Table { // Override List table default logic in here } 

Mais informações podem ser encontradas no WPEngineer .

Aprovando edições

Você poderia então adicionar ações personalizadas e processar as edições propostas usando o primeiro código que mostrei para verificar se houve uma alteração e, em seguida, simplesmente atualizar a postagem. O próprio comentário contém um valor com uma chave de comment_post_ID , então identificar o ID de postagem editado é direto.

Nota final

Eu também gostaria de ver o plugin final. Por favor, ligue-o aqui 🙂

Minha idéia é algo simples.

  • Você pode fazer um link Edit Suggestion na parte inferior das postagens que possui um modelo personalizado definido, naquele uso de uma checkbox de texto (talvez com um editor) que esteja vinculada a uma taxonomia personalizada com o valor padrão do post content do post content .

  • Qualquer alteração no content será comparada com original post content depois de enviar (como rascunho) e inserir o CAPTCHA code com algoritmos Diff, como pacote PHP inline-diff ou pacote PEAR Text-Diff ou, alternativamente, usando uma function PHP de acordo com isso por não muito longo textos com combinação de CSS.

  • Em seguida, salvando valores em 3 checkboxs personalizadas de Meta (na página de adição / edição de back-end de taxonomia) que mostram

    1. Conteúdo original
    2. Versão editada
    3. Sobrenome do usuário e seu email

    e salvar Post ID talvez com uma function update_option() para uso posterior.

  • Depois de ler a versão editada e a aceitação pelo administrador, essa postagem será substituída pela original conforme você codificou em functions.php.

Bem, isso é bastante complicado, uma resposta adequada levaria um tempo considerável para escrever. Então, esta não é uma resposta real apenas alguns pensamentos …

Usando o WordPress, crie o wp_update_post através do ajax , daria-lhe o histórico de revisão necessário, mas não a capacidade necessária para aprovar as edições.

A criação de rascunhos a partir de edições não é possível por padrão, mas foi discutido aqui. Existe alguma maneira de redigir uma revisão de uma página ou publicação publicada? Quais as soluções alternativas que usou?

Você pode tentar usar o Editor de Front-end, mas você não terá controle sobre as edições a serem publicadas, então tente e mashe com outro plugin, como o Revisionary, que permite as edições baseadas em permissions, não tenho idéia se eles vão trabalhar juntos.

Se eles não tiverem que cortar um plugin com base nos 2 plugins acima ou escrever algo a partir do zero.

Minha abordagem de rascunho seria ter um botão que vá para outra página que produz o conteúdo / dados do post usando o JSON , que é mais fácil de trabalhar quando usa editores Ajax e WYSIWYG. O botão salvar publicaria como um rascunho em vez de publicar e, dessa forma, você teria controle sobre as edições (veja a discussão acima do WPSE sobre como realizar isso, é bastante assustador).

Há complicações adicionais ao fazer isso, como sanitização, codificação, spam, manipulação de mídia, campos personalizados, timestamps, memory, etc. A boa notícia é que o wordpress já possui um sistema de revisão que você pode conectar e uma habilidade decente para lidar com vários editores .

ps. Esta é uma boa ideia para um plugin.