Расширение контактной формы 7 — панель предварительного просмотра

Любой, кто работает с WordPress, будет знаком с Контактной формой 7, замечательной работой, которую Такаюки Миёси постоянно обновляет.

Меня поразило, что одна вещь, которая будет полезна, если, как и я, вы создаете сложные формы, это визуальный предварительный просмотр. (возможно, даже визуальный редактор, но давайте не будем запускать раньше …)

Теперь, как я уже сказал, это замечательная работа, поэтому 5 минут взлома придумали:

Добавление этого в массив панелей $ в edit-contact-form.php

'preview-panel' => array(
'title' => __( 'Preview', 'contact-form-7' ),
'callback' => 'wpcf7_editor_panel_preview' ),

делает новую вкладку Preview.

Добавление этого в editor.php

function wpcf7_editor_panel_preview( $post ) {
$preview_code = $post->form_do_shortcode();
echo (do_shortcode($preview_code));
}

производит товары.

Теперь есть кое-что не так с этим, где я нуждаюсь в помощи (я намного выше моей зарплаты здесь)

  1. Я должен быть в состоянии использовать их с помощью хуков, а не грубого хака (или вилки)
  2. Я должен иметь возможность вызывать функцию, которая производит шорткод напрямую, а не полагаться на использование do_shortcode()

  3. Кнопка отправки активна (не подходит), а предварительный просмотр работает только после сохранения формы и создания шорткода.

Кто-нибудь может мне с этим помочь?

0

Решение

Если вы посмотрите на admin/edit-contact-form.php где $panels инициализируется, вы увидите эту строку ниже:

$panels = apply_filters( 'wpcf7_editor_panels', $panels );

Вы можете внедрить свою панель с этим кодом в вашей теме или плагине:

add_filter( 'wpcf7_editor_panels', function($panels) {
$panels['preview-panel'] = array(
'title' => __( 'Preview', 'contact-form-7' ),
'callback' => 'wpcf7_editor_panel_preview'
);
return $panels;
}, 10, 1 );     // 10 = priority (default); 1 = nr of arguments

Чтобы отключить кнопку отправки, слегка измените метод предварительного просмотра, поместив его в div с пользовательским классом:

$preview_code = do_shortcode( $post->shortcode() );
echo "<div class='wpcf7-preview'>$preview_code</div>"

Теперь вы можете добавить Javascript, например, чтобы отключить кнопку:

$('.wpcf7-preview input[type="submit"]').attr('disabled', 'true')

Объявлено довольно много тэгов коротких кодов, и чтобы быть максимально совместимыми, лучше всего полагаться на do_shortcode, Похоже, что WPCF7 имеет собственную функцию разбора шорткода, а не сам WP; Еще одна причина, чтобы оставить это быть. Если вы используете do_shortcode Вы можете быть относительно уверены, что предварительный просмотр будет соответствовать фактической форме, отображаемой во внешнем интерфейсе.

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

$copy = $post->copy();  // see includes/contact-form.php
$copy->save();          // idem
echo "<div class='wpcf7-preview'>" . do_shortcode( $copy->shortcode() )
. "<script>$('.wpcf7-preview input[type="submit"]').attr('disabled', 'true')</script>". "</div>";
$copy->delete();
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector