Vô hiệu hóa CHỈ URL tự động hoàn tất, không phải toàn bộ hệ thống URL chuẩn


8

Tôi có một blog với một vài trang trong một số "dự án" được cấu trúc / đặt tên như thế này:

  • / dự án / dự án-2012
  • / dự án / dự án-2013
  • / dự án / dự án-2014
  • / dự án / dự án-2015

Khi người dùng nhập các URL như http://myblog.com/project hoặc thậm chí http://myblog.com/proje , anh ấy / cô ấy được chuyển hướng đến trang / dự án / dự án-2012 . (Với 301 được di chuyển vĩnh viễn!)

Mặc dù tôi muốn wordpress biến URL dẫn đến một trang được xác định rõ ràng (ví dụ như http://myblog.com/?p=123 ) thành dạng chính tắc, tôi muốn chỉ tắt URL tự động hoàn thành cho các URL "không rõ ràng" có thể chỉ đến một vài trang.

Câu hỏi của tôi là: Làm thế nào tôi có thể thực hiện điều này?


Tôi cũng đã làm một số nghiên cứu ...

  • Câu trả lời được chấp nhận cho câu hỏi Vô hiệu hóa hoàn toàn URL Wordpress tự động vô hiệu hóa toàn bộ hệ thống URL chuẩn. Điều này không được chấp nhận đối với tôi.

  • Khoảng bốn năm trước, một cái gì đó như thế này đã xuất hiện trên trình theo dõi lỗi Wordpress: https://core.trac.wordpress.org/ticket/8948 Trong khi một số giải pháp tốt (như cung cấp một trang "Chúng tôi không tìm thấy URL của bạn. Nhưng bạn là có lẽ đang tìm kiếm một trong những trang sau? ") đã được thảo luận ở đó, vé cuối cùng đã bị đóng.

  • EDIT: Thực sự có một vé mới hơn tại https://core.trac.wordpress.org/ticket/16557 bao gồm chính xác những gì tôi cần. Nó dường như được nhắm mục tiêu cho phiên bản 4.0. Và các ý kiến ​​vé cũng chứa một giải pháp (xem bên dưới).


tính năng đoán URL cốt lõi này cũng gây rối với các công cụ SEO và SEO !!
Mậu

Câu trả lời:


11

Được rồi, sau khi tìm kiếm thêm một chút, cuối cùng tôi cũng tìm thấy câu trả lời cho câu hỏi của riêng mình trong một bình luận về vé yêu cầu tính năng này: https://core.trac.wordpress.org/ticket/16557 Người dùng nacin đề nghị sử dụng mã này:

function remove_redirect_guess_404_permalink( $redirect_url ) {
    if ( is_404() )
        return false;
    return $redirect_url;
}

add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );

Nếu bạn thêm tệp này vào tệp php plugin mới (ví dụ: trong wp-content / plugin / vô hiệu hóa-url-autoc sai-đoáning.php), bạn sẽ có một plugin đẹp mà bạn có thể kích hoạt để tắt tính năng "đoán" tự động sửa lỗi của Wordpress .

Để cứu bạn khỏi những rắc rối, tôi thực sự đã làm điều này và gửi plugin của mình tại Wordpress.org. Khi nó được xem xét ở đó, bạn sẽ có thể tải xuống tại đây: https://wordpress.org/plugins/disable-url-autoc Corr-guide /


Trong khi đây là một giải pháp hoạt động, mã được đề xuất là một phần của hack. Khi yêu cầu tính năng trong https://core.trac.wordpress.org/ticket/16557 thực sự được thực hiện, sẽ có cách giải pháp tốt hơn cho việc này cũng như kiểm soát tốt hơn cách thực hiện đoán.


Ước gì tôi có thể nâng cao vị thế này ...
KalenGi

Truyền cảm hứng cho tôi khi tôi gặp vấn đề trong chuyển hướng phân trang. Tôi đã lên kế hoạch remove_filter(). Nhưng bây giờ chỉ bỏ qua trường hợp cụ thể mà tôi gặp rắc rối. Chỉ trong trường hợp bất cứ ai quan tâm đến vấn đề của tôi: wordpress.stackexchange.com/questions/307670/iêu
Parixit

không còn hoạt động trong v5 +
gật đầu

@nodws: Bạn đang đề cập đến cái gì? Tôi đang sử dụng plugin của mình với đoạn mã trên 5.2.2 và nó vẫn hoạt động tốt.
Hauke ​​P.

Ồ, đó là một cuộc xung đột với các chuyển hướng của
YOAST

0

Thật không may redirect_canonical()là hơn 400 dòng mã (và tiếp tục phát triển từ phát hành đến phát hành), không được cấu trúc đặc biệt để được kiểm soát theo mục đích. Đó là tất cả hoặc không có gì thỏa thuận mà không thể được cấu hình linh hoạt.

Từ quan điểm thực tế, lựa chọn tốt nhất của bạn là:

  1. Xử lý chuyển hướng thủ công, tại template_redirect.
  2. Ngăn chặn chuyển hướng như redirect_canonicalhook nếu mục tiêu mà nó đưa ra là không mong muốn.

Trong cả hai trường hợp, bạn sẽ phải phát triển logic của chính xác những gì thực hiện chuyển hướng không mong muốn.


Huh, đó là bất ngờ rất đáng tiếc. :-( Định nghĩa của tôi về chuyển hướng không mong muốn khá đơn giản: Mọi URL không thể được giải quyết thành chính xác một mục tiêu (nhưng nhiều hoặc không) là không mong muốn và sẽ dẫn đến 404.
Hauke ​​P.

@HaukeP. logic chịu trách nhiệm cho điều đó là một phần của redirect_guess_404_permalink()nó và nó không tạo ra sự khác biệt như vậy, chỉ cần lấy trận đấu đầu tiên mà SQL tạo ra :(
Rarst

Thật ra tôi đã tự mình tìm ra giải pháp: wordpress.stackexchange.com/a/144970/51898
Hauke ​​P.

@HaukeP. Tôi đã hiểu nhầm bạn một chút về "chính xác một mục tiêu", bởi vì một số trường hợp khớp mờ sẽ giải quyết về mặt kỹ thuật chỉ một trận đấu, nhưng nó không giống như loại bỏ những thứ mờ nhạt nói chung :)
Rarst

Vâng, thực sự trong khi viết bình luận cuối cùng của tôi, tôi dừng lại một giây để suy nghĩ lại trong nỗi sợ bị hiểu lầm. :) Vì vậy, có vẻ như tôi nên viết nhận xét của mình (và câu hỏi) chính xác hơn sau tất cả.
Hauke ​​P.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.