Luồng thích hợp cho dữ liệu tùy chỉnh từ URL trong WP_Query là gì?


14

Tôi có nhiều quá trình giai đoạn tích hợp các khía cạnh phức tạp vào các truy vấn WP. Vấn đề là - sâu hơn tôi nhận được tôi mờ hơn trở về làm thế nào nó được cho là để làm việc và tôi có thể sử dụng một phương châm hơn là sáng tạo (và đào cho mình một lỗ).

Các giai đoạn chung tôi có (mã giả, nhưng gần với thực tế):

  1. lấy giá trị từ URL (một cái gì đó đơn giản như person=1)
  2. xử lý giá trị và nối các hướng dẫn truy vấn tùy chỉnh ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. lấy hướng dẫn truy vấn tùy chỉnh cuối cùng và tạo các lệnh SQL thích hợp

Đến bây giờ tôi có rất nhiều thứ đang diễn ra (các mối quan hệ, phân loại, ngày tháng) và nó trở nên mong manh (một góc của mã không đặt giá trị khi góc khác của mã mong muốn tìm thấy và mọi thứ tách rời).

Vì vậy, câu hỏi lớn là - giao thức thích hợp để truyền, nhận, lưu trữ và xử lý dữ liệu tùy chỉnh cho WP qua URL là gì?

Các bộ phận nhỏ hơn:

  • Làm thế nào để đảm bảo tôi không va chạm với WP bên trong?
  • Tôi lưu trữ dữ liệu trung gian ở đâu và như thế nào?
    • sự khác biệt giữa queryquery_varstính chất? Chúng dường như được sử dụng gần như giống nhau trong mã, nhưng chúng có xu hướng giữ các giá trị và phương thức khác nhau có lợi cho query_varsmột.

Câu trả lời:


6

Tôi nghĩ rằng chức năng WP mà bạn đang tìm kiếm là add_rewrite_tag . Nó nhằm mục đích thêm các thông số GET tùy chỉnh vào URL của bạn và tự động đưa nó vào query_vars.

Ví dụ: bạn có thể thêm phần sau vào hook init:

add_rewrite_tag('%person%','([^&]+)');

Đối với một url như http://example.com?person=joe , toàn cầu $wp_querysẽ có

$wp_query->query_vars['person'] = 'joe'

Bạn cũng có thể thêm quy tắc viết lại để làm cho URL đẹp hơn, ví dụ: http://example.com/person/joe

add_rewrite_rule('^person/([^/]*)/?','index.php?person=$matches[1]','top');

Xem API Rewrite để biết thêm thông tin và ví dụ.


2
Tôi tìm thấy một số thời gian (cuối cùng) để đọc qua tất cả các mã có liên quan trong WPWP_Queryvà trong khi có rất nhiều điều xảy ra ở đó, tôi nghĩ rằng add_rewrite_tag()dường như cách cô đọng nhất để làm cho WP nhận thức var query tùy chỉnh và chơi tốt với nó.
Hết

1
  1. Kiểm tra wp-gồm / class-wp.php để kiểm tra bất kỳ truy vấn dành riêng
  2. Tôi không chắc ý của bạn là gì bởi dữ liệu trung gian. Bạn có thể giải thích thêm?
  3. WP tải trang dựa trên một query_ chuỗi trên URL được dịch là truy vấn, sau đó chúng được xử lý bởi WP_Query để xác định query_var nào đang được sử dụng.

Ví dụ: bằng cách tải một trang có /? Pagename = about, WP sẽ xử lý chuỗi truy vấn và tìm truy vấn đang sử dụng là page_id.

Một ví dụ khác: /? Cat = 1, /? Category_name = Chưa được phân loại và / loại / chưa được phân loại có cùng truy vấn_var 'cat'


0

Tôi đã giả định rằng nó được thực hiện thông qua $_GETvà / hoặc $_POST, sau đó thao tác tương ứng.

Cách khác, lưu trữ một lượng lớn dữ liệu trong db sau đó phân tích id thành url như vậy

$data_id = $_GET['id'];

$data = $wpbd->get_results("SELECT * FROM wp_epic_table WHERE id=".$id);

Truy vấn rõ ràng sẽ không đơn giản như vậy, nó có thể bao gồm rất nhiều phép nối và bảng tham gia. Đó là những gì tôi làm trong một trong các trang của mình, phân tích một id duy nhất sau đó xây dựng dữ liệu qua MySQL.

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.