Skip to content

Instantly share code, notes, and snippets.

@sxidsvit
Forked from campusboy87/wpcf-redirect-NEW.php
Created August 28, 2018 01:36
Show Gist options
  • Save sxidsvit/5d77880fb91cd7eab7f988cdf8e95a51 to your computer and use it in GitHub Desktop.
Save sxidsvit/5d77880fb91cd7eab7f988cdf8e95a51 to your computer and use it in GitHub Desktop.
Contact Form 7 Redirect
<?php
/**
* Plugin Name: WPCF Redirect
*/
add_filter( 'shortcode_atts_wpcf7', 'shortcode_atts_wpcf7' );
add_filter( 'wpcf7_editor_panels', 'wpcf7_add_redirect_panels' );
add_action( 'wpcf7_after_save', 'wpcf7_redirect_save_field' );
add_action( 'wp_footer', 'wpcf7_redirect_enqueue_assets' );
/**
* Добавляет вкладку в редактор формы.
*
* @param array $panels
*
* @return array
*/
function wpcf7_add_redirect_panels( $panels ) {
$panels['redirect-panel'] = [
'title' => 'Перенаправления',
'callback' => 'wpcf7_redirect_panel_form',
];
return $panels;
}
/**
* Выводит на экран содержимое вкладки.
*
* @param WPCF7_ContactForm $post
*/
function wpcf7_redirect_panel_form( $post ) {
$value = get_post_meta( $post->id(), '_redirect', true );
?>
<h2>Перенаправления</h2>
<fieldset>
<legend>Перенаправление после успешной отправки формы.</legend>
<input
type="url"
name="wpcf7-redirect"
style="width: 100%;"
placeholder="Укажите ссылку"
value="<?php echo esc_attr( $value ); ?>"
>
</fieldset>
<?php
}
/**
* Валидирует и сохраняет значение поля.
*
* @param WPCF7_ContactForm $form
*/
function wpcf7_redirect_save_field( $form ) {
if ( ! empty( $_POST['wpcf7-redirect'] ) ) {
update_post_meta( $form->id(), '_redirect', esc_url( $_POST['wpcf7-redirect'] ) );
} else {
delete_post_meta( $form->id(), '_redirect' );
}
}
/**
* Регистрирует данные об обработанных формах (шорткодах) плагина CF7.
*
* @param array $out
*
* @return array
*/
function shortcode_atts_wpcf7( $out ) {
wpcf7_redirect_add_form_data( $out['id'] );
return $out;
}
/**
* Возвращает данные об обработанных формах (шорткодах) плагина CF7.
*
* @param int|null $form_id
*
* @return array
*/
function wpcf7_redirect_add_form_data( $form_id = null ) {
static $forms = [];
if ( $form_id && empty( $forms[ $form_id ] ) ) {
$forms[ $form_id ] = esc_url( get_post_meta( $form_id, '_redirect', true ) );
}
return $forms;
}
/**
* Выводит на экран JavaScript и стили плагина.
*
* @return void
*/
function wpcf7_redirect_enqueue_assets() {
$forms = array_filter( wpcf7_redirect_add_form_data() );
$scripts = $styles = '';
foreach ( $forms as $id => $link ) {
$scripts .= "if ('$id' === event.detail.contactFormId) { location.assign('$link'); }";
$styles .= ".wpcf7[id*='f$id'] .wpcf7-mail-sent-ok { display: none !important; }";
}
if ( $scripts ) {
?>
<script>
document.addEventListener('wpcf7mailsent', function () {
<?php echo $scripts; ?>
}, false);
</script>
<style>
<?php echo $styles; ?>
</style>
<?php
}
}
<?php
/**
* Plugin Name: WPCF Redirect
*/
add_filter( 'wpcf7_editor_panels', 'wpcf7_add_redirect_panels' );
add_filter( 'shortcode_atts_wpcf7', 'shortcode_atts_wpcf7' );
add_action( 'wpcf7_after_save', 'wpcf_redirect_save_field' );
/**
* Добавляет вкладку в редактор формы.
*
* @param array $panels
*
* @return array
*/
function wpcf7_add_redirect_panels( $panels ) {
$panels['redirect-panel'] = [
'title' => 'Перенаправления',
'callback' => 'wpcf7_redirect_panel_form',
];
return $panels;
}
/**
* Выводит на экран содержимое вкладки.
*
* @param WPCF7_ContactForm $post
*/
function wpcf7_redirect_panel_form( $post ) {
$value = get_post_meta( $post->id(), '_redirect', true );
?>
<h2>Перенаправления</h2>
<fieldset>
<legend>Перенаправление после успешной отправки формы.</legend>
<input
type="url"
name="wpcf7-redirect"
style="width: 100%;"
placeholder="Укажите ссылку"
value="<?php echo esc_attr( $value ); ?>"
>
</fieldset>
<?php
}
/**
* Валидирует и сохраняет значение поля.
*
* @param WPCF7_ContactForm $form
*/
function wpcf_redirect_save_field( $form ) {
if ( ! empty( $_POST['wpcf7-redirect'] ) ) {
update_post_meta( $form->id(), '_redirect', sanitize_text_field( $_POST['wpcf7-redirect'] ) );
} else {
delete_post_meta( $form->id(), '_redirect' );
}
}
/**
* Регистриует хук для вывода JS под каждую запрошенную форму, у которой указан редирект.
*
* @param array $out
*
* @return array
*/
function shortcode_atts_wpcf7( $out ) {
add_action( 'wp_footer', function () use ( $out ) {
if ( ! empty( $out['id'] ) && $id = (int) $out['id'] ) {
$form = WPCF7_ContactForm::get_instance( $id );
$link = get_post_meta( $id, '_redirect', true );
?>
<script>
document.addEventListener('wpcf7mailsent', function () {
location.assign("<?php echo esc_url( $link ); ?>");
}, false);
</script>
<style>
.wpcf7[id*='f<?php echo $id; ?>'] .wpcf7-mail-sent-ok {
display: none !important;
}
</style>
<?php
}
} );
return $out;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment