Deregister loại bài tùy chỉnh


44

Bất cứ ai cũng biết một cách để hủy đăng ký các loại bài tùy chỉnh?

Có tương đương với register_post_type()?


1
MỌI MỘT ELSE TÌM KIẾM NÀY. Khi bạn đăng ký một loại bài tùy chỉnh, không có gì được lưu vào cơ sở dữ liệu. Bảng bài viết trong db wp không có cấu trúc. Nó chỉ đăng ký với phần bên trong của tập lệnh wp mà bạn có thể tạo một mục vào bảng bài viết với loại những gì bạn đã tạo với bài đăng ký. Hy vọng rằng sẽ giúp một số người khác.
MageProspero

2
Kể từ WordPress 4.5 có chức năng để làm điều đó unregister_post_type. Xem Hủy đăng ký loại bài đăng bằng cách sử dụng unregister_post_type
Dhinju Divakaran

Câu trả lời:


38

Hiện tại không có chức năng hủy đăng ký loại bài đăng, tuy nhiên quá trình này khá đơn giản.

Andrew Nacin đã cung cấp một số mã trên trac, được tìm thấy ở đây và được đăng dưới đây.

if ( ! function_exists( 'unregister_post_type' ) ) :
function unregister_post_type( $post_type ) {
    global $wp_post_types;
    if ( isset( $wp_post_types[ $post_type ] ) ) {
        unset( $wp_post_types[ $post_type ] );
        return true;
    }
    return false;
}
endif;

Không đăng ký loại bài đăng tích hợp sẽ có tác dụng không xác định trên WordPress, vì vậy hãy tự chịu rủi ro. Việc hủy đăng ký loại bài đăng tùy chỉnh sẽ hoàn toàn an toàn, nhưng đương nhiên sẽ không dọn dẹp cài đặt của bạn (nghĩa là không đăng ký loại bài đăng không đồng nghĩa với việc xóa dữ liệu khỏi cơ sở dữ liệu).

Tôi có thể tưởng tượng một vài tình huống có thể cần điều này, nhưng cách tiếp cận hợp lý hơn (nếu có thể), chỉ đơn giản là không đăng ký loại bài đăng ở vị trí đầu tiên nếu không muốn.


2
Bạn được chào đón .. :) Nếu bạn thêm các loại bài đăng của riêng bạn ở dạng mã, giải pháp dễ dàng hơn là chỉ cần loại bỏ chức năng / mã bạn chạy có thêm chúng. Cũng lưu ý, việc xóa các loại bài đăng không xóa chúng khỏi bảng bài viết của bạn, vì vậy bạn có thể có các mục dự phòng trong bảng đó.
t31os

2
@anu: Điều duy nhất duy trì ở mức "vĩnh viễn" nếu bạn không thực thi register_post_type()trên mỗi lần tải trang ( init) có lẽ là cấu trúc permalink (làm mới nó và nó sẽ biến mất) và các bài đăng trong cơ sở dữ liệu mà bạn có thể xóa bằng cách thực hiện DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry

Thật thú vị, tôi đã xóa mã register_post_type cho custom_post_type đó và tôi đã không thêm bất kỳ bài đăng nào vào cpt đó, nhưng nó không xóa UI quản trị viên.
anu

Hoặc tất nhiên, bây giờ tôi thử lại, nó hoạt động như các bạn đã mô tả - tức là giao diện người dùng quản trị cho cpt mới đã biến mất. Có lẽ tôi là một muppet :) Dù sao cũng là thông tin hữu ích, cảm ơn.
anu

3
Cập nhật vào tháng 2 năm 2016 - chức năng này đã được hợp nhất trong lõi cho WP 4.5.0 (sẽ được khai thác vào tháng 4).
Ricardo BRGWeb

37

Kể từ WordPress 4.5 có chức năng để làm điều đó , unregister_post_type. Thí dụ:-

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');

điều này cần phải được ưu tiên cao hơn sau đó là loại được sử dụng để đăng ký loại bài đăng nếu không nó sẽ không hoạt động
Mark Kaplun 12/07/2016

@Dhinju Divakaran hiện không xóa loại bài đăng cũ khỏi db mà tôi hiện không sử dụng.
Faiyaz Alam

nó hoạt động, đảm bảo bạn ưu tiên cao cho hành động này so với hành động được sử dụng để đăng ký loại bài đăng.
Ajith R Nair

1
Điều đáng nói là unregister_post_type()không xóa bất cứ thứ gì khỏi cơ sở dữ liệu. Nó chỉ ngăn loại bài đăng được đăng ký.
Dave Romsey

Điều này rất tốt cho tôi, nhưng hãy nhớ rằng bạn sẽ cần thông báo cho WordPress về sự thay đổi bằng cách lưu lại cấu trúc Permalink của bạn trong Cài đặt -> trang quản trị Permalinks. Mặt khác, các trang có permalinks xung đột không hoạt động chính xác.
MarkPraschan

7

Điều này làm việc cho tôi, như Rarst đã nói bằng cách sử dụng remove_action () nếu có thể.

add_action( 'after_setup_theme','remove_foundation_options', 100 );

function remove_foundation_options() {   
    remove_action( 'init', 'Orbit');    
}

5

Như t31os đã lưu ý, thật dễ dàng để loại bỏ bài đăng khỏi biến toàn cục.

Nhưng nếu bạn có nghĩa là loại bài viết không cốt lõi thì tốt hơn là bạn nên tra cứu mã đăng ký và không sử dụng remove_action()(nếu đó là mã tốt, nó nên được nối thay vì chạy trực tiếp).


2
register_post_type()không phải là một chức năng cho vay độc đáo để móc. Cách thông thường để đăng ký loại bài đăng là chạy hàm trực tiếp trong hàm được nối trên init. Loại bỏ hành động đó có thể có tác dụng không mong muốn, vì thường sẽ có chức năng khác bị loại bỏ với chức năng đó.
John P Bloch

@ John P Bloch yep, tôi biết điều đó. Đôi khi bạn kết thúc việc xây dựng lại tất cả các init để làm cho đúng, cuối cùng, nó phụ thuộc vào mã cụ thể và chất lượng / sự tỉnh táo của nó
Rarst

1

Trong phiên bản WordPress 4.5 trở lên, họ cung cấp chức năng xóa loại bài đăng (unregister_post_type). Thí dụ

function delete_post_type(){
unregister_post_type( 'jobs' );
}
add_action('init','delete_post_type');

Nó sẽ hoạt động dứt khoát.

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.