123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- <?php
- if ( ! class_exists( 'acf_form_widget' ) ) :
- class acf_form_widget {
-
- function __construct() {
-
- $this->preview_values = array();
- $this->preview_reference = array();
- $this->preview_errors = array();
-
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
- add_action( 'in_widget_form', array( $this, 'edit_widget' ), 10, 3 );
- add_action( 'acf/validate_save_post', array( $this, 'acf_validate_save_post' ), 5 );
-
- add_filter( 'widget_update_callback', array( $this, 'save_widget' ), 10, 4 );
- }
-
- function admin_enqueue_scripts() {
-
- if ( acf_is_screen( 'widgets' ) || acf_is_screen( 'customize' ) ) {
-
- } else {
- return;
- }
-
- acf_enqueue_scripts();
-
- add_action( 'acf/input/admin_footer', array( $this, 'admin_footer' ), 1 );
- }
-
- function acf_validate_save_post() {
-
-
- if ( ! isset( $_POST['_acf_widget_id'] ) ) {
- return;
- }
-
- $id = sanitize_text_field( $_POST['_acf_widget_id'] );
- $number = sanitize_text_field( $_POST['_acf_widget_number'] );
- $prefix = sanitize_text_field( $_POST['_acf_widget_prefix'] );
- $values = acf_sanitize_request_args( $_POST[ $id ][ $number ]['acf'] );
-
- acf_validate_values( $values, $prefix );
-
- }
-
- function edit_widget( $widget, $return, $instance ) {
-
- $post_id = 0;
- $prefix = 'widget-' . $widget->id_base . '[' . $widget->number . '][acf]';
-
- if ( $widget->number !== '__i__' ) {
- $post_id = "widget_{$widget->id}";
- }
-
- $field_groups = acf_get_field_groups(
- array(
- 'widget' => $widget->id_base,
- )
- );
-
- if ( ! empty( $field_groups ) ) {
-
- acf_form_data(
- array(
- 'screen' => 'widget',
- 'post_id' => $post_id,
- 'widget_id' => 'widget-' . $widget->id_base,
- 'widget_number' => $widget->number,
- 'widget_prefix' => $prefix,
- )
- );
-
- echo '<div class="acf-widget-fields acf-fields -clear">';
-
- foreach ( $field_groups as $field_group ) {
-
- $fields = acf_get_fields( $field_group );
-
- if ( empty( $fields ) ) {
- continue;
- }
-
- acf_prefix_fields( $fields, $prefix );
-
- acf_render_fields( $fields, $post_id, 'div', $field_group['instruction_placement'] );
- }
-
- echo '</div>';
-
-
- if ( $widget->updated ) : ?>
- <script type="text/javascript">
- (function($) {
-
- acf.doAction('append', $('[id^="widget"][id$="<?php echo $widget->id; ?>"]') );
-
- })(jQuery);
- </script>
- <?php
- endif;
- }
- }
-
- function save_widget( $instance, $new_instance, $old_instance, $widget ) {
-
-
- if ( ! ( function_exists( 'wp_is_json_request' ) && wp_is_json_request() ) ) {
- if ( ! acf_verify_nonce( 'widget' ) ) {
- return $instance;
- }
- }
-
- if ( isset( $_POST['wp_customize'] ) || ! isset( $new_instance['acf'] ) ) {
- return $instance;
- }
-
- acf_save_post( "widget_{$widget->id}", $new_instance['acf'] );
-
- return $instance;
- }
-
- function admin_footer() {
- ?>
- <script type="text/javascript">
- (function($) {
-
-
- acf.set('post_id', 'widgets');
-
-
- acf.addFilter('find_fields', function( $fields ){
-
-
- $fields = $fields.not('#available-widgets .acf-field');
-
-
- $fields = $fields.not('.widget.ui-draggable-dragging .acf-field');
-
-
- return $fields;
- });
-
-
- $('#widgets-right').on('click', '.widget-control-save', function( e ){
-
-
- var $button = $(this);
- var $form = $button.closest('form');
-
-
- var valid = acf.validateForm({
- form: $form,
- event: e,
- reset: true
- });
-
-
- if( !valid ) {
- e.preventDefault();
- e.stopImmediatePropagation();
- }
- });
-
-
- $('#widgets-right').on('click', '.widget-top', function(){
- var $widget = $(this).parent();
- if( $widget.hasClass('open') ) {
- acf.doAction('hide', $widget);
- } else {
- acf.doAction('show', $widget);
- }
- });
-
- $(document).on('widget-added', function( e, $widget ){
-
-
- setTimeout(function(){
- acf.doAction('append', $widget );
- }, 100);
- });
-
- })(jQuery);
- </script>
- <?php
- }
- }
- new acf_form_widget();
- endif;
- ?>
|