postIdProvider = $provider; } /** * Скрыта ли текущая страница на указанном языке. * * @param Language $language Целевой язык. */ public function isHiddenOn( Language $language ): bool { if ( $language->isDefault || ! $this->settings->isManualPostVisibility() ) { return false; } $postId = $this->postId(); if ( $postId <= 0 || ! $this->visibility->isEligiblePost( $postId ) ) { return false; } return ! $this->visibility->isVisible( $postId, $language->locale ); } /** * Запись текущей страницы или 0. */ private function postId(): int { if ( null !== $this->postIdProvider ) { return (int) ( $this->postIdProvider )(); } return self::queriedPostId(); } /** * Запись, которую показывает главный запрос, либо 0. * * Одиночная запись/страница (в том числе статическая главная) и страница, * назначенная «страницей записей» блога: у обеих есть собственная запись, * которую владелец мог не включить для языка. Вложения не считаются. * До хука `wp` главного запроса ещё нет, и условные теги вызывать нельзя. */ public static function queriedPostId(): int { if ( ! did_action( 'wp' ) || is_404() || is_search() ) { return 0; } if ( is_singular() && ! is_attachment() ) { return (int) get_queried_object_id(); } if ( is_home() && ! is_front_page() ) { return (int) get_queried_object_id(); } return 0; } }