Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/wpforms-.../includes/admin
File: class-settings.php
<?php
[0] Fix | Delete
[1] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[2] Fix | Delete
exit;
[3] Fix | Delete
}
[4] Fix | Delete
[5] Fix | Delete
[6] Fix | Delete
use WPForms\Admin\Notice;
[7] Fix | Delete
use WPForms\Migrations\Migrations as LiteMigration;
[8] Fix | Delete
use WPForms\Pro\Migrations\Migrations;
[9] Fix | Delete
use WPForms\Admin\Settings\Payments;
[10] Fix | Delete
[11] Fix | Delete
/**
[12] Fix | Delete
* Settings class.
[13] Fix | Delete
*
[14] Fix | Delete
* @since 1.0.0
[15] Fix | Delete
*/
[16] Fix | Delete
class WPForms_Settings {
[17] Fix | Delete
[18] Fix | Delete
/**
[19] Fix | Delete
* The current active tab.
[20] Fix | Delete
*
[21] Fix | Delete
* @since 1.3.9
[22] Fix | Delete
*
[23] Fix | Delete
* @var string
[24] Fix | Delete
*/
[25] Fix | Delete
public $view;
[26] Fix | Delete
[27] Fix | Delete
/**
[28] Fix | Delete
* Primary class constructor.
[29] Fix | Delete
*
[30] Fix | Delete
* @since 1.0.0
[31] Fix | Delete
*/
[32] Fix | Delete
public function __construct() {
[33] Fix | Delete
[34] Fix | Delete
$this->hooks();
[35] Fix | Delete
}
[36] Fix | Delete
[37] Fix | Delete
/**
[38] Fix | Delete
* Hooks.
[39] Fix | Delete
*
[40] Fix | Delete
* @since 1.8.5.4
[41] Fix | Delete
*/
[42] Fix | Delete
private function hooks() {
[43] Fix | Delete
[44] Fix | Delete
// Maybe load settings page.
[45] Fix | Delete
add_action( 'admin_init', [ $this, 'init' ] );
[46] Fix | Delete
}
[47] Fix | Delete
[48] Fix | Delete
/**
[49] Fix | Delete
* Determine if the user is viewing the settings page, if so, party on.
[50] Fix | Delete
*
[51] Fix | Delete
* @since 1.0.0
[52] Fix | Delete
*/
[53] Fix | Delete
public function init() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
[54] Fix | Delete
[55] Fix | Delete
// Only load if we are actually on the settings page.
[56] Fix | Delete
if ( ! wpforms_is_admin_page( 'settings' ) ) {
[57] Fix | Delete
return;
[58] Fix | Delete
}
[59] Fix | Delete
[60] Fix | Delete
// Include API callbacks and functions.
[61] Fix | Delete
require_once WPFORMS_PLUGIN_DIR . 'includes/admin/settings-api.php';
[62] Fix | Delete
[63] Fix | Delete
// Show downgraded notice.
[64] Fix | Delete
$this->maybe_display_downgraded_notice();
[65] Fix | Delete
[66] Fix | Delete
// Watch for triggered save.
[67] Fix | Delete
$this->save_settings();
[68] Fix | Delete
[69] Fix | Delete
// Determine the current active settings tab.
[70] Fix | Delete
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
[71] Fix | Delete
$this->view = isset( $_GET['view'] ) ? sanitize_key( wp_unslash( $_GET['view'] ) ) : 'general';
[72] Fix | Delete
[73] Fix | Delete
$this->modify_url();
[74] Fix | Delete
[75] Fix | Delete
add_action( 'admin_enqueue_scripts', [ $this, 'enqueues' ] );
[76] Fix | Delete
add_action( 'wpforms_admin_page', [ $this, 'output' ] );
[77] Fix | Delete
[78] Fix | Delete
// Monitor custom tables.
[79] Fix | Delete
$this->monitor_custom_tables();
[80] Fix | Delete
[81] Fix | Delete
// Hook for addons.
[82] Fix | Delete
do_action( 'wpforms_settings_init', $this );
[83] Fix | Delete
}
[84] Fix | Delete
[85] Fix | Delete
/**
[86] Fix | Delete
* Remove `wpforms-integration` query arg from URL.
[87] Fix | Delete
* The `wpforms-integration` query arg is used to highlight a specific provider on the Integrations page.
[88] Fix | Delete
*
[89] Fix | Delete
* @since 1.8.5.4
[90] Fix | Delete
*/
[91] Fix | Delete
private function modify_url() {
[92] Fix | Delete
[93] Fix | Delete
if ( $this->view !== 'integrations' ) {
[94] Fix | Delete
return;
[95] Fix | Delete
}
[96] Fix | Delete
[97] Fix | Delete
$_SERVER['REQUEST_URI'] = remove_query_arg( 'wpforms-integration' );
[98] Fix | Delete
}
[99] Fix | Delete
[100] Fix | Delete
/**
[101] Fix | Delete
* Display admin notice about using a downgraded version of WPForms.
[102] Fix | Delete
*
[103] Fix | Delete
* @since 1.8.5.4
[104] Fix | Delete
*/
[105] Fix | Delete
private function maybe_display_downgraded_notice() {
[106] Fix | Delete
[107] Fix | Delete
if ( ! $this->is_downgraded_version() ) {
[108] Fix | Delete
return;
[109] Fix | Delete
}
[110] Fix | Delete
[111] Fix | Delete
$notice = sprintf(
[112] Fix | Delete
wp_kses( /* translators: %1$s - WPForms.com doc page URL; %2$s - button text. */
[113] Fix | Delete
__(
[114] Fix | Delete
'It looks like you\'ve downgraded to an older version of WPForms. We recommend always using the latest version as some features may not function as expected in older versions. <a href="%1$s" target="_blank" rel="noopener">%2$s</a>',
[115] Fix | Delete
'wpforms-lite'
[116] Fix | Delete
),
[117] Fix | Delete
[
[118] Fix | Delete
'a' => [
[119] Fix | Delete
'href' => [],
[120] Fix | Delete
'target' => [],
[121] Fix | Delete
'rel' => [],
[122] Fix | Delete
],
[123] Fix | Delete
]
[124] Fix | Delete
),
[125] Fix | Delete
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/why-you-should-always-use-the-latest-version-of-wpforms/', 'Settings', 'Downgrade notice' ) ),
[126] Fix | Delete
esc_html__( 'Learn More', 'wpforms-lite' )
[127] Fix | Delete
);
[128] Fix | Delete
[129] Fix | Delete
Notice::warning(
[130] Fix | Delete
$notice,
[131] Fix | Delete
[
[132] Fix | Delete
'dismiss' => Notice::DISMISS_GLOBAL,
[133] Fix | Delete
'slug' => 'wpforms_is_downgraded',
[134] Fix | Delete
]
[135] Fix | Delete
);
[136] Fix | Delete
}
[137] Fix | Delete
[138] Fix | Delete
/**
[139] Fix | Delete
* Check if plugin was downgraded.
[140] Fix | Delete
*
[141] Fix | Delete
* @since 1.8.5.4
[142] Fix | Delete
*
[143] Fix | Delete
* @return bool
[144] Fix | Delete
*/
[145] Fix | Delete
private function is_downgraded_version(): bool {
[146] Fix | Delete
[147] Fix | Delete
// Get all installed versions.
[148] Fix | Delete
$installed_versions = wpforms()->is_pro() ?
[149] Fix | Delete
(array) get_option( Migrations::MIGRATED_OPTION_NAME, [] ) :
[150] Fix | Delete
(array) get_option( LiteMigration::MIGRATED_OPTION_NAME, [] );
[151] Fix | Delete
[152] Fix | Delete
// Get the most recent installed version.
[153] Fix | Delete
$db_latest = array_keys( $installed_versions )[ count( $installed_versions ) - 1 ];
[154] Fix | Delete
[155] Fix | Delete
// Check if downgrade happened.
[156] Fix | Delete
return version_compare( $db_latest, WPFORMS_VERSION, '>' );
[157] Fix | Delete
}
[158] Fix | Delete
[159] Fix | Delete
/**
[160] Fix | Delete
* Sanitize and save settings.
[161] Fix | Delete
*
[162] Fix | Delete
* @since 1.3.9
[163] Fix | Delete
*/
[164] Fix | Delete
public function save_settings() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded, Generic.Metrics.NestingLevel.MaxExceeded
[165] Fix | Delete
[166] Fix | Delete
// Check nonce and other various security checks.
[167] Fix | Delete
if ( ! isset( $_POST['wpforms-settings-submit'] ) || empty( $_POST['nonce'] ) ) {
[168] Fix | Delete
return;
[169] Fix | Delete
}
[170] Fix | Delete
[171] Fix | Delete
if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'wpforms-settings-nonce' ) ) {
[172] Fix | Delete
return;
[173] Fix | Delete
}
[174] Fix | Delete
[175] Fix | Delete
if ( ! wpforms_current_user_can() ) {
[176] Fix | Delete
return;
[177] Fix | Delete
}
[178] Fix | Delete
[179] Fix | Delete
if ( empty( $_POST['view'] ) ) {
[180] Fix | Delete
return;
[181] Fix | Delete
}
[182] Fix | Delete
[183] Fix | Delete
$current_view = sanitize_key( $_POST['view'] );
[184] Fix | Delete
[185] Fix | Delete
// Get registered fields and current settings.
[186] Fix | Delete
$fields = $this->get_registered_settings( $current_view );
[187] Fix | Delete
$settings = get_option( 'wpforms_settings', [] );
[188] Fix | Delete
$original_settings = $settings;
[189] Fix | Delete
[190] Fix | Delete
// Views excluded from saving list.
[191] Fix | Delete
$exclude_views = apply_filters( 'wpforms_settings_exclude_view', [], $fields, $settings );
[192] Fix | Delete
[193] Fix | Delete
if ( is_array( $exclude_views ) && in_array( $current_view, $exclude_views, true ) ) {
[194] Fix | Delete
// Run a custom save processing for excluded views.
[195] Fix | Delete
do_action( 'wpforms_settings_custom_process', $current_view, $fields, $settings );
[196] Fix | Delete
[197] Fix | Delete
return;
[198] Fix | Delete
}
[199] Fix | Delete
[200] Fix | Delete
if ( empty( $fields ) || ! is_array( $fields ) ) {
[201] Fix | Delete
return;
[202] Fix | Delete
}
[203] Fix | Delete
[204] Fix | Delete
// Sanitize and prep each field.
[205] Fix | Delete
foreach ( $fields as $id => $field ) {
[206] Fix | Delete
[207] Fix | Delete
// Certain field types are not valid for saving and are skipped.
[208] Fix | Delete
$exclude = apply_filters( 'wpforms_settings_exclude_type', [ 'content', 'license', 'providers' ] );
[209] Fix | Delete
[210] Fix | Delete
if ( empty( $field['type'] ) || in_array( $field['type'], $exclude, true ) ) {
[211] Fix | Delete
continue;
[212] Fix | Delete
}
[213] Fix | Delete
[214] Fix | Delete
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
[215] Fix | Delete
$value = isset( $_POST[ $id ] ) ? wp_unslash( $_POST[ $id ] ) : false;
[216] Fix | Delete
$value_prev = isset( $settings[ $id ] ) ? $settings[ $id ] : false;
[217] Fix | Delete
[218] Fix | Delete
// Trim all string values.
[219] Fix | Delete
if ( is_string( $value ) ) {
[220] Fix | Delete
$value = trim( $value );
[221] Fix | Delete
}
[222] Fix | Delete
[223] Fix | Delete
// Custom filter can be provided for sanitizing, otherwise use defaults.
[224] Fix | Delete
if ( ! empty( $field['filter'] ) && is_callable( $field['filter'] ) ) {
[225] Fix | Delete
[226] Fix | Delete
$value = call_user_func( $field['filter'], $value, $id, $field, $value_prev );
[227] Fix | Delete
[228] Fix | Delete
} else {
[229] Fix | Delete
[230] Fix | Delete
switch ( $field['type'] ) {
[231] Fix | Delete
case 'checkbox':
[232] Fix | Delete
case 'toggle':
[233] Fix | Delete
$value = (bool) $value;
[234] Fix | Delete
break;
[235] Fix | Delete
[236] Fix | Delete
case 'image':
[237] Fix | Delete
$value = esc_url_raw( $value );
[238] Fix | Delete
break;
[239] Fix | Delete
[240] Fix | Delete
case 'color':
[241] Fix | Delete
$value = wpforms_sanitize_hex_color( $value );
[242] Fix | Delete
break;
[243] Fix | Delete
[244] Fix | Delete
case 'color_scheme':
[245] Fix | Delete
$value = array_map( 'wpforms_sanitize_hex_color', $value );
[246] Fix | Delete
break;
[247] Fix | Delete
[248] Fix | Delete
case 'number':
[249] Fix | Delete
$value = (float) $value;
[250] Fix | Delete
break;
[251] Fix | Delete
[252] Fix | Delete
case 'radio':
[253] Fix | Delete
case 'select':
[254] Fix | Delete
$value = $this->validate_field_with_options( $field, $value, $value_prev );
[255] Fix | Delete
break;
[256] Fix | Delete
[257] Fix | Delete
case 'text':
[258] Fix | Delete
default:
[259] Fix | Delete
$value = sanitize_text_field( $value );
[260] Fix | Delete
break;
[261] Fix | Delete
}
[262] Fix | Delete
}
[263] Fix | Delete
[264] Fix | Delete
// Add to settings.
[265] Fix | Delete
$settings[ $id ] = $value;
[266] Fix | Delete
}
[267] Fix | Delete
[268] Fix | Delete
// Save settings.
[269] Fix | Delete
wpforms_update_settings( $settings );
[270] Fix | Delete
[271] Fix | Delete
Notice::success( esc_html__( 'Settings were successfully saved.', 'wpforms-lite' ) );
[272] Fix | Delete
[273] Fix | Delete
if ( isset( $original_settings['currency'], $settings['currency'] ) && $original_settings['currency'] !== $settings['currency'] ) {
[274] Fix | Delete
[275] Fix | Delete
Notice::warning( esc_html__( "You've changed your currency. Please double-check the product prices in your forms and verify that they're correct.", 'wpforms-lite' ) );
[276] Fix | Delete
}
[277] Fix | Delete
}
[278] Fix | Delete
[279] Fix | Delete
/**
[280] Fix | Delete
* Enqueue assets for the settings page.
[281] Fix | Delete
*
[282] Fix | Delete
* @since 1.0.0
[283] Fix | Delete
*/
[284] Fix | Delete
public function enqueues() {
[285] Fix | Delete
[286] Fix | Delete
do_action( 'wpforms_settings_enqueue' );
[287] Fix | Delete
}
[288] Fix | Delete
[289] Fix | Delete
/**
[290] Fix | Delete
* Return registered settings tabs.
[291] Fix | Delete
*
[292] Fix | Delete
* @since 1.3.9
[293] Fix | Delete
*
[294] Fix | Delete
* @return array
[295] Fix | Delete
*/
[296] Fix | Delete
public function get_tabs() {
[297] Fix | Delete
[298] Fix | Delete
$tabs = [
[299] Fix | Delete
'general' => [
[300] Fix | Delete
'name' => esc_html__( 'General', 'wpforms-lite' ),
[301] Fix | Delete
'form' => true,
[302] Fix | Delete
'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ),
[303] Fix | Delete
],
[304] Fix | Delete
'validation' => [
[305] Fix | Delete
'name' => esc_html__( 'Validation', 'wpforms-lite' ),
[306] Fix | Delete
'form' => true,
[307] Fix | Delete
'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ),
[308] Fix | Delete
],
[309] Fix | Delete
'integrations' => [
[310] Fix | Delete
'name' => esc_html__( 'Integrations', 'wpforms-lite' ),
[311] Fix | Delete
'form' => false,
[312] Fix | Delete
'submit' => false,
[313] Fix | Delete
],
[314] Fix | Delete
'geolocation' => [
[315] Fix | Delete
'name' => esc_html__( 'Geolocation', 'wpforms-lite' ),
[316] Fix | Delete
'form' => false,
[317] Fix | Delete
'submit' => false,
[318] Fix | Delete
],
[319] Fix | Delete
'misc' => [
[320] Fix | Delete
'name' => esc_html__( 'Misc', 'wpforms-lite' ),
[321] Fix | Delete
'form' => true,
[322] Fix | Delete
'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ),
[323] Fix | Delete
],
[324] Fix | Delete
];
[325] Fix | Delete
[326] Fix | Delete
return apply_filters( 'wpforms_settings_tabs', $tabs );
[327] Fix | Delete
}
[328] Fix | Delete
[329] Fix | Delete
/**
[330] Fix | Delete
* Output tab navigation area.
[331] Fix | Delete
*
[332] Fix | Delete
* @since 1.3.9
[333] Fix | Delete
*/
[334] Fix | Delete
public function tabs() {
[335] Fix | Delete
[336] Fix | Delete
$tabs = $this->get_tabs();
[337] Fix | Delete
[338] Fix | Delete
echo '<ul class="wpforms-admin-tabs">';
[339] Fix | Delete
foreach ( $tabs as $id => $tab ) {
[340] Fix | Delete
[341] Fix | Delete
$active = $id === $this->view ? 'active' : '';
[342] Fix | Delete
$link = add_query_arg( 'view', $id, admin_url( 'admin.php?page=wpforms-settings' ) );
[343] Fix | Delete
[344] Fix | Delete
echo '<li><a href="' . esc_url_raw( $link ) . '" class="' . esc_attr( $active ) . '">' . esc_html( $tab['name'] ) . '</a></li>';
[345] Fix | Delete
}
[346] Fix | Delete
echo '</ul>';
[347] Fix | Delete
}
[348] Fix | Delete
[349] Fix | Delete
/**
[350] Fix | Delete
* Return all the default registered settings fields.
[351] Fix | Delete
*
[352] Fix | Delete
* @since 1.3.9
[353] Fix | Delete
*
[354] Fix | Delete
* @param string $view The current view (tab) on Settings page.
[355] Fix | Delete
*
[356] Fix | Delete
* @return array
[357] Fix | Delete
*/
[358] Fix | Delete
public function get_registered_settings( $view = '' ) {
[359] Fix | Delete
[360] Fix | Delete
$defaults = [
[361] Fix | Delete
// General Settings tab.
[362] Fix | Delete
'general' => [
[363] Fix | Delete
'license-heading' => [
[364] Fix | Delete
'id' => 'license-heading',
[365] Fix | Delete
'content' => '<h4>' . esc_html__( 'License', 'wpforms-lite' ) . '</h4><p>' . esc_html__( 'Your license key provides access to updates and addons.', 'wpforms-lite' ) . '</p>',
[366] Fix | Delete
'type' => 'content',
[367] Fix | Delete
'no_label' => true,
[368] Fix | Delete
'class' => [ 'section-heading' ],
[369] Fix | Delete
],
[370] Fix | Delete
'license-key' => [
[371] Fix | Delete
'id' => 'license-key',
[372] Fix | Delete
'name' => esc_html__( 'License Key', 'wpforms-lite' ),
[373] Fix | Delete
'type' => 'license',
[374] Fix | Delete
],
[375] Fix | Delete
'general-heading' => [
[376] Fix | Delete
'id' => 'general-heading',
[377] Fix | Delete
'content' => '<h4>' . esc_html__( 'General', 'wpforms-lite' ) . '</h4>',
[378] Fix | Delete
'type' => 'content',
[379] Fix | Delete
'no_label' => true,
[380] Fix | Delete
'class' => [ 'section-heading', 'no-desc' ],
[381] Fix | Delete
],
[382] Fix | Delete
'disable-css' => [
[383] Fix | Delete
'id' => 'disable-css',
[384] Fix | Delete
'name' => esc_html__( 'Include Form Styling', 'wpforms-lite' ),
[385] Fix | Delete
'desc' => sprintf(
[386] Fix | Delete
wp_kses( /* translators: %s - WPForms.com form styling setting URL. */
[387] Fix | Delete
__( 'Determines which CSS files to load and use for the site. "Base and Form Theme Styling" is recommended, unless you are experienced with CSS or instructed by support to change settings. <a href="%s" target="_blank" rel="noopener noreferrer" class="wpforms-learn-more">Learn More</a>', 'wpforms-lite' ),
[388] Fix | Delete
[
[389] Fix | Delete
'a' => [
[390] Fix | Delete
'href' => [],
[391] Fix | Delete
'target' => [],
[392] Fix | Delete
'rel' => [],
[393] Fix | Delete
'class' => [],
[394] Fix | Delete
],
[395] Fix | Delete
]
[396] Fix | Delete
),
[397] Fix | Delete
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/how-to-choose-an-include-form-styling-setting/', 'settings-license', 'Form Styling Documentation' ) )
[398] Fix | Delete
),
[399] Fix | Delete
'type' => 'select',
[400] Fix | Delete
'choicesjs' => true,
[401] Fix | Delete
'default' => 1,
[402] Fix | Delete
'options' => [
[403] Fix | Delete
1 => esc_html__( 'Base and form theme styling', 'wpforms-lite' ),
[404] Fix | Delete
2 => esc_html__( 'Base styling only', 'wpforms-lite' ),
[405] Fix | Delete
3 => esc_html__( 'No styling', 'wpforms-lite' ),
[406] Fix | Delete
],
[407] Fix | Delete
],
[408] Fix | Delete
'global-assets' => [
[409] Fix | Delete
'id' => 'global-assets',
[410] Fix | Delete
'name' => esc_html__( 'Load Assets Globally', 'wpforms-lite' ),
[411] Fix | Delete
'desc' => esc_html__( 'Load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support.', 'wpforms-lite' ),
[412] Fix | Delete
'type' => 'toggle',
[413] Fix | Delete
'status' => true,
[414] Fix | Delete
],
[415] Fix | Delete
'gdpr-heading' => [
[416] Fix | Delete
'id' => 'GDPR',
[417] Fix | Delete
'content' => '<h4>' . esc_html__( 'GDPR', 'wpforms-lite' ) . '</h4>',
[418] Fix | Delete
'type' => 'content',
[419] Fix | Delete
'no_label' => true,
[420] Fix | Delete
'class' => [ 'section-heading', 'no-desc' ],
[421] Fix | Delete
],
[422] Fix | Delete
'gdpr' => [
[423] Fix | Delete
'id' => 'gdpr',
[424] Fix | Delete
'name' => esc_html__( 'GDPR Enhancements', 'wpforms-lite' ),
[425] Fix | Delete
'desc' => sprintf(
[426] Fix | Delete
wp_kses( /* translators: %s - WPForms.com GDPR documentation URL. */
[427] Fix | Delete
__( 'Enable GDPR related features and enhancements. <a href="%s" target="_blank" rel="noopener noreferrer" class="wpforms-learn-more">Learn More</a>', 'wpforms-lite' ),
[428] Fix | Delete
[
[429] Fix | Delete
'a' => [
[430] Fix | Delete
'href' => [],
[431] Fix | Delete
'target' => [],
[432] Fix | Delete
'rel' => [],
[433] Fix | Delete
'class' => [],
[434] Fix | Delete
],
[435] Fix | Delete
]
[436] Fix | Delete
),
[437] Fix | Delete
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/how-to-create-gdpr-compliant-forms/', 'settings-license', 'GDPR Documentation' ) )
[438] Fix | Delete
),
[439] Fix | Delete
'type' => 'toggle',
[440] Fix | Delete
'status' => true,
[441] Fix | Delete
],
[442] Fix | Delete
],
[443] Fix | Delete
// Validation messages settings tab.
[444] Fix | Delete
'validation' => [
[445] Fix | Delete
'validation-heading' => [
[446] Fix | Delete
'id' => 'validation-heading',
[447] Fix | Delete
'content' => sprintf( /* translators: %s - WPForms.com smart tags documentation URL. */
[448] Fix | Delete
esc_html__( '%1$s These messages are displayed to the users as they fill out a form in real-time. Messages can include plain text and/or %2$sSmart Tags%3$s.', 'wpforms-lite' ),
[449] Fix | Delete
'<h4>' . esc_html__( 'Validation Messages', 'wpforms-lite' )
[450] Fix | Delete
. '</h4><p>',
[451] Fix | Delete
'<a href="' . esc_url( wpforms_utm_link( 'https://wpforms.com/docs/how-to-use-smart-tags-in-wpforms/#smart-tags', 'Settings - Validation', 'Smart Tag Documentation' ) ) . '" target="_blank" rel="noopener noreferrer">',
[452] Fix | Delete
'</a>'
[453] Fix | Delete
),
[454] Fix | Delete
'type' => 'content',
[455] Fix | Delete
'no_label' => true,
[456] Fix | Delete
'class' => [ 'section-heading' ],
[457] Fix | Delete
],
[458] Fix | Delete
'validation-required' => [
[459] Fix | Delete
'id' => 'validation-required',
[460] Fix | Delete
'name' => esc_html__( 'Required', 'wpforms-lite' ),
[461] Fix | Delete
'type' => 'text',
[462] Fix | Delete
'default' => esc_html__( 'This field is required.', 'wpforms-lite' ),
[463] Fix | Delete
],
[464] Fix | Delete
'validation-email' => [
[465] Fix | Delete
'id' => 'validation-email',
[466] Fix | Delete
'name' => esc_html__( 'Email', 'wpforms-lite' ),
[467] Fix | Delete
'type' => 'text',
[468] Fix | Delete
'default' => esc_html__( 'Please enter a valid email address.', 'wpforms-lite' ),
[469] Fix | Delete
],
[470] Fix | Delete
'validation-email-suggestion' => [
[471] Fix | Delete
'id' => 'validation-email-suggestion',
[472] Fix | Delete
'name' => esc_html__( 'Email Suggestion', 'wpforms-lite' ),
[473] Fix | Delete
'type' => 'text',
[474] Fix | Delete
'default' => sprintf( /* translators: %s - suggested email address. */
[475] Fix | Delete
esc_html__( 'Did you mean %s?', 'wpforms-lite' ),
[476] Fix | Delete
'{suggestion}'
[477] Fix | Delete
),
[478] Fix | Delete
],
[479] Fix | Delete
'validation-email-restricted' => [
[480] Fix | Delete
'id' => 'validation-email-restricted',
[481] Fix | Delete
'name' => esc_html__( 'Email Restricted', 'wpforms-lite' ),
[482] Fix | Delete
'type' => 'text',
[483] Fix | Delete
'default' => esc_html__( 'This email address is not allowed.', 'wpforms-lite' ),
[484] Fix | Delete
],
[485] Fix | Delete
'validation-number' => [
[486] Fix | Delete
'id' => 'validation-number',
[487] Fix | Delete
'name' => esc_html__( 'Number', 'wpforms-lite' ),
[488] Fix | Delete
'type' => 'text',
[489] Fix | Delete
'default' => esc_html__( 'Please enter a valid number.', 'wpforms-lite' ),
[490] Fix | Delete
],
[491] Fix | Delete
'validation-number-positive' => [
[492] Fix | Delete
'id' => 'validation-number-positive',
[493] Fix | Delete
'name' => esc_html__( 'Number Positive', 'wpforms-lite' ),
[494] Fix | Delete
'type' => 'text',
[495] Fix | Delete
'default' => esc_html__( 'Please enter a valid positive number.', 'wpforms-lite' ),
[496] Fix | Delete
],
[497] Fix | Delete
'validation-minimum-price' => [
[498] Fix | Delete
'id' => 'validation-minimum-price',
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function