';
if ( '' !== $group['description'] ) {
$html .= '
' . esc_html( $group['description'] ) . '
';
}
$fields = '
';
foreach ( $group['fields'] as $name => $field ) {
$fields .= self::row( $registry, $screen, $product, $key, $name, $field );
}
$fields .= '
';
// The card's own form (FR1): its fields and WordPress's hidden ones, posted to options.php (by the states script
// without a reload); its Save in the footer, tied to it.
$html .= States::form(
$id . '-form',
$hidden . '
' . $fields,
array(
'url' => '',
'action' => admin_url( 'options.php' ),
'class' => 'rooster-admin-settings__form',
)
);
return $html . '