Как отключить reCaptcha v3, кроме страниц Contact Form 7?

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

Форма контактов 7 загружает скрипты reCaptcha v3 на всех страницах сайтов, из-за чего сайт работает медленно.
Раньше я использовал скрипт ниже, который работал нормально, но теперь он перестал работать и загружает ещё больше скриптов. Почему это может происходить?

Я не хочу использовать дополнительные плагины.

function contactform_dequeue_scripts() {
    $load_scripts = false;
    if( is_singular() ) {
        $post = get_post();
        if( has_shortcode($post->post_content, 'contact-form-7') ) {
            $load_scripts = true;   
        }
    }
    if( ! $load_scripts ) {
        wp_dequeue_script( 'contact-form-7' );
    wp_dequeue_script('google-recaptcha');
        wp_dequeue_style( 'contact-form-7' );
    }
}
add_action( 'wp_enqueue_scripts', 'contactform_dequeue_scripts', 99 );

Я бы поместил операторы dequeue внутрь ‘if’, заменив строку $loadscripts. Нет необходимости устанавливать флаг и затем проверять его, чтобы выполнить dequeue. Это может упростить код для дальнейшей отладки.

Отредактировано: предложенные исправления кода:

function contactform_dequeue_scripts() {
    if (is_singular()) {
        $post = get_post();
        if (has_shortcode($post->post_content, 'contact-form-7')) {
            wp_dequeue_script('contact-form-7');
            wp_dequeue_script('google-recaptcha');
            wp_dequeue_style('contact-form-7');
        }
    }
}
add_action('wp_enqueue_scripts', 'contactform_dequeue_scripts', 99);

Это удаляет скрипты только если есть шорткод для CF7, и если это одиночная страница. В противном случае все выполняется нормально. Проще читать код и понимать, что происходит.

Это работает для меня.

function contactform_dequeue_scripts() {

    $load_scripts = false;

    if( is_singular() ) {
        $post = get_post();

        if( has_shortcode($post->post_content, 'contact-form-7') ) {
            $load_scripts = true;

        }

    }

    if( ! $load_scripts ) {
        wp_dequeue_script( 'contact-form-7' );
        wp_dequeue_script( 'google-recaptcha' );
        wp_dequeue_script( 'wpcf7-recaptcha' );     
        wp_dequeue_style( 'wpcf7-recaptcha' );
        wp_dequeue_style( 'contact-form-7' );

    }

}
add_action( 'wp_enqueue_scripts', 'contactform_dequeue_scripts', 99 );

Более аккуратная версия:

function wpcf7_dequeue_redundant_scripts() {
    $post = get_post();
    if ( is_singular() && !has_shortcode( $post->post_content, 'contact-form-7' ) ) {
        wp_dequeue_script( 'contact-form-7' );
        wp_dequeue_style( 'contact-form-7' );
        wp_dequeue_script( 'wpcf7-recaptcha' );     
        wp_dequeue_style( 'wpcf7-recaptcha' );
        wp_dequeue_script( 'google-recaptcha' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpcf7_dequeue_redundant_scripts', 99 );

Я использую блок редактора и блок формы контактов 7, и это очень элегантное решение для этого требования:

/**
 * Удалить reCaptcha формы контактов 7 из каждой страницы, загружать только когда блок существует - работает на версии 5.5.6
 */

add_action( 'wp_enqueue_scripts', function() {
    if ( ! has_block( 'contact-form-7/contact-form-selector' ) ) {
        wp_dequeue_script( 'contact-form-7' );
        wp_dequeue_script( 'google-recaptcha' );
        wp_dequeue_script( 'wpcf7-recaptcha' );
        wp_dequeue_style( 'contact-form-7' );
    }
}, 101 );

Пожалуйста, обратите внимание, что автор утверждает, что это не лучшая идея.

У меня такая же проблема с загрузкой на https://cadres-et-cordes.fr/
можете подтвердить, что я должен попробовать скопировать и вставить этот код в конец файла functions.php?

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

Для решения проблемы с загрузкой reCaptcha v3 на всех страницах сайта, кроме тех, где расположена форма Contact Form 7 (CF7), вам необходимо использовать подход, который отключает скрипты и стили, связанные с CF7, на страницах, где они не требуются. Это не только улучшит производительность вашего веб-сайта, но и будет особенно полезно для пользователей, которым не нужны функции, обеспечиваемые этой формой, на других страницах.

Шаги для отключения reCaptcha v3

  1. Создайте резервную копию вашей темы: Перед внесением изменений в файл functions.php, обязательно создайте резервную копию вашей темы, чтобы предотвратить возможные негативные последствия.

  2. Редактируйте файл functions.php: Добавьте следующий код в конец файла functions.php вашей активной темы. Это удалит загрузку скриптов и стилей CF7, если на странице не используется шорткод для этой формы:

function wpcf7_dequeue_redundant_scripts() {
    if ( ! ( is_singular() && has_shortcode( get_post()->post_content, 'contact-form-7' ) ) ) {
        wp_dequeue_script( 'contact-form-7' );
        wp_dequeue_script( 'google-recaptcha' );
        wp_dequeue_script( 'wpcf7-recaptcha' );     
        wp_dequeue_style( 'contact-form-7' );
        wp_dequeue_style( 'wpcf7-recaptcha' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpcf7_dequeue_redundant_scripts', 99 );

Объяснение кода

  • Функция is_singular(): Эта функция проверяет, является ли текущая страница индивидуальным постом, страницей или вложением.
  • Функция has_shortcode(): Проверяет, содержит ли контент текущего поста шорткод 'contact-form-7'. Если шорткод не найден и страница индивидуальна, то скрипты и стили, относящиеся к CF7, будут удалены (dequeue).
  • wp_dequeue_script() и wp_dequeue_style(): Эти функции отключают загрузку указанных скриптов и стилей.

Оптимизация производительности

Удаление ненужных скриптов и стилей поможет уменьшить время загрузки страниц вашего сайта и улучшить пользовательский опыт. Это особенно важно для мобильных устройств и пользователей с медленным интернет-соединением.

Примечание

Обратите внимание на то, что отключение reCaptcha может снизить защиту от спама на ваших формах CF7. Убедитесь, что у вас есть альтернативные меры для защиты от нежелательных сообщений.

Заключение

Внесение предложенных изменений позволит вам улучшить производительность сайта, исключив избыточную загрузку скриптов, связанных с Contact Form 7, на страницах, где они не нужны. Рекомендуется периодически проверять работу вашего сайта и делать необходимые корректировки, так как обновления плагинов могут влиять на функциональность.

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

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