Làm thế nào để định tuyến trên wordpress hoạt động?


13

Làm thế nào để định tuyến wp lõi hoạt động? Tôi đang gặp khó khăn trong việc hiểu ... Trong MVC, url của bạn trông giống như mycontroll / myaction ánh xạ tới MyControll-> myaction ()

Trong drupal, đó là index.php? Q = mycustomerpath / hello có thể được ánh xạ tới bất kỳ chức năng nào bạn muốn trả về một nội dung được "theo chủ đề" vào bố cục chủ đề của bạn.

Nhưng trong wp, tôi không biết làm thế nào mọi thứ được thực hiện ... đó là? P = 1 sau đó? Product = 1 ... Tôi đã tìm kiếm tài liệu về luồng định tuyến nhưng không thể tìm thấy bất kỳ (google chỉ trả về các bài viết về tùy chỉnh tuyến đường) .. tôi muốn hiểu các nguyên tắc cơ bản của định tuyến lõi trước tiên ..


đào mã, tôi thấy trên mỗi yêu cầu nó gọi query_posts? Tại sao trên trái đất nó cần phải truy vấn bài viết mỗi lần? không có trường hợp bạn không thực sự muốn hiển thị bài viết ??
yeahman

1
Nội dung được lưu dưới dạng bài đăng trong WP. Vì vậy, khi bạn cần hiển thị nội dung, bạn cần truy vấn nó
Sisir

Tôi có thể đề nghị bạn đọc về "vòng lặp", đó là khái niệm mà bạn cần hiểu để biết WordPress hoạt động như thế nào. "Vòng lặp" thiết yếu hiển thị một mảng các bài đăng là kết quả của query_posts. Đối với các yêu cầu URL không phải quản trị viên, WP được thiết kế để chỉ hiển thị các bài đăng và phải lập trình tùy chỉnh để hiển thị nội dung nào đó bên cạnh bài đăng. Yêu cầu URL của quản trị viên là khác nhau và những yêu cầu này không sử dụng "vòng lặp" và hiển thị những thứ không được đăng.

ok nhưng cách tiếp cận này hơi lạ và không linh hoạt lắm
yeahman

nói rằng tôi muốn hiển thị một hình thức liên lạc .. tôi cần đặt html của tôi trong một loại nội dung trang? Tôi vẫn đang cố gắng tìm nơi để đặt logic cho việc gửi biểu mẫu ... (trong trang chủ đề.php? Cách tiếp cận rất xấu xí)
yeahman

Câu trả lời:


20

Trong WordPress, URL không ánh xạ tới các tuyến đường. Họ ánh xạ tới các truy vấn cơ sở dữ liệu.

Khi sử dụng WordPress trong chế độ permalinks "mặc định", bạn có một bộ biến trong truy vấn URL chính, như? P = 1 hoặc? Page = 234, v.v. Ngoài ra còn có? S = tìm kiếm và nhiều người khác.

Nếu bạn sử dụng permalinks "khá", thì một bộ quy tắc lớn gọi là "quy tắc viết lại" được tạo để ánh xạ trực tiếp các mẫu URL khác nhau vào cùng một bộ tham số URL này. Vì vậy, một URL như / 2014/04/12 / ví dụ sẽ ánh xạ tới? Year = 2014 & tháng = 04 & day = 12 & postname = ví dụ hoặc tương tự. Vì vậy, những điều sau đây cũng áp dụng cho những điều này, sau khi ánh xạ này được thực hiện.

Các biến này về cơ bản kiểm soát thể hiện chính của lớp WP_Query. Lớp WP_Query chứa tất cả thông tin xây dựng truy vấn cơ sở dữ liệu để lấy "bài đăng" từ cơ sở dữ liệu. Các tham số khác nhau được truyền vào nó kiểm soát loại truy vấn nào được xây dựng và dữ liệu nào nhận được.

Xem, mọi thứ có thể được hiển thị bởi WordPress về cơ bản là một "bài đăng". Một blog là một loạt các bài viết theo thứ tự ngược thời gian. "Trang" là một bài tĩnh với tên được xác định. "Loại bài đăng tùy chỉnh" chính xác là âm thanh của nó, "bài đăng" với loại tùy chỉnh mà bạn xác định. Tất cả các truy vấn chính để hiển thị mọi thứ trong WordPress đều nhận được một số tập hợp con các bài đăng từ bảng wp_posts.

WP_Query là cái gì Và các tham số từ URL được gửi trực tiếp vào truy vấn chính đó và được sử dụng ở đó.

Sau đó, chủ đề sẽ xác định mẫu nào sẽ sử dụng dựa trên những gì truy vấn quay lại. Nếu bạn đã yêu cầu / category / example, thì điều đó trở thành? Category_name = example có nghĩa là mảng chính $ wp_query-> query_vars sẽ lấy thông tin đó và WP_Query sẽ lấy ra các bài đăng X cuối cùng cho danh mục "ví dụ" và nó sẽ đặt cờ is_c Category của nó thành true.

Trình tải mẫu sẽ chạy sau này, xem is_carget () trả về true và quyết định chọn mẫu danh mục, do đó, nó sẽ tìm danh mục-example.php và quay lại category.php, v.v., theo Mẫu Hệ thống cấp bậc.

Vì vậy, câu hỏi nếu bạn muốn thay đổi cách URL hoạt động rất đơn giản: Bạn có muốn thay đổi URL hoặc những gì chúng được ánh xạ tới? Vì các URL không được ánh xạ tới các chức năng, chúng được ánh xạ tới các tham số kiểm soát truy vấn. Nếu bạn muốn URL điều chỉnh truy vấn chính đó, thì đó là một quy trình hơi khác so với nếu bạn muốn một URL đặc biệt để chạy một số mã đặc biệt hoàn toàn khác.

Và để trả lời câu hỏi cụ thể của bạn trong các bình luận: "không có trường hợp nào bạn không thực sự muốn hiển thị bài viết?" Không có. Tất cả mọi thứ là một bài viết. Tất cả nội dung được lưu trữ trong bài viết. Nếu bạn muốn lưu trữ nội dung ở nơi khác và khác biệt, thì bạn có thể làm điều đó, nhưng điều đó khó khăn hơn bởi vì, thành thật mà nói, điều đó thường không cần thiết. Nếu bạn có nội dung đặc biệt, hãy tạo một loại bài đăng tùy chỉnh, lưu trữ nội dung của bạn dưới dạng một bài đăng với loại đó, ánh xạ một mẫu URL tới nó. Dễ dàng.


Tôi hiểu rằng mọi thứ nên được thể hiện trong một bài đăng (thông qua các loại bài đăng tùy chỉnh, v.v.) rất giống với các loại tùy chỉnh trong drupal 6 ... nhưng nó có ảnh hưởng đến hiệu suất khi có một bảng bài đăng duy nhất để lưu trữ mọi nội dung của trang web không? drupal 7 đã giải quyết nó bằng cách giới thiệu loại thực thể để bạn không phải tạo loại tùy chỉnh và lưu trữ mọi thứ trong bảng nút nhưng trong bảng thực thể của riêng bạn vẫn có thể tận dụng từ khung drupal. Tôi hy vọng wordpress giới thiệu cách tiếp cận như vậy trong tương lai. thx cho lời giải thích chi tiết.
yeahman

Tôi đoán nếu tôi muốn ánh xạ một url đến một chức năng / chủ đề của riêng tôi, bộ định tuyến wp sẽ giúp gì?
yeahman

Thêm một hệ thống định tuyến đầy đủ thường không cần thiết. Có những cách đơn giản hơn. Cơ sở của WordPress là hiển thị nội dung do người dùng tạo, tất cả được lưu trữ trong bảng bài viết. Nếu bạn muốn hiển thị nội dung không phải do người dùng tạo, thì bạn thường làm điều đó trong chủ đề hoặc trong một plugin. Có hàng trăm (hàng nghìn) móc hành động và bộ lọc và các cách khác để mã ghi đè các phần khác nhau của quy trình khi trang được tạo. Và với những thứ như shortcodes, việc chèn html tùy chỉnh vào nội dung tương đối dễ dàng.
Otto

Làm cách nào để thêm html / php tùy chỉnh vào loại bài đăng tôi đã tạo? mà không cần sửa đổi single.php của chủ đề hoặc tạo một mycustompost.php (không phải là một cách tiếp cận rất di động)
yeahman

6
sau hơn 1 năm làm việc với wordpress ... Tôi vẫn không bị thuyết phục bởi nó ... khung không thanh lịch và khá xấu xí ... Nó hoạt động như một blog đơn giản nhưng nếu bạn muốn phát triển các loại trang web khác. . Đó là kiểu hack wordpress để làm điều gì đó mà nó không phải là để làm.
yeahman 7/11/2015
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.