我喜欢使我网站的任何用户都可以建议对页面进行编辑的想法。与Stack Exchange上的编辑系统非常相似,但不同之处在于任何人都应该能够编辑,而不仅仅是注册用户。所有修改都将经过批准程序。

我该如何实施?

评论

我不知道该怎么做,但是我认为这可能确实有问题。我认为您会收到很多垃圾邮件。

您是否肯定需要为网站安装WordPress?您所需的功能听起来很像MediaWiki的安装。您应该权衡两种安装方式的利弊。 MediaWiki是一个很好的选择。

不久前,我在跳动这个想法。与该解决方案最接近的解决方案是该插件:wordpress.org/support/plugin/post-forking然而,它仍处于早期阶段。该插件仅限于注册用户。

我们一直在朝着这样的方向努力。我们已经预想了Wikipedia风格的帖子编辑,以及一个“历史记录”小部件:github.com/publishpress/Revisionary/issues/13我们还不存在,但是几乎所有结构都已经就绪。 >

#1 楼

与帖子内容,标题和作者有所不同

就像一个月前要做的事情一样,这是最简单,最未来的证明方式(我可以罚款),以检查内容是否有所更改或标题,或者作者是否更改过:

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


为了简要说明我的情况:我正在通过远程API从远程位置获取帖子。然后,我在单个后循环中返回global $post,其中包含原始数据或新数据。这样一来,我便绕过设置了所有我不需要检查更改的其他帖子值。在搜索可以(临时)保存帖子内容的副本编辑的地方时,该内容是longtext的db条目。因此,要保存建议的编辑的地方应符合该要求。注释就可以做到。最后但并非最不重要的一点是,大多数主题已经集成了注释,因此很容易在系统上搭载并插入几乎任何可用的主题。 。使用以下内容或使用附加到挂钩comment_form_default_fields的回调添加其他字段。在队列中。不知道这是否会起作用,或者不确定此(核心)值是否实际上是注释元数据,并且在保存过程中是否需要使用hidden进行添加。如果没有,您可以在以下代码行中使用一些方法

<?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
}


在管理端显示注释

这里我去具有简单的类扩展名和自定义管理页面:

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


可以在WPEngineer上找到更多信息。

批准编辑

然后您可以添加定制操作并使用我显示的第一个代码来检查建议的编辑,以检查是否有更改,然后简单地更新帖子。注释本身包含一个带有comment_approved键的值,因此直接标识已编辑的帖子ID。好。请在这里链接:)

评论


我对这个问题的赏识在于使用注释元存储建议的编辑内容和wp_text_diff()进行实际比较的想法。支持其他答案。

– fuxia♦
13年5月8日在19:26

#2 楼

我的想法很简单。


您可以在帖子的底部创建一个Edit Suggestion链接,该链接具有自定义模板,该链接使用文本框(可能带有编辑器),该文本框链接到具有默认值的自定义分类法的post content
content所做的任何更改都将在提交(作为草稿)并使用Diff算法(例如PHP内联-diff软件包或Text-Diff PEAR软件包)输入original post content后与CAPTCHA code进行比较,或者另外根据此使用PHP函数,结合CSS的长文本。

然后通过将值保存在显示以下内容的3个自定义元框(在该分类法后端添加/编辑页面)中显示
版本
用户昵称和他的电子邮件地址

并保存Post ID,也许带有update_option()函数,以备后用。

阅读编辑的版本并获得管理员的接受后,该帖子将替换为您在functions.php中编码的原始帖子。


评论


一些注意事项:(A)“当您在functions.php中编码时”-与此不同意。这是插件材料。 (B)“链接到具有帖子内容默认值的自定义分类法”-分类法术语/分类群在任何情况下都适合内容的情况下只有一个可能的值:说明。然后,您需要一个位置来存储帖子ID。这会在哪里?由于WP税制的局限性,无处可做,因此您只能保存术语ID。然后,这仅是(有限的)单向系统:过帐>期限数据。

– kaiser
2013年5月9日15:05

#3 楼

嗯,这相当复杂,正确的答案将花费大量时间来编写。因此,这仅是一些想法,不是一个真正的答案。.

通过ajax在wp_update_post中使用WordPress构建将为您提供所需的修订历史记录,但不能提供批准编辑所需的功能。

默认情况下无法从编辑创建草稿,但已在此处进行了讨论,有什么方法可以草拟已发布页面或帖子的修订版?您使用了什么变通办法?

您可以尝试使用前端编辑器,但是您将无法控制正在发布的编辑,因此请尝试使用另一个具有Revisionary功能的插件(允许权限)将其混搭基于修改,我不知道它们是否可以一起工作。

如果不这样做,您将不得不基于上述两个插件破解一个插件,或者从头开始编写一些内容。

我的方法是使用一个按钮转到另一个页面,该页面使用JSON输出文章内容/数据,而使用Ajax和WYSIWYG编辑器则更易于使用。保存按钮将作为草稿发布而不是发布,这样您就可以控制编辑(请参阅上面的WPSE关于如何完成此操作的讨论,这相当艰巨)。做到这一点,例如清理,编码,垃圾邮件,媒体处理,自定义字段,时间戳,内存等。好消息是wordpress已经具有您可以插入的修订系统,并且具有处理多个编辑器的能力。

ps。对于插件来说,这是个好主意。