acf_ajax_fetch_block() │ ACF 5.7.13
Handles the ajax request for block data.
Хуков нет.
Возвращает
null
. Ничего (null).
Использование
acf_ajax_fetch_block();
Список изменений
С версии 5.7.13 | Введена. |
Код acf_ajax_fetch_block() acf ajax fetch block ACF 6.0.4
function acf_ajax_fetch_block() { // Validate ajax request. if ( ! acf_verify_ajax() ) { wp_send_json_error(); } // Get request args. $args = acf_request_args( array( 'post_id' => 0, 'clientId' => null, 'query' => array(), ) ); $args['block'] = isset( $_REQUEST['block'] ) ? $_REQUEST['block'] : false; //phpcs:ignore -- requires auth; designed to contain unescaped html. $args['context'] = isset( $_REQUEST['context'] ) ? $_REQUEST['context'] : array(); //phpcs:ignore -- requires auth; designed to contain unescaped html. $block = $args['block']; $query = $args['query']; $client_id = $args['clientId']; $raw_context = $args['context']; $post_id = $args['post_id']; // Bail early if no block. if ( ! $block ) { wp_send_json_error(); } // Unslash and decode $_POST data for block and context. $block = wp_unslash( $block ); $block = json_decode( $block, true ); $context = false; if ( ! empty( $raw_context ) ) { $raw_context = wp_unslash( $raw_context ); $raw_context = json_decode( $raw_context, true ); if ( is_array( $raw_context ) ) { $context = $raw_context; // Check if a postId is set in the context, otherwise try and use it the default post_id. $post_id = isset( $context['postId'] ) ? intval( $context['postId'] ) : intval( $args['post_id'] ); } } // Check if clientId should become $block['id']. if ( empty( $block['id'] ) && ! empty( $client_id ) ) { $block['id'] = $client_id; } // Prepare block ensuring all settings and attributes exist. $block = acf_prepare_block( $block ); if ( ! $block ) { wp_send_json_error(); } // Load field defaults when first previewing a block. if ( ! empty( $query['preview'] ) && ! $block['data'] ) { $fields = acf_get_block_fields( $block ); foreach ( $fields as $field ) { $block['data'][ "_{$field['name']}" ] = $field['key']; } } // Setup postdata allowing form to load meta. acf_setup_meta( $block['data'], acf_ensure_block_id_prefix( $block['id'] ), true ); // Setup main postdata for post_id. global $post; //phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- required for block template rendering. $post = get_post( $post_id ); setup_postdata( $post ); // Vars. $response = array( 'clientId' => $client_id ); // Query form. if ( ! empty( $query['form'] ) ) { // Load fields for form. $fields = acf_get_block_fields( $block ); // Prefix field inputs to avoid multiple blocks using the same name/id attributes. acf_prefix_fields( $fields, "acf-{$block['id']}" ); if ( $fields ) { // Start Capture. ob_start(); // Render. echo '<div class="acf-block-fields acf-fields">'; acf_render_fields( $fields, acf_ensure_block_id_prefix( $block['id'] ), 'div', 'field' ); echo '</div>'; // Store Capture. $response['form'] = ob_get_clean(); } else { // There are no fields on this block. $response['form'] = acf_get_empty_block_form_html( $block['name'] ); //phpcs:ignore -- escaped in function. } } // Query preview. if ( ! empty( $query['preview'] ) ) { // Render_callback vars. $content = ''; $is_preview = true; // Render and store HTML. $response['preview'] = acf_rendered_block( $block, $content, $is_preview, $post_id, null, $context ); } // Send response. wp_send_json_success( $response ); }