acf_field_repeater::ajax_get_rows()publicACF 6.0.0

Returns an array of rows used to populate the repeater table over AJAX.

Метод класса: acf_field_repeater{}

Хуков нет.

Возвращает

null|WP_Error.

Использование

$acf_field_repeater = new acf_field_repeater();
$acf_field_repeater->ajax_get_rows();

Список изменений

С версии 6.0.0 Введена.

Код acf_field_repeater::ajax_get_rows() ACF 6.0.4

public function ajax_get_rows() {
	if ( ! acf_verify_ajax() ) {
		$error = array( 'error' => __( 'Invalid nonce.', 'acf' ) );
		wp_send_json_error( $error, 401 );
	}

	$args = acf_request_args(
		array(
			'field_name'    => '',
			'field_key'     => '',
			'post_id'       => 0,
			'rows_per_page' => 0,
			'refresh'       => false,
		)
	);

	if ( '' === $args['field_name'] || '' === $args['field_key'] ) {
		$error = array( 'error' => __( 'Invalid field key or name.', 'acf' ) );
		wp_send_json_error( $error, 404 );
	}

	$field    = acf_get_field( $args['field_key'] );
	$post_id  = acf_get_valid_post_id( $args['post_id'] );
	$response = array();

	if ( ! $field || ! $post_id ) {
		$error = array( 'error' => __( 'There was an error retrieving the field.', 'acf' ) );
		wp_send_json_error( $error, 404 );
	}

	// Make sure we have a valid field.
	$field = acf_validate_field( $field );

	// Make sure that we only get a subset of the rows.
	$this->is_rendering = true;

	$args['rows_per_page'] = (int) $args['rows_per_page'];

	if ( $args['rows_per_page'] ) {
		$field['rows_per_page'] = $args['rows_per_page'];
	}

	/**
	 * We have to swap out the field name with the one sent via JS,
	 * as the repeater could be inside a subfield.
	 */
	$field['name'] = $args['field_name'];

	$field['value']   = acf_get_value( $post_id, $field );
	$field            = acf_prepare_field( $field );
	$repeater_table   = new ACF_Repeater_Table( $field );
	$response['rows'] = $repeater_table->rows( true );

	if ( $args['refresh'] ) {
		$response['total_rows'] = (int) acf_get_metadata( $post_id, $args['field_name'] );
	}

	wp_send_json_success( $response );
}