Tại sao get_term () yêu cầu phân loại? Term_ids không phải là duy nhất?


8

Một câu hỏi WPSE liên quan hỏi làm thế nào để có được thuật ngữ bằng cách chỉ xác định ID, mà không chỉ định phân loại. Câu hỏi của tôi mang tính triết học nhiều hơn. Nói chung, những thứ trong WP core là có lý do. Tôi đang cố gắng hiểu tại sao term_id không thể là chìa khóa chính cho thuật ngữ - tại sao chúng ta cũng cần phân loại? Một hồ sơ hạn có thể là một thành viên của nhiều nguyên tắc phân loại? Điều đó chắc chắn hiện không được hỗ trợ trong API. Có một trường hợp sử dụng mà điều này có thể được mong muốn?

Hoặc là $taxonomytham số bắt buộc trong get_term()đuôi di tích từ một hóa thân trước đó của cấu trúc cơ sở dữ liệu?


3
Tôi không hoàn toàn chắc chắn nhưng tôi nghĩ đó là vấn đề về hiệu năng vì trường phân loại của wp_term_taxonomybảng được sử dụng làm chỉ mục cho bảng đó, giúp truy vấn nhanh hơn (ngay cả khi đó chỉ là một thuật ngữ).
BaiNET

@BaiNET Xin hãy xem phần cuối của A. tôi EXPLAINnói term_id.
kaiser

1
Tôi nghĩ rằng đó là một cái đuôi di tích. Đăng nhập một vé với Trac: core.trac.wordpress.org/ticket/20536
Tom Auger

Câu trả lời:


3

Tôi đã đăng nhập một vé chống lại điều này với trac: http://core.trac.wordpress.org/ticket/20536

Tuy nhiên, hóa ra là tại thời điểm đó là cần thiết, vì hiện tại WordPress (kể từ 2.x) có một lỗi mà DOES liên kết hai thuật ngữ có cùng tên với cùng một term_id! Vì vậy, có thể (mặc dù không chính xác) cho một thuật ngữ duy nhất được liên kết với nhiều hơn một nguyên tắc phân loại. Xem lỗi này: http://core.trac.wordpress.org/ticket/5809

Nó khá rộng nên việc thực hiện sửa lỗi sẽ cần phải được kiểm tra đơn vị rất kỹ lưỡng. Tôi sẽ cố gắng nhớ cập nhật câu hỏi này nếu có bất kỳ sự phát triển nào.


Đây là DEFINITELY trường hợp! Lỗi này cắn tôi trên một bản cài đặt nhiều trang (vài trăm) ... Rất kỳ lạ. VÀ lưu ý rằng lỗi đã được 5 năm tuổi ... Tuy nhiên, bản vá được lên lịch để đưa vào phiên bản 3.6, vì vậy điều này thực sự có thể được sửa! (Cuối cùng! :))
rinogo

Cảm ơn đã cập nhật câu hỏi này để chọn câu trả lời đúng, Tom! Hy vọng rằng điều này sẽ giúp những người đáp ứng câu hỏi này trong tương lai. Và cảm ơn câu trả lời / liên kết. Rất hữu ích.
rinogo

1
Nhắc nhở để cập nhật câu hỏi này - btw, không có gì với bí danh ?
kaiser

Xin chào @kaiser, cập nhật nó với những gì? Tôi không chắc chắn rằng đã có bất kỳ chuyển động tích cực hơn nữa đối với việc giải quyết các vấn đề Trac được đề cập.
Tom Auger

Hiện tại mục tiêu của nó được đặt thành 3,7 sớm . Hãy xem điều gì xảy ra. Điều gì còn thiếu? Cuối cùng không thể theo dõi vì đã có bài kiểm tra đơn vị từ những gì tôi đọc.
kaiser

1

Tại sao chúng ta cũng cần phân loại? Một hồ sơ hạn có thể là một thành viên của nhiều nguyên tắc phân loại?

Không. Điều khoản có sên để hỗ trợ lưu trữ hạn. Và việc sên hai lần sẽ mang lại rất nhiều minetraps hoặc "wontfix" es trong một số tình huống permalink.

Có một trường hợp sử dụng mà điều này có thể được mong muốn?

Có: Hãy tưởng tượng rằng bạn có điều kiện cho ví dụ sizevà có ba nguyên tắc phân loại tên length, widthheight(bạn cũng có thể suy nghĩ về màu sắc). Nhưng điều đó không được hỗ trợ vì những lý do được viết ở trên.

Nói chung, những thứ trong WP core là có lý do. Tôi đang cố gắng hiểu tại sao term_id không thể là chìa khóa chính cho thuật ngữ - tại sao chúng ta cũng cần phân loại?

Từ việc nhìn vào bảng và chạy một EXPLAIN, term_id khóa chính. Tôi đoán trên các hệ thống lớn hơn có thể nhanh hơn khi chỉ truy vấn các thuật ngữ phân loại cụ thể bằng cách sử dụng phép nối (chậm) so với truy vấn tất cả, sắp xếp chúng và lọc những gì bạn cần.


Từ âm thanh của sự vật sau đó, nó có lỗi (có lẽ còn sót lại từ lược đồ trước đó) hoặc đó là trường hợp tương lai mà bạn có thể được phép có sên trùng lặp (không chắc). Trong mọi trường hợp, tôi không chắc bạn đã trả lời câu hỏi của tôi.
Tom Auger

@TomAuger "Có trường hợp sử dụng nào mà điều này có thể được mong muốn không": Có. Nhưng contra có trọng lượng hơn. Một thuật ngữ trong thuế A có thể có cùng tên với một thuật ngữ trong thuế B, nhưng một ý nghĩa khác chẳng hạn. Vì vậy, nếu bạn đang truy vấn "trọng lượng" trong phân loại "tầm quan trọng" và "chi phí vận chuyển", thì điều gì sẽ "thực sự nặng"?
kaiser

Có, nhưng ở đây chúng ta đang nói về ID hạn, không phải thuật ngữ NAME. ID đã hoàn toàn phân biệt thuật ngữ này với bất kỳ thuật ngữ nào khác (trong bất kỳ phân loại nào) có thể có cùng tên. Lưu ý rằng đây không phải là một câu hỏi cơ sở dữ liệu và nhiều hơn về lý do tại sao nó được để lại trong mã lõi.
Tom Auger

@TomAuger Sẽ dễ dàng hơn nếu bạn theo dõi Q này vào cuối tháng 12. Bây giờ tôi sẽ làm việc lại với điều này: /
kaiser
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.