Статьи

Совет: Улучшение шорткодов с помощью функции has_shortcode ()

Одна из ошибок, которую допускают многие разработчики при создании шорткодов (в темах и плагинах), — это всегда загрузка всех скриптов и стилей. Для эффективности, а также для лучшего предотвращения конфликтов скрипты и стили следует загружать только тогда, когда они необходимы. Это действительно удобная функция, которая позволит вам выполнять любые действия, например, загружать сценарии и стили, когда и только когда сообщение имеет определенный шорткод.


Функции действительно довольно просты. Все, что мы собираемся сделать, это передать короткий код в качестве параметра, а затем проверить содержимое текущего сообщения на наличие этого короткого кода.

Вы можете вставить этот код в файл functions.php или в свой собственный файл плагина.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
// check the current post for the existence of a short code
function has_shortcode($shortcode = ») {
     
    $post_to_check = get_post(get_the_ID());
     
    // false because we have to search through the post content first
    $found = false;
     
    // if no short code was provided, return false
    if (!$shortcode) {
        return $found;
    }
    // check the post content for the short code
    if ( stripos($post_to_check->post_content, ‘[‘ . $shortcode) !== false ) {
        // we have found the short code
        $found = true;
    }
     
    // return our final results
    return $found;
}

Первое, что мы делаем, это передаем параметр в функцию с именем $ shortcode, и мы устанавливаем его пустым. Далее мы получаем объект сообщения текущего отображаемого сообщения. Мы делаем это с помощью функции get_post (), чтобы вернуть объект базы данных с указанным идентификатором, который мы получаем с помощью get_the_ID () , из базы данных. После того, как мы сохранили объект post в переменной $ post_to_check , мы можем искать в его содержимом указанный короткий код

После того, как мы получили объект post, мы устанавливаем переменную $ found в false, а затем проверяем, что параметр $ shortcode не пуст, и если это так, мы выходим из функции, возвращая переменную $ found как false.

Теперь мы готовы искать в содержимом сообщения желаемый короткий код. Мы делаем это с помощью функции stripos () . Эта функция принимает два параметра: строку для поиска ( стог сена ) и строку для поиска ( необходимость ). В нашем случае наш стог сена — это содержимое поста, доступ к которому осуществляется с помощью $ post_to_check-> post_content , а стрелка — это короткий код, который мы передали нашей пользовательской функции в качестве параметра. Обратите внимание, что мы оставили закрывающий «]» вне параметра иглы; это потому, что нам нужно учитывать короткие коды, которые принимают параметры, и, следовательно, не будут иметь закрывающую скобку сразу после короткого имени кода.

Если stripos () находит короткий код, мы устанавливаем переменную $ found в true и затем возвращаем наши результаты. Вот и все, наша функция завершена.


Эту функцию можно использовать в любом месте шаблонов тем (не только в цикле), и она чрезвычайно полезна для выборочной загрузки скриптов и стилей.

Чтобы проверить, имеет ли текущее сообщение определенный короткий код, вы можете использовать функцию, подобную этой:

1
2
3
if(has_shortcode(‘your_short_code’)) {
    // perform actions here
}

Вероятно, одно из наиболее распространенных мест, где вы могли бы использовать эту функцию — это в вашем header.php при загрузке стилей и скриптов, например:

1
2
3
4
if(has_shortcode(‘contactform’)) {
    wp_enqueue_style(‘contactfom’, get_bloginfo(‘template_directory’) . ‘includes/contactform.css’);
    wp_enqueue_script(‘contactfom’, get_bloginfo(‘template_directory’) . ‘includes/contactform.js’);
}

Когда плагины и темы, которые не используют хорошие стандарты кодирования, настолько распространены, важно, чтобы мы всегда стремились разрабатывать с учетом стандартов высокого качества, чтобы мы могли помочь предотвратить как можно больше возможных конфликтов сценариев / стилей. Один из способов сделать это — загружать скрипты / стили для наших коротких кодов, когда они действительно необходимы.

Подробнее об использовании и создании шорткодов в своих проектах читайте здесь !