Home WordpressWordPress cơ bản [WordPress] Sửa lại cài đặt custom post type sau khi đăng ký – registered_post_type

[WordPress] Sửa lại cài đặt custom post type sau khi đăng ký – registered_post_type

by admincp

Trong bài trước mình có hướng dẫn cách tạo custom post type trong wordpress, tuy nhiên với những trường hợp post type được định nghĩa bởi một plugin khác và bạn không tìm thấy hàm đăng ký cho post type đó hoặc không có hàm đăng ký như bạn thường sử dụng. Bạn cần tìm một giải pháp khác.
custom_post_types

Nhiều plugin có tạo custom post types mới, có hiển thị label trong admin, bạn có thể sửa lại các cài đặt nhãn hiển thị..thiết lập private cho post type và mọi tham số của hàm register_post_type.

Tất cả những gì bạn muốn làm giống như trên chỉ sử dụng duy nhất một hook không cần cài đặt thêm bất kỳ plugin nào.

Trước tiên, tôi sẽ thử đăng ký post type ‘gs_books’ cho website.

<?php
 
add_action( 'init', 'gs_register_books_cpt' );
/**
 * Register Books Custom Post Type 
 */
function gs_register_books_cpt() {
    // change 'gs_books' to whatever your text_domain is.
    
    /** Setup labels */
    $labels = array(
        'name'               => x_( 'Books', 'gs_books' ),
        'singular_name'      => x_( 'Book', 'gs_books' ),
        'add_new'            => x_( 'Add New', 'gs_books' ),
        'all_items'          => x_( 'All Books', 'gs_books' ),
        'add_new_item'       => x_( 'Add New Book', 'gs_books' ),
        'edit_item'          => x_( 'Edit Book', 'gs_books' ),
        'new_item'           => x_( 'New Book', 'gs_books' ),
        'view_item'          => x_( 'View Book', 'gs_books' ),
        'search_items'       => x_( 'Search Books', 'gs_books' ),
        'not_found'          => x_( 'No Books found', 'gs_books' ),
        'not_found_in_trash' => x_( 'No Books found in trash', 'gs_books' ),
        'parent_item_colon'  => x_( 'Parent Book:', 'gs_books' ),
        'menu_name'          => x_( 'Amazon Books', 'gs_books' )
    );
    
    /** Setup args */
    $args = array(
        'labels'              => $labels,
        'description'         => x_( 'Amazon Books post type', 'gs_books' ),
        'public'              => true,
        'menu_position'       => 20,
        'supports'            => array( 'title', 'editor', 'excerpt', 'page-attributes', ),
        'has_archive'         => 'books',
        'rewrite'             => array( 'slug' => 'book', ),
    );
    
    /** Register Custom Post Type */
    register_post_type( 'gs_books', $args );
 
}

Đoạn code trên tạo thêm menu Amazon Books hiển thị cho custom post type ‘gs_books’. Nhưng bạn muốn đổi nhãn thành “Books” thì làm thế nào?

Sử dụng hook registered_post_type, bạn có thể sửa mọi post type có trong wordpress.

<?php
 
add_action( 'registered_post_type', 'gs_books_label_rename', 10, 2 );
/**
 * Modify registered post type menu label
 * 
 * @param string $post_type Registered post type name. 
 * @param array $args Array of post type parameters.
 */
function gs_books_label_rename( $post_type, $args ) {
    if ( 'gs_books' === $post_type ) {
        global $wp_post_types;
        $args->labels->menu_name = __( 'Books', 'gs_books' );
        $wp_post_types[ $post_type ] = $args;
    }
} 

Bên cạnh đó, các Custom Post Types được quản lý bởi biến global $wp_post_types, như vậy bạn cũng có thể sửa lại thông số cài đặt cho post type trực tiếp vào đối tượng $wp_post_types. Truy cập post type trong hook ‘init’ như sau:

<?php
 
add_action( 'init', 'gs_books_label_rename', 999 );
/**
 * Modify registered post type menu label
 * 
 */
function gs_books_label_rename() {
    global $wp_post_types;
    $wp_post_types['gs_books']->labels->menu_name = __( 'Books', 'gs_books' );
} 

Sửa post type mặc định

Với hook trên bạn có thể sử dụng để sửa lại thông tin đăng ký post type có mặc định trong wordpress như ‘post’. Tuy nhiên không hoàn toàn, một số thành phần khác được hook khác quản lý. Nếu muôn sửa toàn diện bạn cần kết hợp các hooks với nhau.
Ví dụ sau sửa được nhãn hiển thị của kiểu post.

function revcon_change_post_object() {
    global $wp_post_types;
    $labels = &$wp_post_types['post']->labels;
    $labels->name="News x";
    $labels->singular_name="News x";
    $labels->add_new = 'Add News x';
    $labels->add_new_item = 'Add News x';
    $labels->edit_item = 'Edit News x';
    $labels->new_item = 'News x';
    $labels->view_item = 'View News x';
    $labels->search_items="Search News x";
    $labels->not_found = 'No News found x';
    $labels->not_found_in_trash="No News found in Trash x";
    $labels->all_items="All News x";
    $labels->menu_name="News x";
    $labels->name_admin_bar="News x";
}
add_action( 'init', 'revcon_change_post_object' );

Kết quả: nút thêm bài viết có sửa lại nhãn, hay sửa titlebar trên trình duyệt..
modify-default-post-registered-wp

Tên menu gồm cả submenu hiển thị ở admin được quản lý bởi biến global $menu, global $submenu.
Chúng ta sửa lại vị trí menu này trong hook ‘init’ như sau:

function revcon_change_post_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'News';
    $submenu['edit.php'][5][0] = 'News';
    $submenu['edit.php'][10][0] = 'Add News';
    $submenu['edit.php'][16][0] = 'News Tags';
    echo '';
}
add_action( 'admin_menu', 'revcon_change_post_label' );

kết quả: nhãn hiển thị trước đó “Bài viết” được đổi thành “News”, xem thêm một số chuỗi trong biến $submenu và $menu nếu cần sửa thêm.
modify-default-post-registered-wp1

Để nhận được bài viết mới vui lòng đăng ký kênh kiến thức WordPress từ A-Z ở Form bên dưới. Bạn cũng có thể nhận được sự trợ giúp trên TwitterFacebook

Liên hệ

Công ty chuyên Thiết kế website uy tín nhất Miền Bắc: http://vinastar.net

Hotline tư vấn: 0989 48 3456

Nguồn: Sưu tầm trên internet

You may also like

Leave a Comment