WordPress контактная форма 7 изменение значения текста - PullRequest
0 голосов
/ 22 ноября 2018

WordPress - контактная форма 7

Я пытаюсь найти фильтр для изменения значения поля cf7, когда кто-то вводит значения в него.

при вводе пользователемв текстовом поле и отправить данные,

  1. подтвердить - я сделал
  2. не должен переходить на страницу благодарности, если недействительная запись - я сделал
  3. заменить текстовое поле новымданные - не выполнено

Например: 1

add_filter( 'wpcf7_validate_text*', 'your_validation_filter_func_tel', 100, 2 );
function your_validation_filter_func_tel( $result, $tag ) {

    $Yourvalue = $_POST['your-number'];
    if ( strlen( $Yourvalue ) == 2 ) {
        $result->invalidate( 'your-number', "Please enter a valid number.  " . );
        // HERE I WANT TO REPLACE NEW DATA TO TEXT FIELD
        $result->data( 'your-number', '1002' );
    } else if ( strlen( $Yourvalue ) == 3 ) {
        $result->invalidate( 'your-number', "Please enter a valid name." . );
        // HERE I WANT TO REPLACE NEW DATA TO TEXT FIELD
        $result->data( 'your-number', '1003' );
    }

    return $result;
}

Например: 2

другой рабочий пример

все работает, кроме $result['tel'] = $tel_cleaned_final;

    <?php

    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;

        //$result['tel'] = $tel_cleaned_final; 
        /* 
        Here i want to return new number to text box
        for eg: +91 98989-89898 returns  9898989898
        */

        }
        else
        {
        $result = false;
        }

        return $result;
    }
    add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );

    ?>

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

То, что вы пытаетесь сделать, нельзя сделать только с помощью фильтра проверки.Потому что это просто выводит истину или ложь на основе выполненных проверок.Чтобы сделать то, что вы хотите, вы должны использовать другой фильтр (' 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.

  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 Это весь проверенный код.Удачного кодирования.

0 голосов
/ 29 ноября 2018

может быть, это может помочь:

add_action( 'wpcf7_before_send_mail', 'some_function_name', 1 ); 
function some_function_name( $contact_form ) {
    $wpcf7 = WPCF7_ContactForm::get_current();
    $submission = WPCF7_Submission::get_instance();

    if ($submission) {
        $data = array();
        $data['posted_data'] = $submission->get_posted_data();
        $firstName = $data['posted_data']['first-name']; // just enter the field name here
        $mail = $wpcf7->prop('mail');

        if($firstName =''){
            $mail['body'] = str_replace('[first-name]', $firstName . '-blah blah', $mail['body']);
        }

        $wpcf7->set_properties(array(
            "mail" => $mail
        )); 

        return $wpcf7;
    }
}

Надеюсь, это поможет!

PS Это не проверено, пожалуйста, дайте мне знать, если это работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...