Cách sửa đổi phân loại đã được đăng ký


18

Hôm nay tôi cần thay đổi các đối số về phân loại tùy chỉnh đã được đăng ký bởi một plugin bên thứ ba . Cụ thể tôi muốn đặt show_admin_columnđối số truevà thay đổi rewritesên để nó không chỉ là sên phân loại. Trong trường hợp này, đó là loại bài đăng "Mọi người" với phân loại tùy chỉnh "Danh mục nhân dân".

Tôi đã ngạc nhiên khi điều này không được hỏi trước đây, vì vậy đây là một câu hỏi và câu trả lời.


Chỉ cần một lưu ý phụ cho bất cứ ai bị mắc kẹt, hãy nhớ xả permalinks trước khi kiểm tra kết quả.
un.pez.vivo

Câu trả lời:


22

register_taxonomy()là công cụ cho công việc. Từ Codex:

Hàm này thêm hoặc ghi đè một phân loại.

Một lựa chọn sẽ là sao chép register_taxonomy() $argsvà sửa đổi chúng. Tuy nhiên, điều đó có nghĩa là bất kỳ thay đổi nào trong tương lai đối với register_taxonomy()mã gốc sẽ bị ghi đè.

Do đó, ít nhất trong trường hợp này, tốt nhất là lấy các đối số ban đầu, sửa đổi các đối số tôi muốn thay đổi và sau đó đăng ký lại phân loại. Cảm hứng cho giải pháp này được gửi đến @Otto trong câu trả lời này cho một câu hỏi tương tự về các loại bài đăng tùy chỉnh .

Sử dụng peopleloại bài đăng tùy chỉnh và people_categoryphân loại từ ví dụ, điều này sẽ làm được:

function wpse_modify_taxonomy() {
    // get the arguments of the already-registered taxonomy
    $people_category_args = get_taxonomy( 'people_category' ); // returns an object

    // make changes to the args
    // in this example there are three changes
    // again, note that it's an object
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // re-register the taxonomy
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// hook it up to 11 so that it overrides the original register_taxonomy function
add_action( 'init', 'wpse_modify_taxonomy', 11 );

Lưu ý ở trên rằng tôi đánh máy register_taxonomy()đối số thứ ba thành kiểu mảng dự kiến. Điều này không thực sự cần thiết vì việc register_taxonomy()sử dụng wp_parse_args()có thể xử lý một objecthoặc array. Điều đó nói rằng, register_taxonomy()'s $argscó nghĩa vụ phải nộp như một arraytheo Codex, vì vậy đây cảm thấy đúng với tôi.


Tôi đang cố gắng làm điều này để thay đổi một nguyên tắc phân loại phẳng thành phân loại phân cấp. Tôi chỉ đơn giản là thay đổi thuộc tính phân cấp thành đúng. Bằng cách này, nó gây ra hai hộp meta cho phân loại ở bên phải màn hình chỉnh sửa bài đăng và tôi thực sự không thể thêm các phân loại ...
Joel Worsham

Hãy chắc chắn rằng bạn sử dụng cùng một con sên (ví dụ 'people_category') như phân loại ban đầu để bạn ghi đè lên nó.
mrwweb

1
Thiên tài! Thiên tài thuần túy! Làm việc hoàn hảo!
DaveyJake

1
Tôi đã tìm thấy một vấn đề với giải pháp này: capabilitiestham số được lưu trữ bên trong vì capvậy nó sẽ không được chuyển sang phân loại đăng ký mới. Xem câu trả lời của tôi cho một câu hỏi tương tự ở đây
Fabien Quatravaux

1
Điều này thật tuyệt vời, tôi đã sử dụng nó để thêm các url phân cấp vào phân loại tùy chỉnh.
Brian Peat
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.