将评论默认设置为页面和自定义帖子类型?


20

我想默认关闭页面和自定义帖子类型的评论

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


1
只是一个友好的提醒,我为这个问题添加了一个答案,我相信它会起到预期的作用
。.– t31os 2010年

1
我确定您的功能运行良好,但是我已经选择了适合我目的的答案。
轻微的绒毛,2010年

Answers:


9

据我了解,您希望将页面和某些自定义帖子类型设置为默认情况下具有“关闭”评论,而帖子仍将使用默认选项(即评论“打开”)。在这种情况下,以下函数将执行此操作。

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

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

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

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

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

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

10

当您创建新帖子(自定义类型或常规)时,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

希望能有所帮助.... :)




1

我建议您在注释显示中仍使用您的条件,但使用选项来存储您的条件设置。然后,您可以在“设置”菜单中添加一个页面,管理员可以根据需要打开或关闭注释。


更新资料

在我看来,您想将默认注释设置为全局设置,而不是每次创建页面时都将注释设置为“关”。这可能的。

转到WordPress管理部分中的设置>>讨论。在第一部分(“默认文章设置”中,您会看到一个名为“允许人们在新文章上发表评论”的选项)...取消选中此选项。

现在,默认情况下,所有新帖子,页面和自定义帖子类型的评论将被“关闭”。您仍可以根据情况,通过在各个帖子/页面编辑屏幕上的“讨论”元框中选择相应的复选框,将评论重新打开。


1
但是,那里已经有一个选项。我只是想默认关闭它。
轻微的绒毛,2010年

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

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

-2

如果您只是将此代码添加到functions.php中

<?php
add_post_type_support( 'your_custom_post_type', array( 'comments' ) );
?>

转到帖子,然后在屏幕选项中,勾选“讨论”和“评论”,您可以为每种自定义帖子类型启用/禁用评论。


2
并没有真正回答(尽管已回答)问题
轻度发子
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.