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 есть два типа тегов: теги формы (сама форма контакта) и почтовые теги (электронная почта) - подробнее.
Пользовательские теги формы:
Чтобы добавить пользовательский тег формы, вы можете использовать функцию wpcf7_add_form_tag()
на ловушке действия wpcf7_init
(Подробнее).
Функция wpcf7_add_shortcode()
в принятом ответе считается устаревшей и заменена этой функцией.
Пользовательские почтовые теги:
Я не нашел никакой встроенной функциональности для добавления пользовательских почтовых тегов, но я думаю, что здесь есть несколько возможных решений:
Включить пользовательские шорткоды (не забудьте заранее создать обработчик шорткода):
- Для почтовых компонентов, согласно ответу 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 );
- Добавьте пользовательский тег скрытой формы с предварительно заполненными данными в форму, а затем используйте его по почте:
[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/