Функция has_shortcode()
в WordPress используется для определения наличия указанного шорткода в переданном контенте. Она проверяет, содержится ли в тексте, например, содержимом поста, указанный шорткод, что может быть полезно для выборочной загрузки стилей или скриптов, выполнения редиректов и других задач.
has_shortcode( string $content, string $tag ): bool
Параметры:
- $content (строка, обязательный): Контент, в котором необходимо искать шорткод.
- $tag (строка, обязательный): Название шорткода, который нужно найти в контенте.
Возвращаемое значение:
- Возвращает
true
, если указанный шорткод найден в переданном тексте. В противном случае возвращаетfalse
.
Использование
Функция has_shortcode()
полезна для различных целей, например:
- Загрузка скриптов только на те страницы, где используется определенный шорткод.
- Проверка, использует ли пост определенный шорткод, и выполнение логики на основе этого.
Пример 1: Подключение скрипта при наличии шорткода в контенте
Если мы хотим подключить JavaScript файл только на тех страницах, где используется определенный шорткод (например, gallery
), это можно сделать следующим образом:
add_action( 'wp_enqueue_scripts', 'custom_shortcode_scripts' );
function custom_shortcode_scripts() {
global $post;
if ( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, 'gallery' ) ) {
wp_enqueue_script( 'custom-script' );
}
}
В этом примере, если в посте есть шорткод gallery
, то подключается скрипт custom-script
.
Пример 2: Редирект пользователей на страницу входа, если они не авторизованы
Допустим, у нас есть шорткод [only_loggedin_users]
, который должен быть доступен только авторизованным пользователям. Мы можем настроить редирект на страницу входа для неавторизованных пользователей, если этот шорткод используется на странице:
add_action( 'template_redirect', 'wpdocs_wordpress_doc_head', 5 );
function wpdocs_wordpress_doc_head() {
global $post;
if ( has_shortcode( $post->post_content, 'only_loggedin_users' ) ) {
if ( ! is_user_logged_in() ) {
$page = get_page_by_title('login');
wp_redirect( get_permalink( $page->ID ) );
exit;
}
}
}
Здесь функция проверяет наличие шорткода [only_loggedin_users]
в контенте поста и, если пользователь не авторизован, перенаправляет его на страницу входа.
Пример 3: Проверка наличия шорткода в тексте
Пример кода, который проверяет, есть ли шорткод gallery
в произвольном тексте:
$content = 'Это какой-либо текст, (возможно переданный через $post->post_content). Он содержит шоткод: .';
if( has_shortcode( $content, 'gallery' ) ) {
// Шорткод найден в переданном тексте.
}
Этот пример демонстрирует базовую проверку наличия шорткода в тексте. Если шорткод найден, можно выполнить дополнительную логику.
Важное замечание
Функция has_shortcode()
может требовать значительных ресурсов, если проверяется большой объем контента, так как она должна просканировать весь текст на наличие шорткодов. Поэтому используйте её с осторожностью, если нужно проверять много постов или страниц.
Заключение
Функция has_shortcode()
— это полезный инструмент для проверки наличия шорткодов в контенте, который позволяет разработчикам WordPress гибко управлять логикой на основе использования шорткодов.