我如何才能允许编辑对尚未发布的帖子发表评论?

时间:2012-04-12 作者:Travis Pflanz

在我的NFL足球博客上,所有用户都可以发表博客帖子。新注册者将被授予贡献者身份。当用户发表文章时,编辑会对其进行审查,然后编辑会安排文章在符合我们博客时间表的时间发布。

多位编辑问我,他们是否可以在编辑文章并安排发布后,但在实际发布之前,立即对文章发表评论。

所谓评论,我指的是对文章内容的评论,而不是对投稿者的写作风格、语法、拼写等的评论,也不是其他编辑在后端可以看到的评论。我使用Peter\'s Post NotesPeter\'s Collaboration E-mails 处理与参与者有关这些问题/情况的沟通。

例如,我需要的是:一位撰稿人写了一篇关于佩顿·曼宁与丹佛野马队签约的文章。编辑在晚上10点接到通知,这篇文章已提交审查。他/她会检查帖子的语法、拼写、标签、正确的类别等。编辑会做出所有必要的更正,并将帖子安排在明天上午9点发布。现在,编辑想把佩顿·曼宁与野马队的合同留给全世界看。问题是,这篇文章明天早上9点发表,但他今天晚上10点在读这篇文章。。。他不想在11小时后回来,在他现在正在读的一篇帖子上留下评论。

这对于允许编辑在文章发表之前发表评论是有意义的,因为编辑已经阅读了文章,所以如果可能的话,我想让编辑更容易,而不是编辑需要在文章发表后回来发表评论。

我真的不喜欢评论上的时间戳是否与发布后的时间或评论实际发表的时间相同,即使是在计划发布帖子之前。

我发现了一个两年前的论坛帖子(http://core.trac.wordpress.org/ticket/11810 ) 讨论WordPress中的一个漏洞,该漏洞过去允许对未发布的帖子发表评论,但我根本找不到允许编辑在WordPress 3中对未发布的帖子发表评论的方法。

2 个回复
最合适的回答,由SO网友:Travis Pflanz 整理而成

通过thought process initiated by userabuser, 经过更多的研究和反复尝试,我已经想出了一个解决方案。

我使用添加了一个自定义元字段Easy Content Types (只是因为我使用这个插件有一段时间了)并向我的函数中添加了以下代码。php

if (current_user_can(\'editor\')){
add_action(\'pending_to_future\', \'insert_editor_comment\');
add_action(\'pending_to_publish\', \'insert_editor_comment\');

function insert_editor_comment( $data){

global $current_user;
    get_currentuserinfo();

global $post;

$time = current_time(\'mysql\');
$editor_comment = get_post_meta($post->ID, \'ecpt_comment\', TRUE);

$data = array(
\'comment_post_ID\' => $post->ID,
\'comment_author\' => $current_user->display_name,
\'comment_author_email\' => $current_user->user_email,
\'comment_author_url\' => $current_user->user_url,
\'comment_content\' => $editor_comment,
\'comment_type\' => \'comment\',
\'comment_parent\' => 0,
\'user_id\' => $current_user->ID ,
\'comment_author_IP\' => \'127.0.0.1\',
\'comment_agent\' => \'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)\',
\'comment_date\' => $time,
\'comment_approved\' => 1,
\'comment_subscribe\' => \'Y\',
);

wp_insert_comment($data);
}
}
参考文献Function Reference/wp_insert_comment
  • Post Status Transitions
  • Function Reference/get_currentuserinfo
  • Global Variables
  • 其他

    评论的元框仅在编辑器状态及更高级别时可见。

    由于编辑器可以选择是立即发布帖子,还是安排稍后发布,我添加了一些操作来保存这两个实例上的评论。

    我还自动订阅了编辑对这篇文章的新评论。

    如果您有改进此方法的建议,请让我知道!

    SO网友:Adam

    这取决于评论是针对谁的,是针对管理员和编辑,还是也针对贡献者?

    我已经设置了一个系统,有点复杂,它可以处理您的一些问题,但是实现这种功能最简单的方法是使用自定义字段。

    特别是一个带有重复字段的自定义元框,允许您添加多个字段(例如textareas),编辑器可以为这些字段留下注释。

    根据您的博客结构,贡献者可能会或可能不会看到这些评论。通常,如果他们可以访问仪表板,他们就会看到它们。另一方面,如果他们是通过你的网站前端贡献的,那么他们不会看到这些评论,除非你在模板中查询你的自定义字段。

    无论哪种方式,都可以将这些字段的视图限制为某个用户类。

    我强烈建议使用找到的WP Alchemy Metabox类HERE

    它功能强大,有很好的文档记录,并且相对容易与大量示例metabox文件一起使用,您可以直接使用这些文件,并帮助您了解它们的用法。

    更新

    好的,我只是在这里大声思考,但我的想法是,您仍然需要在编辑后屏幕中使用一个自定义字段,您的编辑可以在发布后留下他/她的评论,然后连接到wp\\u评论,获取自定义字段的值并将其插入到评论中。

    However it might be just as easy to call the custom field value from within your theme file but within the section where you display your actual comments. Then in fact you could quite easily style the comments to make them standout in a unique fashion (being editorial comments).

    但如果你非常不想这样做,那么你需要按照以下思路思考。。。(以下为概念代码)

    add_action(\'pending_to_publish_CUSTOM_POST_TYPE_NAME\', \'insert_editor_comment\');
    
    function insert_editor_comment( $data){
    
    $time = current_time(\'mysql\');
    
    $data = array(
        \'comment_post_ID\' => 1,
        \'comment_author\' => \'admin\',
        \'comment_author_email\' => \'[email protected]\',
        \'comment_author_url\' => \'http://\',
        \'comment_content\' => \'content here\',
        \'comment_type\' => \'\',
        \'comment_parent\' => 0,
        \'user_id\' => 1,
        \'comment_author_IP\' => \'127.0.0.1\',
        \'comment_agent\' => \'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)\',
        \'comment_date\' => $time,
        \'comment_approved\' => 1,
    );
    
    wp_insert_comment($data);
    }
    
    同样,这只是概念性的,我从未做过这样的事情,但它应该让你沿着正确的道路思考。如果我有时间,我甚至可以测试一下!虽然我相信其他许多人可以很容易地插手并为您敲定这笔交易。

    结束

    相关推荐

    在自定义帖子类型管理区域中使用wp_EDITOR的多个实例

    我为我的养鱼网站编写了一个自定义插件,允许用户输入有关热带鱼物种的信息(即“栖息地”、“分布”、“位置”等)。每一个都是meta 字段。它们当前是可拖放的可折叠元字段,使用cleditor 作为富文本编辑器的首选。我选择了cleditor,因为在WP 2.8或我开始开发此插件的任何版本中,我都无法找到将多个TinyMCE实例放在同一页面上的方法。我所说的“多个实例”,主要是指具有不同heights 和buttons.从那以后,我相信wp_editor 指挥部来了,这可能会对我有所帮助。My questio