Cách nhận URL đẹp với add_query_arg trong permalinks


8

Với add_query_arg()việc thêm các tham số bổ sung vào URL là điều rất tốt và cũng dễ dàng tạo quy tắc viết lại. Càng xa càng tốt. Nhưng vấn đề là sự thay thế URL được thực hiện bởi wordpress.

Khi tôi có một URL, như:

www.mysite.com/?page_id=1&myvar=test

và tôi nhập URL này vào dòng địa chỉ của trình duyệt với permalinks được kích hoạt. Liên kết này sẽ trở thành:

www.example.com/pagename/?myvar=test

NHƯNG : những gì tôi muốn nhận được là:

www.example.com/pagename/test

Cuối cùng, tôi muốn sử dụng mã như:

<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>

mà sẽ dẫn đến:

www.example.com/pagename/test

Làm thế nào điều này có thể đạt được? Tôi đã dành hàng giờ để đọc tài liệu và tôi không thể tìm thấy một giải pháp.


1
Tôi muốn biết làm thế nào được thực hiện. +1 cho câu hỏi.
henrywright 27/12/13

Câu trả lời:


5

Chỉ cần đối mặt với tình huống tương tự và vấp phải câu hỏi này trong khi googling.

Có vẻ như điều này là không thể. Bản thân Core chỉ nối các chuỗi vào URL nếu các permalinks đẹp được bật, xem https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

Đối với bất kỳ ai quan tâm đến điều này: Bạn có thể làm một cái gì đó như thế này trong mã của bạn:

if ( '' != get_option('permalink_structure') ) {
    // using pretty permalinks, append to url
    $read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
  } else {
    $read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
  }

Giải pháp này cũng được Jon Cave đề xuất trong một bình luận trên blog chính thức: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoint-api/#comment-686


0

WordPress sẽ không cho phép bạn làm điều này một cách dễ dàng. Trên thực tế, quy tắc viết lại là tùy chọn duy nhất của bạn để đạt được loại điều này trong WordPress và quy tắc viết lại WordPress có thể thực sự lộn xộn khi trang web của bạn phát triển vì plugin và chủ đề (và bạn cũng vậy) có thể thêm quy tắc viết lại tùy chỉnh trên quy tắc hiện có trong (đa )Cài đặt trang web.

Giải pháp @swissspidy sẽ hoạt động nếu bạn đã có quy tắc viết lại cho khóa của mình (myvar) và đang sử dụng permalinks trong điều kiện đầu tiên và sau đó chuyển sang chuỗi truy vấn truyền thống nếu không có các điều kiện đó. @Johnathan Giải pháp Joosten cho thấy cách viết lại các quy tắc có thể trở nên rất phức tạp trong WordPress (hãy tưởng tượng làm điều đó cho tất cả các khóa và giá trị chuỗi truy vấn của bạn ...)

Tôi đã gặp vấn đề này một vài lần trước khi làm việc với một số dự án cỡ trung bình cho khách hàng của mình và tôi đã có thể đạt được điều gì đó tương tự bằng cách sử dụng plugin có tên Obfusquer. Theo trang web, nó che dấu tất cả các chuỗi truy vấn WordPress bằng các khóa bí mật do người dùng xác định và cũng cung cấp các móc cho các yêu cầu tùy chỉnh nâng cao.

Thật buồn cười, nó không được liệt kê trên kho lưu trữ plugin WordPress và tôi nghĩ bạn sẽ cần đăng ký (mà tôi nghĩ là rất hợp lý vì 1 giấy phép duy nhất sẽ hoạt động ngay cả trong cài đặt nhiều trang) nhưng đây là liên kết đến nó nếu bạn cần che dấu / ẩn chuỗi truy vấn trong cài đặt WordPress. Họ cũng có tài liệu ở đây .

Bây giờ tôi sử dụng plugin trong hầu hết các dự án wordpress của mình, hy vọng nó sẽ giúp ích cho nhu cầu của bạn. Chúc mừng.


-1

Giải pháp Wordpress sẽ là thêm các quy tắc viết lại để tạo ra một cái gì đó như thế này:

    add_action( 'init', 'my_rewrite_add_rewrites' );
    function my_rewrite_add_rewrites()
    {
        add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
        add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
    }

đọc thêm: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule


1
Bạn nên làm cho nó trở nên phức tạp hơn để hạ thấp nó ...
Vishal Kumar Sahu
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.