WPML
สถานะ
แก้ไขแล้ว
แก้ไขใน
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;

ปัญหาที่ทราบแล้วทั้งหมด →