Thay đổi sên loại bài tùy chỉnh


10

Tôi đang làm việc trong một chủ đề con nên tôi không muốn chỉnh sửa tệp đang đăng ký CPT Danh mục đầu tư vào trang web của mình. Tôi đã sử dụng một plugin để thay đổi tên từ Danh mục đầu tư thành Câu chuyện, nhưng plugin không cung cấp tùy chọn cho sên.

Tôi đã thử sử dụng chức năng sau:

function change_slug_of_post_type_portfolio() {
    register_post_type('portfolio', array('rewrite' => array ('slug' => 'stories',)));
}
add_action('init', 'change_slug_of_post_type_portfolio', 20);

Nhưng nó loại bỏ hoàn toàn Danh mục đầu tư khỏi thanh bên quản trị viên WordPress.

Câu trả lời:


20

Bộ register_post_type_argslọc có thể được sử dụng để sửa đổi các đối số loại bài:

add_filter( 'register_post_type_args', 'wpse247328_register_post_type_args', 10, 2 );
function wpse247328_register_post_type_args( $args, $post_type ) {

    if ( 'portfolio' === $post_type ) {
        $args['rewrite']['slug'] = 'stories';
    }

    return $args;
}

1
Kinh ngạc. Điều này đã làm việc!
Darren Bachan

2
Điều này hiệu quả với tôi sau khi áp dụng bước bổ sung được đề cập bởi @Felipe Romero: "làm mới" Permalinks của bạn bằng cách đi tới Cài đặt> Permalinks và nhấn Lưu thay đổi.
Ralf

5

Câu trả lời @ dave-romsey không hiệu quả với tôi, PHP cứ nói với tôi Warning: Cannot use a scalar value as an array in /path/to/functions.php Vì vậy tôi đã đi tiếp array_merge.

Hoàn thành chức năng bạn cần thêm vào functions.phptệp chủ đề của con bạn :

function update_portfolios_slug( $args, $post_type ) {

    if ( 'portfolios' === $post_type ) {

        //$args['rewrite']['slug'] = 'presidentes';

        $my_args = array(
            'rewrite' => array( 'slug' => 'presidentes', 'with_front' => false )
        );

        return array_merge( $args, $my_args );
    }

    return $args;
}

add_filter( 'register_post_type_args', 'update_portfolios_slug', 10, 2 );

Sau khi tải lên mã của bạn, đừng quên "làm mới" Permalinks của bạn bằng cách truy cập Cài đặt> Permalinks và nhấn Lưu thay đổi .

Chúc mừng.


Điều này đã đưa tôi đến đích nhưng một điều cần lưu ý là array_mergedường như không hợp nhất các mảng phụ. Khi tôi gỡ bỏ slug(vì nó được cài đặt tùy chỉnh bởi plugin), nó đã xóa cơ sở nhưng cũng đặt lại thành tên sên cpt mặc định của nó. Có vẻ như nó sẽ hợp nhất rewrite'vào phần còn lại của $argsnhưng chỉ thay thế tất cả rewrite, không hợp nhất là tốt. Kết luận - thiết lập tất cả các rewritegiá trị của bạn .
rtpHarry

@rtpHarry điều này thực sự hữu ích để biết. Tôi chắc chắn rằng nó sẽ giúp đỡ người khác. Cảm ơn sự đóng góp của bạn!
Felipe Romero
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.