То, что вы пытаетесь сделать, нельзя сделать только с помощью фильтра проверки.Потому что это просто выводит истину или ложь на основе выполненных проверок.Чтобы сделать то, что вы хотите, вы должны использовать другой фильтр (' wpcf7_posted_data '), который имеет значение, которое вы хотите отфильтровать.Таким образом, мы можем разбить наш процесс на два этапа.
Шаг 1: Выполните все проверки, как в настоящее время.
Использование вашего Пример 2 .
function custom_filter_wpcf7_is_tel( $result, $tel )
{
// Initialization and Clean Input
$tel_cleaned = strtr( $tel, array(' '=>'', '-'=>'', '.'=>''));
$tel_cleaned_trimmed = ltrim(strtr( $tel_cleaned, array('+'=>'')), '0');
/* Test Conditions.
I concluded 3 if conditions to 1 below bcaz the validation is working perfect
*/
if ('test conditions here')
$tel_cleaned_final = substr($tel_cleaned_trimmed, 2);
else
$tel_cleaned_final = $tel_cleaned_trimmed;
if (strlen($tel_cleaned_final) == 10)
{
$result = true;
} else
{
$result = false;
}
return $result;
}
add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );
Приведенный выше код обеспечит работу ваших точек 1 и 2.
- Подтвердить.
- Остановить отправку, если запись недействительна.
Шаг 2: Перезапустить тесты, чтобы получить нужное значение и обновить его.
function sr_change_updated_field_value( $posted_data )
{
// Initialization and Clean Input
$tel_cleaned = strtr( $tel, array(' '=>'', '-'=>'', '.'=>''));
$tel_cleaned_trimmed = ltrim(strtr( $tel_cleaned, array('+'=>'')), '0');
/* Test Conditions.
I concluded 3 if conditions to 1 below bcaz the validation is working perfect
*/
if ('test conditions here')
$tel_cleaned_final = substr($tel_cleaned_trimmed, 2);
else
$tel_cleaned_final = $tel_cleaned_trimmed;
// Use the name of your field in place of "tel"
$posted_data['tel'] = $tel_cleaned_final;
return $posted_data;
};
add_filter( 'wpcf7_posted_data', 'sr_change_updated_field_value', 10, 1 );
PS Это обновит значения, отправленные в электронном письме или в материалах, если вы их сохраните.Он покажет сообщение проверки, но не отобразит обновленное значение в текстовом поле, потому что это не может быть сделано с php в этом сценарии.
PS 2 Это весь проверенный код.Удачного кодирования.