Любой, кто работает с 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));
}
производит товары.
Теперь есть кое-что не так с этим, где я нуждаюсь в помощи (я намного выше моей зарплаты здесь)
Я должен иметь возможность вызывать функцию, которая производит шорткод напрямую, а не полагаться на использование do_shortcode()
Кнопка отправки активна (не подходит), а предварительный просмотр работает только после сохранения формы и создания шорткода.
Кто-нибудь может мне с этим помочь?
Если вы посмотрите на 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();
Других решений пока нет …