我想默认使用页面和自定义帖子类型关闭注释

最初,我只是在注释显示功能中使用了条件语句以避免在这些页面上显示该块,但是我需要用户能够根据需要重新打开评论。

评论

只是一个友好的提醒,我为这个问题添加了一个答案,我相信它可以达到预期的效果。
我确定您的功能运行良好,但是我已经选择了适合我目的的答案。

注意:相关的Trac票证#12991

#1 楼

据我了解,您希望将页面和某些自定义帖子类型设置为默认情况下具有“关闭”评论,而帖子仍将使用默认选项(即评论“打开”)。如果是这种情况,请使用以下功能。

function default_comments_off( $data ) {
    if( $data['post_type'] == 'page' && $data['post_status'] == 'auto-draft' ) {
        $data['comment_status'] = 0;
    }

    return $data;
}
add_filter( 'wp_insert_post_data', 'default_comments_off' );


评论


当您希望重新打开评论时,此操作将失败。需要对其进行编辑以使其仅运行一次

–轻度绒毛
2010-09-22 10:12



现在不在机器上,但是我猜您可以使用元数据机制来检查meta,如果没有运行该功能,则添加meta并运行该功能。

–轻度绒毛
2010-09-22 10:23

经过测试,它不会像那样简单地工作,因为您的函数的$ data变量中不包含帖子ID。

–轻度绒毛
2010-09-22在10:27

在提交我的答案之前,我已经对其进行了测试(使用WP 3.0),并且它可以正常工作。您遇到什么问题?帖子ID不在$ data中,因为尚未在运行该函数之前创建帖子(请查看函数wp_insert_post中的过滤器)。该功能仅在您访问wp-admin / post-new.php?post-type = xxx时才运行,然后在字段中输入任何内容。

– sorich87
2010-09-22 10:40

在我的测试服务器上,我无法重新打开评论,因为它们一直处于关闭状态。

–轻度绒毛
2010-09-22 13:39

#2 楼

当您创建新帖子(自定义类型或常规)时,WordPress会调用get_default_post_to_edit,然后设置新帖子将具有的默认值。

此函数提供了一些用于更改默认标题,内容和摘录的过滤器挂钩,但是很遗憾,没有其他内容……但是每个过滤器都会将完整的$post对象传递给回调,从本质上讲,这意味着可能要重新定义几个属性(或者,如果需要的话,仅定义一个)

这应该对您有用,只需在开关内添加代码应应用于的帖子类型即可。(电影和页面是示例) ..

function my_default_content( $post_content, $post ) {
    if( $post->post_type )
    switch( $post->post_type ) {
        case 'page':
        case 'movie':
            $post->comment_status = 'closed';
        break;
    }
    return $post_content;
}
add_filter( 'default_content', 'my_default_content', 10, 2 );


代码已在WP 3.0.1上进行了测试,具有禁用特定帖子类型注释的预期效果,而让其他人从default_comment_status继承默认状态选项。

希望有帮助。...:)

#3 楼

我写了一个插件,默认情况下禁用页面上的注释。 ?

评论


考虑到sorich87的答案中的5行解决方案,似乎过分!虽然欢呼。

–轻度绒毛
2010-09-25 20:25

并非如此,有很多方法可以满足代码要求,但这只是一种不同的方法。

– t31os
2010年11月17日14:42

#4 楼

根据此线程,如果不使用自定义插件或函数来完成请求,就无法实现您的要求。

评论


我写一个没有问题,只需要指出正确的方向。钩和过滤器等可能会有所帮助。

–轻度绒毛
2010-09-21 15:53

如果您最终写了一篇,请在这里分享您的所作所为!似乎可以做到这一点的插件将获得大量使用。

–特拉维斯·诺斯库特(Travis Northcutt)
2010-09-21在19:51

#5 楼

我建议您在注释显示中仍使用您的条件,但使用选项来存储您的条件设置。然后,您可以在“设置”菜单中添加一个页面,该页面允许管理员根据需要打开或关闭注释。关闭”作为全局设置,而不是每次创建页面时都将其设置为“关闭”。
转到WordPress管理部分中的“设置” >>“讨论”。在第一部分(“默认文章设置”中,您会看到一个名为“允许人们在新文章上发表评论”的选项。)取消选中此选项。
现在,默认情况下,评论将被关闭。对于所有新帖子,页面和自定义帖子类型,您仍然可以通过在各个帖子/页面编辑屏幕上的“讨论”元框中选择相应的复选框来逐个打开评论。

评论


不过,那里已经有一个选项。我只是想默认关闭它。

–轻度绒毛
2010-09-21 15:54

在哪里已经有选择?您是指帖子/页面编辑屏幕底部的“讨论”框吗?

–EAMann
2010-09-21 16:16

是的,我只是希望取消选中该选项。 Sorich87解决方案几乎可以工作。还没有在机器上尝试任何东西。

–轻度绒毛
2010-09-22 10:16

#6 楼

如果您只是将此代码添加到functions.php中,请转到帖子,然后在屏幕选项中,选中“讨论”和“评论”,启用/禁用每种自定义帖子类型的注释。

评论


并没有真正回答(尽管已经回答)问题

–轻度绒毛
2011年11月7日13:05