: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
'id' => "wpforms-{$form_id}-field_{$field_id}-quantity",
'class' => [ 'wpforms-payment-quantity' ],
'name' => "wpforms[quantities][{$field_id}]",
$is_modern = ! empty( $field['style'] ) && $field['style'] === 'modern';
// Add a class for Choices.js initialization.
$container['class'][] = 'choicesjs-select';
$container['data']['size-class'] = 'wpforms-payment-quantity';
$container['data']['search-enabled'] = $this->is_quantity_choicesjs_search_enabled( $field );
$container['data']['remove-items-enabled'] = false;
// Add required attribute.
if ( ! empty( $field['required'] ) ) {
$container['attr']['required'] = 'required';
// Preselect default if no other choices were marked as default.
wpforms_html_attributes( $container['id'], $container['class'], $container['data'], $container['attr'] ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
// Reset Max quantity in case minimum is higher.
$field['max_quantity'] = max( (int) $field['min_quantity'], (int) $field['max_quantity'] );
$default = $field['properties']['quantity'] ?? $field['min_quantity'];
for ( $option = $field['min_quantity']; $option <= $field['max_quantity']; $option++ ) {
'<option value="%1$s" %2$s >%3$s</option>', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
selected( $option, $default, false ),
* Add class to the builder field preview.
* @param string $css Class names.
* @param array $field Field properties.
public function preview_field_class( $css, $field ) {
if ( $field['type'] !== $this->type ) {
if ( $this->is_payment_quantities_enabled( $field ) ) {
$css .= ' payment-quantity-enabled';
* Determine if payment quantities enabled.
* @param array $field_settings Field settings.
protected function is_payment_quantities_enabled( $field_settings ) {
if ( empty( $field_settings['enable_quantity'] ) ) {
// Quantity available only for `single` format of the Single payment field.
if ( $field_settings['type'] === 'payment-single' && $field_settings['format'] !== 'single' ) {
// Otherwise return true.
* Get field payment submitted quantity.
* @param array $field Field data.
* @param array $form_data Form data and settings.
protected function get_submitted_field_quantity( $field, $form_data ) {
// phpcs:disable WordPress.Security.NonceVerification.Missing
$has_submitted_quantity = isset( $_POST['wpforms']['quantities'][ $field['id'] ] );
$submitted_quantity = $has_submitted_quantity ? (int) $_POST['wpforms']['quantities'][ $field['id'] ] : 0;
// phpcs:enable WordPress.Security.NonceVerification.Missing
if ( ! $has_submitted_quantity && isset( $form_data['quantities'][ $field['id'] ] ) ) {
$submitted_quantity = (int) $form_data['quantities'][ $field['id'] ];
$min_quantity = (int) $field['min_quantity'];
// Verify submitted quantity value.
if ( $submitted_quantity >= $min_quantity && $submitted_quantity <= (int) $field['max_quantity'] ) {
return $submitted_quantity;
// Otherwise return a minimum quantity.