- สถานะ
- แก้ไขแล้ว
- แก้ไขใน
- 4.0.0
ภาพรวมของปัญหา
ก่อนเวอร์ชัน 4.0.0 WPML พยายามทำให้เครื่องหมายทับต่อท้ายตรงกับ URL ขาเข้าในระหว่างการแปลง แต่น่าเสียดายที่ตรรกะนี้ไม่สามารถปรับใช้ได้กับทุกกรณี
ตั้งแต่เวอร์ชัน 4.0.0 เป็นต้นไป URL ที่ถูกแปลงจะตรงตามพฤติกรรมมาตรฐานของ WordPress ซึ่งมีดังต่อไปนี้:
- เมื่อไม่มี path และไม่มี query WPML จะพยายามจับคู่กับ URL ขาเข้า (เช่น http://wpml.com => http://wpml.fr หรือ http://wpml.com/ => http://wpml.fr/) อย่างไรก็ตาม โดยปกติแล้ว WordPress จะแสดง URL ของหน้าแรกโดยไม่มีเครื่องหมายทับต่อท้าย
- เมื่อไม่มี path แต่มี query จะมีเครื่องหมายทับต่อท้ายเสมอ (เช่น http://wpml.com?foo=bar => http://wpml.fr/?foo=bar)
- เมื่อมี path (ที่ไม่ใช่ไฟล์) เครื่องหมายทับต่อท้ายจะขึ้นอยู่กับรูปแบบลิงก์ถาวร
- เมื่อมี path ที่ชี้ไปยังไฟล์ จะต้องไม่มีการเพิ่มเครื่องหมายทับต่อท้าย (ไม่ว่ารูปแบบลิงก์ถาวรจะเป็นอย่างไร) ตัวอย่าง: http://wpml.com/wp-content/uploads/hello.csv
วิธีแก้ปัญหาชั่วคราว
การเปลี่ยนแปลงนี้อาจส่งผลกระทบที่ไม่คาดคิดในธีมหรือปลั๊กอินของบุคคลที่สาม
ขอแนะนำอย่างยิ่งให้หลีกเลี่ยงการต่อสตริงข้อความเพื่อสร้าง URL และใช้ฟังก์ชันเช่น:
- add_query_arg เพื่อสร้างคิวรี URL
- http_build_url หากฟังก์ชันนี้มีให้ใช้งานบนเซิร์ฟเวอร์ (อย่างไรก็ตาม WPML มี polyfill ให้ใช้งาน)
- trailingslashit และ untrailingslashit เพื่อเพิ่มหรือลบเครื่องหมายทับต่อท้าย
ตัวอย่างเช่น โค้ดต่อไปนี้:
$url = get_home_url() . '/' . $path;
ควรแทนที่ด้วย:
$url = trailingslashit( get_home_url() ) . $path;