do_settings_fields( string $page, string $section )

Prints out the settings fields for a particular settings section.

Description

Part of the Settings API. Use this in a settings page to output a specific section. Should normally be called by do_settings_sections() rather than directly.

Parameters

$pagestringrequired
Slug title of the admin page whose settings fields you want to show.
$sectionstringrequired
Slug title of the settings section whose fields you want to show.

Source

function do_settings_fields( $page, $section ) {
	global $wp_settings_fields;

	if ( ! isset( $wp_settings_fields[ $page ][ $section ] ) ) {
		return;
	}

	foreach ( (array) $wp_settings_fields[ $page ][ $section ] as $field ) {
		$class = '';

		if ( ! empty( $field['args']['class'] ) ) {
			$class = ' class="' . esc_attr( $field['args']['class'] ) . '"';
		}

		echo "<tr{$class}>";

		if ( ! empty( $field['args']['label_for'] ) ) {
			echo '<th scope="row"><label for="' . esc_attr( $field['args']['label_for'] ) . '">' . $field['title'] . '</label></th>';
		} else {
			echo '<th scope="row">' . $field['title'] . '</th>';
		}

		echo '<td>';
		call_user_func( $field['callback'], $field['args'] );
		echo '</td>';
		echo '</tr>';
	}
}

Changelog

VersionDescription
2.7.0Introduced.

User Contributed Notes

  1. Skip to note 2 content

    To load multiple tabs in custom page settings, you will need to use this function.

    For example, if I wish to have these settings pages:

    • /options-general.php?page=stripe-payment – Default page
    • /options-general.php?page=stripe-payment&action=test – Test page

    So you must have two different sections and call it like:

    if ($_GET['action'] !== 'test') {
      settings_fields('stripe_payment_settings');
      echo '<table class="form-table">'; // Must to add this wrapper to keep it like WordPress default UI
      do_settings_fields('stripe-payment, 'stripe_payment_settings_section');
      echo '</table>';
    } else {
      settings_fields('stripe_payment_test');
      echo '<table class="form-table">';
      do_settings_fields('stripe-payment, 'stripe_payment_test_section');
      echo '</table>';
    }

You must log in before being able to contribute a note or feedback.