Как создать шорткод с эффектом наведения и сложными опциями

Вопрос или проблема

Мне интересно, как поступать, когда нужно создать шорткод с несколькими эффектами наведения или сложными опциями (градиент, тень коробки и т.д., вещи, которые нельзя сделать встроенно). Как вы генерируете CSS?

Я не хочу генерировать блок <style></style>, потому что для простого шорткода, используемого 10 раз на странице, будет сгенерировано 10 блоков.

Все шорткоды устанавливаются со страницы пользователем, поэтому они создаются, когда вызывается the_content().

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

Ищу вариант, который соответствовал бы стандартам HTML5 и WC3.

Добавление ID к каждому шорткоду и генерация пользовательского CSS – это то, что я хочу сделать, но не могу найти, как это правильно реализовать (без создания блока <style></style> повсюду).

Буду рад любым советам и примерам.

Заранее спасибо!

Градиент и тень коробки можно вставлять встроенно. Вашими проблемами будут состояния наведения. К счастью, есть уловка. Вы можете поместить стили наведения во внешний элемент и заставить их наследоваться при наведении. Вот так:

<div class="myshortcode">
<a style="color:blue;"><span style="color:red;">Содержимое</span></a>
</div>

В вашем style.css вы добавляете эту обобщающую строку с эффектом перехода в качестве бонуса:

.myshortcode a span {transition:color 1s;}
.myshortcode a:hover span {color:inherit !important;}

Ответ или решение

Создание шорткода с возможностью сложных опций, такими как градиенты и тени, требует внимательного подхода для обеспечения правильной работы с hover-состояниями. Вот полная инструкция о том, как вы можете это реализовать, избегая создания лишних блоков <style>.

1. Создание шорткода

Сначала необходимо зарегистрировать ваш шорткод в functions.php вашей темы или в пользовательском плагине:

function my_custom_shortcode($atts) {
    // Задать атрибуты по умолчанию
    $atts = shortcode_atts(
        array(
            'border_radius' => '5px',
            'gradient' => 'linear-gradient(to right, #ff7e5f, #feb47b)',
            'boxshadow' => '0 4px 8px rgba(0,0,0,0.1)',
            // Добавить другие атрибуты по мере необходимости
        ),
        $atts,
        'my_shortcode'
    );

    // Генерировать уникальный ID для каждого шорткода
    $unique_id = uniqid('my_shortcode_');

    // Вернуть HTML-код для шорткода
    ob_start();
    ?>
    <div id="<?php echo esc_attr($unique_id); ?>" class="myshortcode" style="border-radius: <?php echo esc_attr($atts['border_radius']); ?>; background: <?php echo esc_attr($atts['gradient']); ?>; box-shadow: <?php echo esc_attr($atts['boxshadow']); ?>;">
        <a style="color: blue;">
            <span style="color: red;">Содержимое</span>
        </a>
    </div>
    <?php
    return ob_get_clean();
}
add_shortcode('my_shortcode', 'my_custom_shortcode');

2. CSS для оформления hover-состояний

В файле style.css вашей темы добавьте общий стиль для вашего шорткода, а также стили для hover-состояний:

.myshortcode a span {
    transition: color 1s;
}

.myshortcode a:hover span {
    color: inherit !important; /* Унаследовать цвет от родительского элемента */
}

/* Добавьте стили для вашего уникального ID, если необходимо */

3. Динамическое добавление стилей

Вы также можете добавить динамические стили с помощью функции wp_add_inline_style, чтобы для каждого уникального шорткода применялись особые стили. Вот пример, как это можно сделать:

function my_custom_shortcode($atts) {
    $atts = shortcode_atts(array(
        'border_radius' => '5px',
        'gradient' => 'linear-gradient(to right, #ff7e5f, #feb47b)',
        'boxshadow' => '0 4px 8px rgba(0,0,0,0.1)',
    ), $atts);

    $unique_id = uniqid('my_shortcode_');

    // Добавление стилей в обертку
    $custom_css = "
        #{$unique_id} {
            border-radius: {$atts['border_radius']};
            background: {$atts['gradient']};
            box-shadow: {$atts['boxshadow']};
        }
    ";
    wp_add_inline_style('your-style-handle', $custom_css);

    ob_start();
    ?>
    <div id="<?php echo esc_attr($unique_id); ?>" class="myshortcode">
        <a style="color: blue;">
            <span style="color: red;">Содержимое</span>
        </a>
    </div>
    <?php
    return ob_get_clean();
}
add_shortcode('my_shortcode', 'my_custom_shortcode');

Заключение

Теперь, используя вышеописанный метод, вы сможете создать шорткод с возможностью настройки, который будет использовать динамически сгенерированные стили, избегая проблем с множественными <style> блоками. Этот подход отвечает требованиям HTML5 и W3C, обеспечивая правильное отображение и поведение на всех устройствах. Пользователи смогут легко настраивать свои шорткоды, а вы сможете контролировать стили без излишнего кода.

Оцените материал
Добавить комментарий

Капча загружается...