区分帖子内容、标题和作者
就像几个月前不得不做的一些相关事情一样,这里有一种最简单、最能证明未来的方法(我可以确定),可以检查内容或标题是否有更改,或者作者是否有更改:
// 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
, 在单个post循环期间,包含原始数据或新数据。这样,我就可以设置所有其他无需检查更改的帖子值。
建议编辑,在搜索可以(临时)保存帖子内容副本编辑的位置时,必须记住的主要事实是,内容是longtext
. 因此,要保存建议编辑的位置应该满足该要求。评论可以做到这一点。
还有一个很好的事实是,它们提供了一个API来将它们很好地放置在一个循环中,因此它可以顺利集成,高度可定制,并且可以快速设置。最后但并非最不重要的一点是,大多数主题都已经集成了注释,因此很容易在系统上进行复制,并与几乎任何可用的主题挂钩。
我建议(或者)扩展或修改评论表单。使用以下字段或添加附加字段,并将回调连接到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
}
所以我添加了一个
hidden
字段
comment_approved
值为
0
将其设置在队列中。不确定这是否可行,或者这个(核心)值是否实际上是注释元数据,是否需要使用
add_comment_meta()
保存期间。如果没有,您可以在下面几行代码中使用一些东西
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 );
}
在管理端显示注释这里我将使用一个简单的类扩展和一个自定义管理页面:
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
}
更多信息
can be found on WPEngineer.
批准编辑之后,您可以添加自定义操作,并使用我显示的第一个代码来处理建议的编辑,以检查是否有更改,然后只需更新帖子即可。注释本身包含一个键为的值comment_post_ID
, 因此,识别编辑后的帖子ID很简单。
最后一句话,我也想看看最后的插件。请在此处链接:)