Wordpress Контактная форма 7 пользовательских коротких кодов

Контактная форма 7 имеет короткие коды, например [_date], чтобы получить сегодняшнюю дату. Но я хочу показать дату через неделю.

Итак, мне нужно создать специальный код для контакта в форму 7, которая принимает say [next_week], а в возвращенном письме отображается правильная дата.

Где и как создать пользовательские короткие коды в форме контакта 7?

Ответ 1

Добавьте в свои функции functions.php

wpcf7_add_shortcode('custom_date', 'wpcf7_custom_date_shortcode_handler', true);

function wpcf7_custom_date_shortcode_handler($tag) {
    if (!is_array($tag)) return '';

    $name = $tag['name'];
    if (empty($name)) return '';

    $next_week = date('Y-m-d', time() + (60*60*24*7)); 
    $html = '<input type="hidden" name="' . $name . '" value="' . $next_week . '" />';
    return $html;
}

Теперь в поле "Форма" в графическом интерфейсе CF7 [custom_date next_week]

Теперь вы можете использовать [next_week] в теле сообщения.

Ответ 2

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

Вот как я это сделал:

// Allow custom shortcodes in CF7 HTML form
add_filter( 'wpcf7_form_elements', 'dacrosby_do_shortcodes_wpcf7_form' );
function dacrosby_do_shortcodes_wpcf7_form( $form ) {
    $form = do_shortcode( $form );
    return $form;
}

// Allow custom shortcodes in CF7 mailed message body
add_filter( 'wpcf7_mail_components', 'dacrosby_do_shortcodes_wpcf7_mail_body', 10, 2 );
function dacrosby_do_shortcodes_wpcf7_mail_body( $components, $number ) {
    $components['body'] = do_shortcode( $components['body'] );
    return $components;
};

// Add shortcode normally as per WordPress API
add_shortcode('my_code', 'my_code_callback');
function my_code_callback($atts){
    extract(shortcode_atts(array(
        'foo' => 'bar'
    ), $atts));

    // do things
    return $foo;
}

Ответ 3

В CF7 есть два типа тегов: теги формы (сама форма контакта) и почтовые теги (электронная почта) - подробнее.


  1. Пользовательские теги формы:

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

    Функция wpcf7_add_shortcode() в принятом ответе считается устаревшей и заменена этой функцией.

  2. Пользовательские почтовые теги:

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

    1. Включить пользовательские шорткоды (не забудьте заранее создать обработчик шорткода):

      • Для почтовых компонентов, согласно ответу DACrosby.
      • Для всей почты (все компоненты), используя фильтр wpcf7_special_mail_tags:

    function my_special_mail_tag( $output, $name, $html ) {
        if ( 'myshortcode' === $name ) {
            $output = do_shortcode( "[$name]" );
        }
        return $output;
    }
    add_filter( 'wpcf7_special_mail_tags', 'my_special_mail_tag', 10, 3 );
    
    1. Добавьте пользовательский тег скрытой формы с предварительно заполненными данными в форму, а затем используйте его по почте: [my-custom-form-tag-with-some-prepopulated-data]; тег пользовательской формы должен быть зарегистрирован в wpcf7_add_form_tag(), как указано выше.

Ответ 4

Если кто-то все еще ищет ответ в 2019 году, я хотел бы сообщить, что плагин Contact Form 7 для WordPress имеет проблемы с производительностью и может снизить производительность ваших веб-сайтов. Часто на наших сайтах WordPress загружаются элементы, которые не нужны для загрузки на определенных страницах или даже везде. Эти ресурсы (файлы CSS и JavaScript), а также встроенный код увеличивают общий размер страницы, поэтому загрузка страницы занимает больше времени.

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

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

/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=5.1.4 (файл таблицы стилей) /wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=5.1.4 (файл JavaScript) Зачем мне скачивать эти файлы, когда я нахожусь на домашней странице моего сайта? В идеале эти файлы нужны только тогда, когда я загружаю свою страницу, на которой есть контакт или моя пользовательская форма.

Вот подробная статья о проблеме и о том, как ее исправить.

Ответ 5

Я раньше этого не делал, но думаю, что короткие коды управляются самим wordpress (даже для плагинов как CF7).

Пример создания простого короткого кода:

//[foobar]
function foobar_func( $atts ){
 return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );

Размещено в functions.php.

Для получения дополнительной информации: http://codex.wordpress.org/Shortcode_API

Или вы можете использовать такой плагин, который выполняет эту работу: http://wordpress.org/extend/plugins/shortbus/