WordPress как на ладони
rgbcode is looking for WordPress developers.

comments_open()WP 1.5.0

Проверяет открыто ли комментирование для указанного поста/записи.

Результат возвращаемый этой функцией можно изменить через фильтр comments_open.

Работает на основе: get_post()
1 раз — 0.002038 сек (очень медленно) | 50000 раз — 0.81 сек (очень быстро) | PHP 7.1.5, WP 4.8.1
Хуки из функции

Возвращает

true|false. true, если можно оставлять комментарии к посту и false, если нельзя.

Использование

comments_open( $post_id );
$post_id(число|WP_Post)
ID поста, для которого нужно проверить разрешение оставлять комментарии. Если не указать, то результат вернётся для текущего поста.
По умолчанию: null

Примеры

0

#1 Проверим возможность оставлять комментарии к посту

и если оставлять комментарии разрешено, то выведем шаблон комментариев.

if( comments_open($post->ID) )
	comments_template();
0

#2 Использование фильтра comments_open

Этот пример показывает как закрыть комментарии ко всем постоянным страницам (записям типа page):

add_filter( 'comments_open', 'my_comments_open', 10, 2 );

function my_comments_open( $open, $post_id ) {

	$post = get_post( $post_id );

	if ( 'page' == $post->post_type )
		$open = false;

	return $open;
}

Если шаблон комментариев выводится через проверку, как в первом примере, то для всех постоянных страниц comments_open($post->ID) будет возвращать false, соответственно шаблон комментариев (comments_template()) выводится не будет.

0

#3 Еще одна проверка возможности оставить коммент

Альтернативно проверить возможность оставлять комментарии к текущему посту можно так:

global $post;
if( 'open' == $post->comment_status )
	comments_template();

Список изменений

С версии 1.5.0 Введена.

Код comments_open() WP 6.4.3

function comments_open( $post = null ) {
	$_post = get_post( $post );

	$post_id       = $_post ? $_post->ID : 0;
	$comments_open = ( $_post && ( 'open' === $_post->comment_status ) );

	/**
	 * Filters whether the current post is open for comments.
	 *
	 * @since 2.5.0
	 *
	 * @param bool $comments_open Whether the current post is open for comments.
	 * @param int  $post_id       The post ID.
	 */
	return apply_filters( 'comments_open', $comments_open, $post_id );
}
2 комментария
    Войти