จะเปลี่ยน URL การดำเนินการของแบบฟอร์มสำหรับแบบฟอร์มการติดต่อ 7 ได้อย่างไร

ฉันใช้แบบฟอร์มติดต่อ 7 ในเว็บไซต์ WordPress ที่มีหลายแบบฟอร์ม ฉันต้องกำหนดทิศทางของแบบฟอร์มหนึ่งไปยัง URL การดำเนินการของแบบฟอร์มที่แตกต่างจากที่อื่น

ฉันพบคำตอบด้านล่างสำหรับกระทู้ที่แล้ว แต่ฉันไม่แน่ใจว่าจะทำอย่างไร ใครสามารถระบุรหัสที่แน่นอนที่ต้องรวมไว้ใน "การตั้งค่าเพิ่มเติม" และรหัสใน Functions.php จะมีลักษณะเป็นอย่างไร

ขอบคุณสำหรับความช่วยเหลือของคุณ!


ตอบกลับจาก diff เธรดซึ่งฉันไม่เข้าใจทั้งหมด ...

*ใช่ คุณต้องเปลี่ยนแอตทริบิวต์ "action" ในแบบฟอร์มโดยใช้ Filter Hook wpcf7_form_action_url นี้ (โค้ดคืออะไร) คุณสามารถเพิ่ม hook ลงใน Functions.php ของธีมของคุณ จากนั้นเพียงประมวลผลข้อมูลแบบฟอร์มในหน้า ASP ของคุณ(code?) *



person user1102824    schedule 06.01.2013    source แหล่งที่มา
comment
ลิงค์กระทู้ที่แล้ว? คุณได้ลองอะไร? SO จะไม่เขียนโค้ดให้คุณแม้ว่าจะสามารถช่วยคุณในการเขียนโค้ดที่คุณกำลังเขียนอยู่แล้วได้   -  person FelipeAls    schedule 06.01.2013
comment
ฉันขอโทษ ฉันเป็นนักออกแบบที่ทำงานในเว็บไซต์ WP ที่ถูกจัดตั้งขึ้นก่อนหน้าฉัน เมื่อเห็นว่าแบบฟอร์มติดต่อ 7 ได้รับการติดตั้งแล้วและตั้งค่าแบบฟอร์มต่างๆ ฉันจึงเพิ่มแบบฟอร์มใหม่และได้รับการแจ้งเตือนทางอีเมลที่ใช้งานได้ แต่ฉันต้องการข้อมูลสำหรับแบบฟอร์มใหม่ที่ส่งไปยัง .asp อื่นที่ไม่ใช่ค่าเริ่มต้น หลังจากค้นหาออนไลน์แล้ว ดูเหมือนว่าสามารถทำได้โดยเพิ่มโค้ดลงในการตั้งค่าเพิ่มเติมใน CF7, add_filter(wpcf7_form_action_url, ________)และไฟล์ function.php? ฉันพบรหัส PHP นับไม่ถ้วนเกี่ยวกับวิธีการเปลี่ยนเส้นทาง URL แต่ไม่มีสิ่งใดใน php ที่จะเปลี่ยน URL ของการกระทำของฟอร์ม...ขออภัยที่ต้องอยู่ในความมืดอีกครั้ง: นี่ ..   -  person user1102824    schedule 06.01.2013
comment
นี่คือลิงค์ไปยังก่อนหน้า เธรด: stackoverflow.com/questions/7101614/ แบบฟอร์มการติดต่อ-7-โพสต์-to-asp   -  person user1102824    schedule 06.01.2013
comment
นั่นยังคงไม่ได้อธิบายสิ่งที่คุณได้ลองไปแล้ว คำตอบในกระทู้ที่แล้วจะบอกทุกสิ่งที่คุณต้องการในการเขียนโค้ดที่จำเป็นในการเปลี่ยนแปลง ดังที่ FelipeAls กล่าวไว้ เราอยู่ที่นี่เพื่อช่วยให้คุณเรียนรู้และช่วยเหลือเกี่ยวกับโค้ดที่คุณพัฒนาขึ้นเอง อย่าทำงานของคุณเพื่อคุณ   -  person maiorano84    schedule 06.01.2013
comment
ขออภัย ฉันไม่คุ้นเคยกับ php เลย และฉันได้อ่านบทความเกี่ยวกับการสอนมาหลายบทความแล้ว และมีเงื่อนไขมากเกินไปเล็กน้อย ซึ่งถือว่าแปลกสำหรับฉันมาก ความช่วยเหลือหรือคำแนะนำเกี่ยวกับการเขียนโค้ดทีละขั้นตอนหรือจุดเริ่มต้นจะได้รับการชื่นชมอย่างมาก ขอบคุณ.   -  person user1102824    schedule 06.01.2013


คำตอบ (4)


เนื่องจากคุณไม่คุ้นเคยกับโค้ด PHP เลย ฉันจะให้ความรู้เบื้องต้นเกี่ยวกับการเขียนโค้ดภายใน Wordpress API

ก่อนอื่น คุณต้องรู้ความแตกต่างระหว่างฟังก์ชันและตัวแปรก่อน ตัวแปรคือเอนทิตีเดียวที่มีไว้เพื่อแสดงค่าที่กำหนดเอง คุณค่าสามารถเป็นอะไรก็ได้ ตัวเลข ชื่อของบุคคล หรือข้อมูลที่ซับซ้อน

ฟังก์ชั่นคือสิ่งที่ดำเนินการชุดของการกระทำเพื่อส่งกลับ - หรือ ส่งกลับ - ตัวแปร หรือแก้ไขตัวแปรที่กำหนด

<?php
$a = 1; //Number
$b = 'b'; //String *note the quotes around it*
$c = my_function(); //Call to a function called my_function
echo $a; //1
echo $b; //b
echo $c; //oh, hello
function my_function()
{
    return 'oh, hello';
}
?>

Wordpress ใช้การดำเนินการและระบบกรองของตัวเองอย่างหลวมๆ ตามสไตล์ Event-Driven Programming

ความหมายก็คือ Wordpress กำลัง "รับฟัง" เหตุการณ์บางอย่างที่จะเกิดขึ้น และเมื่อเป็นเช่นนั้น Wordpress จะเรียกใช้ฟังก์ชันที่แนบมากับเหตุการณ์นั้น (หรือที่เรียกว่าการโทรกลับ) เหล่านี้คือ "การดำเนินการ" และ "ตัวกรอง" แล้วความแตกต่างคืออะไร?

การดำเนินการคือฟังก์ชันที่ทำสิ่งต่างๆ
ตัวกรองคือฟังก์ชันที่ส่งคืนสิ่งต่างๆ

แล้วทั้งหมดนี้เข้ากับปัญหาของคุณได้อย่างไร?

แบบฟอร์มการติดต่อ 7 มีตัวกรองของตัวเองที่ส่งคืน URL ของตำแหน่งที่จะส่งข้อมูลตามแบบฟอร์ม

ดังนั้น เรามาดูข้อมูลพื้นฐานของ Filter Hook กันดีกว่า

add_filter('hook_name', 'your_filter');
  1. add_filter เป็นฟังก์ชันที่บอก Wordpress ว่าจำเป็นต้องรับฟังเหตุการณ์ใดเหตุการณ์หนึ่ง
  2. 'hook_name' คือเหตุการณ์ที่ Wordpress กำลังรับฟัง
  3. 'your_filter' เป็นฟังก์ชัน - หรือการโทรกลับ - ที่ถูกเรียกเมื่อเหตุการณ์ 'hook_name' เริ่มทำงาน

ลิงก์ไปยังเธรดก่อนหน้าระบุว่าชื่อ hook ที่คุณต้องใช้คือ 'wpcf7_form_action_url' นั่นหมายความว่าสิ่งที่คุณต้องทำคือโทรไปที่ add_filter ตั้งค่า 'hook_name' เป็น 'wpcf7_form_action_url' จากนั้นตั้งค่า 'your_filter' เป็นชื่อของฟังก์ชันที่คุณจะตั้งค่าเป็นการโทรกลับของคุณ

เมื่อเสร็จแล้ว คุณเพียงแค่ต้องกำหนดฟังก์ชันด้วยชื่อที่ตรงกับสิ่งที่คุณใส่แทน 'your_filter' และตรวจสอบให้แน่ใจว่าส่งกลับ URL เพื่อแก้ไขการทำงานของแบบฟอร์ม

มาถึงปัญหา: นี่จะเป็นการเปลี่ยนแปลงแบบฟอร์มทั้งหมดของคุณ แต่สิ่งแรกสุดคือ ดูว่าคุณสามารถสร้างโค้ดที่ใช้งานได้ด้วยตัวเองหรือไม่ เพียงเขียนโค้ดของคุณใน functions.php และแจ้งให้เราทราบว่าผลเป็นอย่างไร

อัปเดต:

ความจริงที่ว่าคุณสามารถทำมันได้อย่างรวดเร็วนั้นยอดเยี่ยมมาก และแสดงให้เห็นถึงความพยายามในการค้นคว้าที่คุณทุ่มเทให้กับเรื่องนี้

ใส่ทั้งหมดนี้ลงใน functions.php

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
function wpcf7_custom_form_action_url()
{
    return 'wheretopost.asp';
}

ดังที่กล่าวไว้ก่อนหน้านี้ว่าจะส่งผลต่อแบบฟอร์มทั้งหมดของคุณ หากสิ่งนี้ควรจะส่งผลต่อแบบฟอร์มบนเพจที่กำหนด คุณสามารถดำเนินการดังนี้:

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
function wpcf7_custom_form_action_url($url)
{
    global $post;
    $id_to_change = 1;
    if($post->ID === $id_to_change)
        return 'wheretopost.asp';
    else
        return $url;
}

สิ่งที่คุณต้องทำคือเปลี่ยนค่าของ $id_to_change เป็นตัวเลขที่แสดงถึง ID ของโพสต์/เพจที่คุณพยายามจะส่งผล ตัวอย่างเช่น หากคุณมีเพจเกี่ยวกับที่คุณต้องการเปลี่ยน URL การดำเนินการ คุณสามารถค้นหาหมายเลข ID ของเพจเกี่ยวกับของคุณได้ในแดชบอร์ดผู้ดูแลระบบ (เพียงไปที่เครื่องมือแก้ไขเพจแล้วดู ID ใน URL ของคุณ number) และเปลี่ยน 1 เป็นเลข ID อะไรก็ได้

หวังว่านี่จะช่วยคุณได้ และขอให้โชคดี

person maiorano84    schedule 06.01.2013
comment
ฉันไม่ได้ตั้งใจให้คำตอบที่สมบูรณ์แก่คุณทันที คุณต้องอ่านข้อความนี้ให้ครบถ้วน คิดการเรียก add_filter ที่ถูกต้อง และฟังก์ชันการโทรกลับของคุณเอง เมื่อคุณทำเช่นนั้นแล้ว เราจะสามารถแนะนำคุณได้มากขึ้น ทุกชิ้นมีไว้เพื่อคุณ - person maiorano84; 06.01.2013
comment
maiorano84 ขอบคุณมากสำหรับการตอบกลับ ใช่ ฉันไปที่ add_filter('wpcf7_form_action_url', 'formname'); แต่คำอธิบายของคุณทำให้ตรรกะชัดเจนขึ้น วิธีตรวจสอบให้แน่ใจว่าจะส่งคืน URL เพื่อแก้ไขการกระทำของแบบฟอร์มคือจุดที่ฉันทำหายไปโดยสิ้นเชิง หากสิ่งนี้อยู่นอก CF7/WP ฉันจะเขียนโค้ด ‹form method=post action=~~~.asp› ใน html แต่ไม่แน่ใจว่าเวอร์ชัน php ของมันจะเป็นเวอร์ชันใด ฉันขอโทษอีกครั้งที่ฉันขาดความเข้าใจ ขอบคุณ. - person user1102824; 06.01.2013
comment
โอเค ฉันจะตรวจสอบมันอีกครั้ง เพราะฉันรู้สึกว่าฉันกำลังถือชิ้นส่วนต่างๆ และตาบอดสนิท ขอบคุณมาก. - person user1102824; 06.01.2013
comment
ฉันจะอยู่รอบๆ ฉันรู้ว่าคุณสามารถทำมันได้. - person maiorano84; 06.01.2013
comment
ตกลงมาด้วยการเพิ่มการตั้งค่าเพิ่มเติมใน CF7: add_filter('wpcf7_form_action_url', 'formname'); และใน Functions.php เพิ่มโค้ด: function formname() { return whereToPost.asp; } - person user1102824; 07.01.2013
comment
@ user1102824 ฉันได้ให้การแก้ไขสำหรับคุณซึ่งควรทำสิ่งที่คุณต้องการ ฉันยังไม่ได้ทดสอบ แต่สิ่งนี้จะช่วยให้คุณเริ่มต้นไปในทิศทางที่ถูกต้อง ขอขอบคุณที่สละเวลาศึกษาปัญหา และบอกตามตรงว่าฉันรู้สึกประทับใจมากที่คุณมาถึงวิธีแก้ปัญหาที่ถูกต้องได้เร็วแค่ไหน ขอให้โชคดีกับคุณ - person maiorano84; 07.01.2013
comment
ว้าว. ขอบคุณมาก. ฉันจะทดสอบบนเซิร์ฟเวอร์ tmrw แล้วโพสต์กลับ ดูเหมือนมีอะไรต้องเรียนรู้อีกมาก.. - person user1102824; 07.01.2013
comment
ฉันทดสอบด้วย add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url'); ในไฟล์ function.php และแบบฟอร์ม เมื่อคลิกปุ่มส่งแล้ว จะแสดงวงกลมการประมวลผลและไม่มีการตอบสนอง ดังนั้นฉันจึงใส่โค้ดนั้นใน CF7 ใต้ 'การตั้งค่าเพิ่มเติม' แทน ซึ่งช่วยให้ฉันได้รับอีเมลพร้อมข้อมูล แต่ดูเหมือนจะไม่ได้พูดคุยกับ .asp ภายนอก URL .asp เองแสดงข้อผิดพลาดเมื่อดูในเบราว์เซอร์: ขออภัย มีข้อผิดพลาดของระบบ คุณสมบัติ FromAddress ไม่สามารถเว้นว่างได้ ไม่แน่ใจว่าจำเป็นต้องแก้ไขโค้ดหรือมีบางอย่างผิดปกติกับ .asp เองหรือไม่ ซึ่งอาจเป็นปัญหาด้านไอที - person user1102824; 08.01.2013
comment
ดีสำหรับคุณในการหาตำแหน่งที่จะย้ายการโทร add_filter เนื่องจากหน้า .asp กำลังปรากฏขึ้น นั่นหมายความว่าการดำเนินการถูกเรียกใช้ตามที่ตั้งใจไว้ ข้อผิดพลาดนี้หมายความว่าหน้า .asp ประมวลผลข้อมูลไม่ถูกต้อง ซึ่งไม่เกี่ยวข้องกับ Wordpress หวังว่าเจ้าหน้าที่ไอทีของคุณจะสามารถคิดออกได้ - person maiorano84; 08.01.2013
comment
อ่า ฉันหมายถึงว่า .asp ไม่ได้เกิดขึ้นจากการส่งแบบฟอร์ม แต่เมื่อฉันพิมพ์ .asp url ในเบราว์เซอร์ ข้อความแสดงข้อผิดพลาดก็ปรากฏขึ้น - person user1102824; 08.01.2013
comment
การพิมพ์ URL จะไม่ส่งข้อมูลไปยังแบบฟอร์ม ดังนั้นจึงคาดว่าจะเกิดข้อผิดพลาด คลิกขวาที่แบบฟอร์มและตรวจสอบองค์ประกอบ การกระทำของแบบฟอร์มบอกว่าอย่างไร - person maiorano84; 08.01.2013
comment
การตรวจสอบองค์ประกอบบนปุ่มส่งจะแสดง ‹form class=wpcf7-form method=post action=permalinkname#wpcf7-f6-p1178-o1› (p1178 ตรงกับรหัสหน้า #) ฉันพยายามตั้งชื่อฟังก์ชันและลิงก์ถาวรให้เหมือนกัน ซึ่งใช้งานไม่ได้ - person user1102824; 08.01.2013
comment
..ฉันสมมติว่าโค้ด php หรือโค้ดไฟล์ the.php ถูกวางไว้จำเป็นต้องเปลี่ยน..? ข้อเสนอแนะ / ความคิดใด ๆ ที่ชื่นชมอย่างมาก ขอบคุณ. - person user1102824; 10.01.2013
comment
ขออภัย ไม่เห็นคำตอบอื่น นอกเหนือจากการย้ายการเรียก add_filter กลับไปที่ function.php และตรวจสอบการกระทำของแบบฟอร์มใน Web Inspector ของคุณแล้ว ฉันยังไม่มีไอเดียเลย (ฉันไม่ได้ใช้แบบฟอร์มติดต่อ 7 โดยเฉพาะ) คุณใช้ตัวอย่างแรกหรือตัวอย่างที่สองหรือไม่? หากคุณใช้อันที่สอง ให้ลองใช้อันแรกและดูว่าแบบฟอร์มทั้งหมดของคุณได้รับผลกระทบหรือไม่ - person maiorano84; 10.01.2013
comment
ขออภัยสำหรับการตอบกลับล่าช้า ฉันลองทั้งสองตัวอย่างแล้ววางโค้ดในที่ต่างๆ โดยไม่ได้ไป .. ติดต่อฝ่ายไอทีแล้วและพวกเขากำลังพยายามแก้ไข ขอบคุณมากสำหรับความช่วยเหลือของคุณ ฉันรู้สึกว่าการเรียนรู้ php จะมีประโยชน์ในระยะยาวมากกว่าการพยายามปรับแต่งธีมโดยให้ผลลัพธ์ที่จำกัด หากมีแหล่งข้อมูลออนไลน์/หนังสือใดๆ ที่คุณแนะนำ ฉันจะขอบคุณมาก ขอขอบคุณอีกครั้งสำหรับเวลาของคุณ - person user1102824; 29.01.2013
comment
@ user1102824 ขออภัย เราไม่สามารถเริ่มต้นใช้งานได้ในเวลานี้ หากคุณมีความสนใจในการเรียนรู้การเขียนโปรแกรมทุกประเภท (PHP เป็นเพียงหนึ่งในหลาย ๆ รสชาติ) คำแนะนำของฉันคือนั่งลงและเล่นกับมันด้วยตัวเอง การเรียนรู้แบบลงมือปฏิบัติจริงมีประสิทธิภาพมากกว่าทฤษฎีมาก เริ่มต้นด้วยการเขียนสคริปต์ Hello World ใน PHP จากนั้นทดลองเพื่อให้ได้ผลลัพธ์เดียวกันด้วยวิธีต่างๆ มากมายเท่าที่จะทำได้ คู่มือ PHP และ Wordpress Codex คือเพื่อนของคุณ ขอให้โชคดี. - person maiorano84; 29.01.2013
comment
เราไม่สามารถใส่เงื่อนไขทับรหัสแบบฟอร์มได้หรือไม่? - person Maha Dev; 24.04.2017
comment
หากคุณใช้ตัวกรองนี้ คุณจะสูญเสียฟีเจอร์ต่างๆ เช่น การตรวจสอบความถูกต้อง นอกจากนี้ เพื่อให้ตัวกรองนี้ทำงานได้ คุณต้องปิดการใช้งาน JS จาก CF7 - person kanlukasz; 22.07.2020
comment
มีตะขอสำหรับเปลี่ยนการกระทำแอตทริบิวต์ของฟอร์มหรือไม่? - person Sudhanshu; 10.12.2020

คำตอบเยี่ยมมาก @ maiorano84 แต่ฉันคิดว่าคุณควรตรวจสอบ ID แบบฟอร์มแทนโพสต์ นี่คือเวอร์ชันของฉัน

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
function wpcf7_custom_form_action_url($url)
{
    $wpcf7 = WPCF7_ContactForm::get_current();
    $wpcf7_id = $wpcf7->id();

    $form_id = 123;
    

    return $wpcf7_id == $form_id? '/action.php' : $url;
}

อีกสิ่งหนึ่งที่คุณอาจต้องปิดการใช้งาน WPCF7 AJAX ซึ่งสามารถปิดการใช้งานได้โดยการวางโค้ดต่อไปนี้ในธีมของคุณ Functions.php

apply_filters( 'wpcf7_load_js', '__return_false' );
person Abbas Arif    schedule 04.11.2020
comment
ปิดการใช้งาน WPCF7 โดยใช้ Apply_filters AJAX ไม่ทำงานสำหรับฉัน - person José Carlos PHP; 05.05.2021
comment
หากตัวกรองไม่ทำงาน คุณสามารถกำหนดได้ใน wp-config.php define('WPCF7_LOAD_JS', false); - person Abbas Arif; 05.05.2021
comment
ใช่ ในที่สุดฉันก็ทำได้ใน wp-config.php แต่ฉันปรับแต่งเพิ่มเติมเพราะฉันไม่ต้องการปิดการใช้งาน WPCF7_LOAD_JS สำหรับทุกรูปแบบ เพียงรูปแบบเดียว มันทำงานได้ดี - person José Carlos PHP; 06.05.2021

คุณสามารถเพิ่มการดำเนินการได้หลังจากการส่งสำเร็จ เช่น เอกสารระบุ

การเพิ่มตัวกรองจะทำงานในแง่ที่ว่าจะเปลี่ยนการดำเนินการในแบบฟอร์ม แต่น่าเสียดายที่ตัวกรองจะทำให้ฟังก์ชันการทำงานของปลั๊กอินเสียหายด้วย หากคุณเพิ่มตัวกรองเช่นเดียวกับคำตอบอื่น ๆ แนะนำว่าแบบฟอร์มจะคงสถานะสปินเนอร์ไว้หลังจากส่ง

คุณสามารถทำให้แบบฟอร์มทำอย่างอื่นเมื่อส่งได้โดยใช้การตั้งค่าขั้นสูง เช่น:

on_submit: "alert('submit');"

รายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าขั้นสูง ที่นี่

person pcatre    schedule 13.06.2016
comment
หมายเหตุ: on_sent_ok และ on_submit ได้ถูกลบออกจากแบบฟอร์มติดต่อ 7 5.0 อย่างเป็นทางการแล้ว คุณสามารถใช้เหตุการณ์ DOM แทนการตั้งค่าเหล่านี้ได้ - person kanlukasz; 21.09.2019

ตาม @abbas-arif โซลูชันของเขาใช้งานได้ดี แต่มีข้อ จำกัด โซลูชันนี้เปลี่ยนการกระทำของแบบฟอร์มในทุกแบบฟอร์มที่มีอยู่ในโพสต์ด้วย ID นั้น วิธีแก้ปัญหาที่ดีกว่าควรใช้ ID ของแบบฟอร์มโดยตรง หากต้องการรับมัน โดยใช้ wordpress ›5.2 คุณสามารถใช้:

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
function wpcf7_custom_form_action_url($url)
{
    $cf7forms = WPCF7_ContactForm::get_current();
    $Form = $cf7forms -> id;
    
    
        switch($Form){
            case 1:
                return 'destination like salesforce url 1...';
            case 2:
                return 'destination like salesforce url 2...';
            case 3:
                return 'destination like salesforce url 3...';
            default:
                return $url;
            
        }

}
person Aculine    schedule 12.11.2020