Last active
June 13, 2022 19:46
-
-
Save spivurno/8084779 to your computer and use it in GitHub Desktop.
Gravity Wiz // Gravity Forms Live Preview
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* WARNING! THIS SNIPPET MAY BE OUTDATED. | |
* The latest version of this snippet can be found in the Gravity Wiz Snippet Library: | |
* https://github.com/gravitywiz/snippet-library/blob/master/gravity-forms/gw-live-preview.php | |
*/ | |
# Default Usage | |
new GWLivePreview(); | |
# With Configuration Options (hide title, hide description, enable ajax) | |
new GWLivePreview( array( | |
'title' => false, | |
'description' => false, | |
'ajax' => true | |
) ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* WARNING! THIS SNIPPET MAY BE OUTDATED. | |
* The latest version of this snippet can be found in the Gravity Wiz Snippet Library: | |
* https://github.com/gravitywiz/snippet-library/blob/master/gravity-forms/gw-live-preview.php | |
*/ | |
/** | |
* Gravity Wiz // Gravity Forms Live Preview | |
* | |
* Preview your Gravity forms on the frontend of your website. Adds a "Live Preview" link to the Gravity Forms toolbar. | |
* | |
* @version 1.0.1 | |
* @author David Smith <david@gravitywiz.com> | |
* @license GPL-2.0+ | |
* @link http://gravitywiz.com/... | |
* @copyright 2013 Gravity Wiz | |
*/ | |
class GWLivePreview { | |
var $post_type = 'gw_live_preview'; | |
var $preview_post = null; | |
function __construct( $args = array() ) { | |
if( ! property_exists( 'GFCommon', 'version' ) || ! version_compare( GFCommon::$version, '1.8', '>=' ) ) | |
return; | |
$this->_args = wp_parse_args( $args, array( | |
'id' => 0, | |
'title' => true, | |
'description' => true, | |
'ajax' => false | |
) ); | |
add_action( 'admin_footer', array( $this, 'display_preview_link' ) ); | |
add_action( 'init', array( $this, 'register_preview_post_type' ) ); | |
add_action( 'parse_query', array( $this, 'maybe_load_preview_functionality' ) ); | |
} | |
# ADMIN FUNCTIONS | |
function display_preview_link() { | |
if( ! $this->is_applicable_admin_page() ) | |
return; | |
$form_id = rgget( 'id' ); | |
$url = get_post_type_archive_link( $this->post_type ) . '?id=' . $form_id; | |
?> | |
<script type="text/javascript"> | |
(function($){ | |
$( '<li class="gf_form_toolbar_preview"><a style="position:relative" id="gw-live-preview" href="<?php echo $url; ?>" target="_blank">' + | |
'<i class="fa fa-eye" style="position: absolute; text-shadow: 0px 0px 5px rgb(255, 255, 255); z-index: 99; line-height: 7px; left: 0px font-size: 9px; top: 20px; background-color: rgb(243, 243, 243);"></i>' + | |
'<i class="fa fa-file-o" style="margin-left: 5px; line-height: 12px; font-size: 18px; position: relative; top: 2px;"></i>' + | |
'<span style="padding-left:4px;"><?php _e( 'Live Preview' ); ?></span>' + | |
'</a></li>' ) | |
.insertAfter( 'li.gf_form_toolbar_preview' ); | |
})(jQuery); | |
</script> | |
<?php | |
} | |
function is_applicable_admin_page() { | |
return in_array( rgget( 'page' ), array( 'gf_edit_forms', 'gf_entries' ) ) && rgget( 'id' ); | |
} | |
# FRONTEND FUNCTIONS | |
function register_preview_post_type() { | |
$args = array( | |
'label' => __( 'Form Preview' ), | |
'description' => __( 'A post type created for previewing Gravity Forms forms on the frontend.' ), | |
'public' => false, | |
'publicly_queryable' => true, | |
'has_archive' => true, | |
'can_export' => false, | |
'supports' => false, | |
'rewrite' => array( | |
'slug' => 'gravity-forms-preview', | |
'feeds' => false, | |
'pages' => false | |
) | |
); | |
register_post_type( $this->post_type, $args ); | |
} | |
function maybe_load_preview_functionality( $wp_query ) { | |
if( ! $wp_query->is_main_query() || ! $this->is_live_preview() ) { | |
return; | |
} | |
$this->live_preview_hooks(); | |
$wp_query->query_vars['p'] = $this->get_preview_post( 'ID' ); | |
add_action( 'wp', array( $this, 'populate_post_content_for_gf_scripts_styles' ), 9 ); | |
} | |
public function populate_post_content_for_gf_scripts_styles() { | |
global $wp_query; | |
foreach( $wp_query->posts as &$post ) { | |
$post->post_content = $this->get_shortcode(); | |
} | |
} | |
function get_preview_post( $prop = false ) { | |
$preview_posts = get_posts( array( 'post_type' => $this->post_type ) ); | |
$preview_post = false; | |
// if there are no preview posts, create one | |
if( empty( $preview_posts ) ) { | |
$post_id = wp_insert_post( array( | |
'post_type' => $this->post_type, | |
'post_title' => __( 'Form Preview', 'gravityforms' ), | |
'post_status' => 'publish' | |
) ); | |
$preview_post = get_post( $post_id ); | |
} | |
// otherwise, use the first preview post (there should only be one) | |
else { | |
$preview_post = $preview_posts[0]; | |
} | |
if( ! $preview_post ) { | |
return false; | |
} else if( $prop ) { | |
return $preview_post->$prop; | |
} else { | |
return $preview_post; | |
} | |
} | |
function live_preview_hooks() { | |
add_filter( 'template_include', array( $this, 'load_preview_template' ), 11 ); | |
add_filter( 'the_content', array( $this, 'modify_preview_post_content' ) ); | |
} | |
function load_preview_template( $template ) { | |
$page_template = get_page_template(); | |
if( $page_template ) | |
return $page_template; | |
$single_template = get_single_template(); | |
if( $single_template ) | |
return $single_template; | |
return $template; | |
} | |
function modify_preview_post_content( $content ) { | |
return $this->get_shortcode(); | |
} | |
function get_shortcode( $args = array() ) { | |
if( ! is_user_logged_in() ) | |
return '<p>' . __( 'You need to log in to preview forms.' ) . '</p>' . wp_login_form( array( 'echo' => false ) ); | |
if( ! GFCommon::current_user_can_any( 'gravityforms_preview_forms' ) ) | |
return __( 'Oops! It doesn\'t look like you have the necessary permission to preview this form.' ); | |
if( empty( $args ) ) | |
$args = $this->get_shortcode_parameters_from_query_string(); | |
extract( wp_parse_args( $args, $this->_args ) ); | |
$title = $this->is_true_value( $title ) ? 'true' : 'false'; | |
$description = $this->is_true_value( $description ) ? 'true' : 'false'; | |
$ajax = $this->is_true_value( $ajax ) ? 'true' : 'false'; | |
return "[gravityform id='$id' title='$title' description='$description' ajax='$ajax']"; | |
} | |
function get_shortcode_parameters_from_query_string() { | |
return array_filter( array( | |
'id' => rgget( 'id' ), | |
'title' => rgget( 'title' ), | |
'description' => rgget( 'description' ), | |
'ajax' => rgget( 'ajax' ) | |
) ); | |
} | |
function is_true_value( $value ) { | |
return $value === true || intval( $value ) === 1 || strtolower( $value ) === 'true'; | |
} | |
function is_live_preview() { | |
return is_post_type_archive( $this->post_type ); | |
} | |
} | |
new GWLivePreview(); |
👉 This Gist has been migrated to the Gravity Wiz Snippet Library:
https://github.com/gravitywiz/snippet-library/blob/master/gravity-forms/gw-live-preview.php
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How to use this code?