The comments_open() WordPress PHP function checks if the current post is open for comments.
Usage
Here’s a general usage example of comments_open():
if ( comments_open() ) { echo 'Comments are open!'; } else { echo 'Comments are closed!'; }
In this example, if the current post allows comments, it will output ‘Comments are open!’, otherwise it will output ‘Comments are closed!’.
Parameters
- $post (int|WP_Post) (Optional) Post ID or WP_Post object. Default is the current post.
More information
See WordPress Developer Resources: comments_open()
This function has been in use since early versions of WordPress and there’s no deprecation information as of now.
Examples
Enqueue a script only if comments are open
This code will enqueue a script only if the current post is a single post and comments are open for it.
function enqueue_my_script(){ if ( is_single() && comments_open() ) { wp_enqueue_script( 'my_script' ); } } add_action( 'wp_print_scripts', 'enqueue_my_script' );
Disable comments on pages
This code will disable comments on all pages. This is useful if your theme uses comments_open() to check if the comments are open.
function disable_page_comments( $open, $post_id ) { $post = get_post( $post_id ); if ( 'page' == $post->post_type ) $open = false; return $open; } add_filter( 'comments_open', 'disable_page_comments', 10, 2 );
Completely disable commenting
This code will completely disable commenting on your website.
add_filter( 'comments_open', '__return_false' );
Enable comments based on a custom field
This code will enable comments on a post if it has a custom field “Allow Comments” set to 1. Useful when you want to enable comments for specific old posts.
function enable_comments_based_on_meta( $open, $post_id ) { $post = get_post( $post_id ); if (get_post_meta($post->ID, 'Allow Comments', true)) { $open = true; } return $open; } add_filter( 'comments_open', 'enable_comments_based_on_meta', 10, 2 );
Display a message based on comments status
This code will display a different message based on whether the comments are open or closed for the current post.
if ( comments_open() ) { echo 'Feel free to leave a comment!'; } else { echo 'Sorry, comments are closed for this post.'; }