programing

WordPress 연락처 양식 7 텍스트 값 변경

newsource 2023. 11. 1. 22:23

WordPress 연락처 양식 7 텍스트 값 변경

WordPress - 연락처 양식

누군가 cf7 필드 값을 입력했을 때 수정할 필터를 찾고 있습니다.

사용자가 텍스트 필드에 입력하고 데이터를 제출할 때,

  1. validate - 이미 완료했습니다.
  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 );

    ?>

유효성 검사 필터만으로 수행하려는 작업을 수행할 수 없습니다.수행된 유효성 검사에 따라 참 또는 거짓을 출력하기 때문입니다.원하는 작업을 수행하려면 필터링할 값을 가진 다른 필터('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 );

추신: 이렇게 하면 이메일로 전송된 값이나 저장된 경우 제출된 값이 업데이트됩니다.유효성 확인 메시지가 표시되지만, 이 시나리오에서는 php로 할 수 없기 때문에 텍스트 필드에 업데이트된 값이 표시되지 않습니다.

추신 2 이것은 모두 테스트된 코드입니다.해피코딩.

이를 통해 도움이 될 수 있습니다.

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;
    }
}

도움이 되길 바랍니다!

추신: 테스트가 안 된 제품입니다, 혹시 작동되는지 알려주세요:)

언급URL : https://stackoverflow.com/questions/53429325/wordpress-contact-form-7-text-value-change