Функция HAS_BLOCKS() в WordPress 5.0.0
Функция has_blocks() помогает определить, содержит ли пост или строка контента блоки.
Оптимизация производительности
Эта проверка оптимизирована для скорости, а не для строгой точности, поэтому она определяет наличие блока по его шаблону, но не проверяет структуру блока. Если вам нужна строгая проверка, лучше использовать парсер блоков на содержимом поста.
Использование Функции
has_blocks() используется в функции has_block().
Время выполнения:
- 1 раз — 0.000001 секунд (практически мгновенно)
- 50000 раз — 0.04 секунды
Параметры функции
Функция возвращает true или false — в зависимости от наличия блоков в посте.
Сигнатура функции
has_blocks( $post );
- $post (int|string|WP_Post|null) — содержимое поста, его ID или объект поста. По умолчанию используется глобальная переменная
$post.
Примеры использования
Пример 1: Проверка наличия блоков в строке контента
$content = '
Это содержимое обычных постов. Спасибо за ваше внимание!
';
if ( has_blocks( $content ) ) {
echo 'Содержимое имеет блоки'; // Это сообщение будет отображено
} else {
echo 'Содержимое не имеет блоков';
}
Пример 2: Парсинг выводов блоков
- Мы можем использовать эту функцию, чтобы передать флаг, указывающий, есть ли блоки в контенте, когда мы находимся в раздешенном окружении, где WordPress выступает в качестве бэкенда, а фронтенд реализован на другом языке программирования.
- Мы можем преобразовать (парсить) вывод блоков по нашим требованиям и передать его через API. Проверка наличия блоков может быть полезной для эффективной передачи содержимого.
class WPDocs_Custom_Block_Parse {
function parse() {
// Делаем что-то
}
}
function wpdocs_custom_block_parser() {
return 'WPDocs_Custom_Block_Parse';
}
/**
* В реализации проверяем, есть ли блоки в контенте
*/
if ( has_blocks( $post_content ) ) {
add_filter( 'block_parser_class', 'wpdocs_custom_block_parser' );
$response_content = parse_blocks( $content );
remove_filter( 'block_parser_class', 'wpdocs_custom_block_parser' );
}
Примечания
- Обратите внимание на функцию
parse_blocks(), которая может быть полезна для углубленной работы с блоками.
История изменений
- С версии 5.0.0 эта функция была добавлена в WordPress.
Код функции
function has_blocks( $post = null ) {
if ( ! is_string( $post ) ) {
$wp_post = get_post( $post );
if ( ! $wp_post instanceof WP_Post ) {
return false;
}
$post = $wp_post->post_content;
}
return str_contains( (string) $post, '