Comment activer les modifications suggérées?

18

J'aime l'idée de permettre à tout utilisateur de mon site Web de suggérer des modifications à une page. Tout comme le système d’édition sur Stack Exchange, mais en ce sens que tout le monde devrait pouvoir éditer, pas seulement les utilisateurs enregistrés. Toutes les modifications seraient soumises à un processus d'approbation.

Comment pourrais-je implémenter cela?

    
posée Patrick Klug 12.03.2013 - 12:52

3 réponses

11

Diffusez le contenu, le titre et l'auteur du message

Comme il fallait faire quelque chose dans le même sens il y a quelques mois, voici la méthode la plus simple et la plus future (que je pourrais bien régler) pour vérifier si un changement a été apporté au contenu ou au titre ou si l'auteur a changé:

// 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'];

Pour expliquer brièvement mon scénario: je récupérais des publications d’un emplacement distant via une API distante. Ensuite, j'ai renvoyé le global $post , au cours d'une seule boucle de publication, contenant les données d'origine ou les nouvelles données. De cette façon, je me suis déplacé en définissant toutes les autres valeurs de publication pour lesquelles je n'avais pas besoin de vérifier les modifications.

Proposer la modification

Lors de la recherche d'un emplacement où une copie-édition du contenu de l'article pourrait être (temporairement) sauvegardée, il convient de garder à l'esprit que le contenu est une entrée de base de données de longtext . Ainsi, l’endroit où l’on veut sauvegarder la modification suggérée devrait répondre à cette exigence. Les commentaires font cela.

Ensuite, il est intéressant de noter qu’ils proposent une API qui les place bien dans une boucle, qui s’intègre parfaitement, qui est hautement personnalisable et qui peut être rapidement configurée. Enfin, la plupart des thèmes sont déjà accompagnés de commentaires, il est donc facile de s’adapter au système et de s’intégrer à presque tous les thèmes disponibles.

Je suggérerais simplement (soit) d'étendre ou de modifier le formulaire de commentaire. Utilisez les éléments suivants ou ajoutez des champs supplémentaires avec un rappel relié à 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()
{
    ?>
    <p class="comment-form-title">
        <label for="wpse_propsed_edit">
            <?php _e( 'Propose Edit', 'your_textdomain' ); ?>
        </label>
        <textarea name="wpse_propsed_edit" id="wpse_propsed_edit">
            <?php the_content(); ?>
        </textarea>
    </p>
    <input type="hidden" name="comment_approved" id="comment_approved" value="0" />
    <?php
}

J'ai donc ajouté un champ hidden pour comment_approved avec une valeur de 0 pour le définir dans la file d'attente. Vous ne savez pas si cela fonctionnera ou si cette valeur (fondamentale) correspond à des métadonnées de commentaires et doit être ajoutée à l'aide de add_comment_meta() lors de l'enregistrement. Sinon, vous pouvez utiliser quelque chose le long des lignes de code suivantes

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 );
}

Affichage des commentaires côté administrateur

Je voudrais y aller avec une simple extension de classe et une page d’administrateur personnalisée:

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
}

Plus d'infos est disponible sur WPEngineer .

Approbation des modifications

Vous pouvez ensuite ajouter des actions personnalisées et traiter les modifications proposées en utilisant le premier code que j'ai montré pour vérifier s'il y a eu une modification, puis simplement mettre à jour la publication. Le commentaire lui-même contient une valeur avec la clé comment_post_ID . L'identification de l'ID de publication modifié est donc tout à fait simple.

Note finale

J'aimerais aussi voir le dernier plugin. Veuillez le lier ici:)

    
réponse donnée kaiser 07.05.2013 - 17:03
8

Mon idée est simple.

  • Vous pouvez créer un lien Edit Suggestion au bas des publications qui a un modèle défini personnalisé, en utilisant une zone de texte (peut-être avec un éditeur) qui est liée à une taxonomie personnalisée avec la valeur par défaut de post content .

  • Toute modification apportée à content sera comparée à original post content après la soumission (en tant que brouillon) et la saisie de CAPTCHA code avec des algorithmes Diff tels que PHP inline-diff package ou Text-Diff Le package PEAR ou utilisant alternativement une fonction PHP selon this pour des textes pas trop longs avec une combinaison de CSS.

  • Ensuite, en enregistrant les valeurs dans 3 méta-boîtes personnalisées (dans cette page d'ajout / de modification de taxonomie), qui indiquent

    1. Contenu d'origine
    2. Version modifiée
    3. Pseudo de l'utilisateur et son adresse électronique

    et économiser Post ID peut-être avec une fonction update_option() pour une utilisation ultérieure.

  • Après lecture de la version modifiée et de son acceptation par l'administrateur, cet article sera remplacé par celui d'origine, comme vous l'avez codé dans functions.php.

réponse donnée revo 15.03.2013 - 10:56
4

Eh bien, c’est assez compliqué, une réponse appropriée prendrait beaucoup de temps à écrire. Donc, ce n’est pas une vraie réponse mais quelques réflexions ..

L’utilisation de WordPress dans wp_update_post via ajax vous donnerait l’historique des révisions nécessaires, mais pas la capacité nécessaire pour approuver les modifications.

La création de brouillons à partir de modifications n’est pas possible par défaut, mais a été décrite ici, Existe-t-il un moyen de rédiger une révision d'une page ou d'un article publié? Quelles solutions de contournement avez-vous utilisées?

Vous pouvez essayer d’utiliser Editeur frontal , mais vous n’avez aucun contrôle sur les modifications en cours. publié, alors essayez de le mélanger avec un autre plugin comme Révision qui autorise les modifications basées sur les autorisations. Je n'en ai aucune idée. s'ils vont travailler ensemble.

Sinon, vous devrez pirater un plugin basé sur les 2 plugins ci-dessus ou écrire quelque chose à partir de zéro.

Mon approche scratch consisterait à utiliser un bouton qui permet d'accéder à une autre page qui affiche le contenu / les données de publication à l'aide de JSON , ce qui facilite l'utilisation de Ajax . et éditeurs WYSIWYG. Le bouton Sauvegarder afficherait un brouillon au lieu de le publier, ce qui vous permettrait de contrôler les modifications (voir la discussion WPSE ci-dessus sur la façon de procéder, c’est plutôt intimidant).

Cette opération comporte des complications supplémentaires, telles que la désinfection, l'encodage, le spam, la gestion des supports, les champs personnalisés, l'horodatage, la mémoire, etc. La bonne nouvelle est que Wordpress dispose déjà d'un système de révision auquel vous pouvez vous connecter et d'une capacité décente à gérer plusieurs éditeurs.

ps. C'est une bonne idée pour un plugin.

    
réponse donnée Wyck 02.05.2013 - 01:13

Lire d'autres questions sur les étiquettes