Cách tạo loại bài đăng tùy chỉnh mà không để Wordpress gán URL


7

Hãy để tôi đưa cho bạn một kịch bản về những gì tôi đang cố gắng làm. Tôi có một loại bài đăng "khách hàng" tùy chỉnh và tôi có thể vào và "thêm khách hàng mới". Ở đây tôi thấy các trường tùy chỉnh của mình như tên, logo, đánh giá, v.v. Vấn đề là Wordpress tạo ra một URL cho việc này. Đây không phải là một trang vì vậy tôi chỉ chuyển hướng tất cả http://website.com/customers/ * của mình sang một nơi khác để không ai đi đến những trang này (bây giờ).

Có cách nào khi đăng ký các loại bài đăng tùy chỉnh của tôi trong tệp tin.php không (hoặc một số cách khác) để nói với Wordpress không tạo URL / trang thực tế cho nó? Nó thực sự chỉ là một khe để giữ dữ liệu của tôi.

Suy nghĩ của tôi có lẽ nó liên quan đến: 'ability_type' => 'post', hoặc một cái gì đó tương tự mà tôi đang tìm kiếm.

CẢM ƠN!

Câu trả lời:


4

OK, vì vậy có một số đối số register_post_typemà bạn nên sử dụng.

Các đối số quan trọng cho bạn là:

  • public- Kiểm soát cách hiển thị loại cho tác giả ( show_in_nav_menus, show_ui) và người đọc ( exclude_from_search, publicly_queryable). Nếu nó sai, thì nó exclude_from_searchsẽ đúng, publicly_queryable- sai, show_in_nav_menus- sai và show_ui- sai. Vì vậy, CPT sẽ được ẩn tất cả các cách.

  • exclude_from_search- Có loại trừ bài viết có loại bài đăng này khỏi kết quả tìm kiếm ở mặt trước không. Mặc định: giá trị đối lập của publicđối số.

  • publicly_queryable- Liệu các truy vấn có thể được thực hiện ở mặt trước như là một phần của parse_Vquest (). Mặc định: giá trị của publicđối số. Vì vậy, chúng tôi phải et nó đúng.

  • show_ui - Có tạo giao diện người dùng mặc định để quản lý loại bài đăng này trong quản trị viên hay không. Mặc định: giá trị của publicđối số.

  • rewrite- Kích hoạt việc xử lý viết lại cho loại bài đăng này. Để ngăn viết lại, đặt thành false. Mặc định: true và sử dụng $ post_type làm sên. Vì vậy, chúng ta phải đặt nó sai.

Dưới đây bạn có thể tìm thấy mã:

$labels = array( /*removed for example*/ );

$args = array(
    'labels'             => $labels,
    'description'        => __( 'Description.', 'your-plugin-textdomain' ),
    'public'             => false,
    'show_ui'            => true,
    'rewrite'            => false,
    'capability_type'    => 'post',
    'hierarchical'       => false,
    /* ... Any other arguments like menu_icon, and so on */
    'supports'           => array( /* list of supported fields */ )
);

register_post_type( 'customer', $args );

Trình tạo này có thể hữu ích, nếu bạn không muốn tìm hiểu tất cả các đối số: https://generatewp.com/post-type/

Và danh sách tất cả các đối số, như mọi khi, bạn có thể tìm thấy trong Codex: https://codex.wordpress.org/Function_Reference/register_post_type


Cám ơn phản hồi của bạn!! Điều này thực sự rất gần với những gì tôi đọc trước đó trên một chủ đề khác. Tôi đã làm theo các bước tương tự, tôi sẽ bỏ câu hỏi của mình xuống vì về mặt kỹ thuật tôi đã tìm thấy câu trả lời rồi nhưng tôi thích nghe người khác tiếp cận.
danielle

1
Tất cả các bạn đều đúng và rất hữu ích nhưng tôi chọn bạn là câu trả lời đúng chỉ vì bạn đã nói những gì người khác nói cộng thêm một số điều nữa. Cảm ơn một lần nữa
danielle

6

Một trong những tham số cho register_post_type()publicly_queryable. Đơn giản chỉ cần đặt thành sai để ngăn chặn việc tạo trang cá nhân. Bạn cũng có thể muốn loại trừ khỏi tìm kiếm, vv

https://codex.wordpress.org/Function_Reference/register_post_type

Trong ví dụ được đưa ra trong WP Codex, bạn có thể thấy tham số này được đặt thành true. Tùy thuộc vào nhu cầu chính xác của bạn, bạn có thể ẩn loại bài đăng hoàn toàn với thông số publichoặc mức độ kiểm soát mức độ hiển thị với các tham số rõ ràng, chẳng hạn như pas publicly_queryable.

https://codex.wordpress.org/Function_Reference/register_post_type#Example

Mã ví dụ từ WP Codex

add_action( 'init', 'codex_book_init' );
/**
 * Register a book post type.
 *
 * @link http://codex.wordpress.org/Function_Reference/register_post_type
 */
function codex_book_init() {
    $labels = array( /*removed for example*/ );

    $args = array(
        'labels'             => $labels,
        'description'        => __( 'Description.', 'your-plugin-textdomain' ),
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'book' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
    );

    register_post_type( 'book', $args );
}

Lưu trữ loại bài đăng Điều quan trọng cần lưu ý ở đây là cài đặt công khai_queryable thành false cũng sẽ ẩn trang lưu trữ của loại bài đăng đó. Trong mã ví dụ ở trên cho loại bài đăng book, trang lưu trữ tại https://yourdomain.com/book cũng sẽ bị xóa.


Tôi khá chắc chắn rằng mã bạn đã đăng ở trên không thực hiện được mẹo. Nó sẽ đăng ký CPT với 'cuốn sách' dưới dạng sên.
Krzysiek Dróżdż

Đúng rồi. Đây là mã mẫu từ tài liệu. Nó chỉ đơn giản là một ví dụ về việc sử dụng đối số.
jdm2112

1

sẽ lặp lại những gì @ jdm2112 đã nói (hy vọng) tiếng Anh rõ ràng hơn và không có mã nào cả;)

Về cơ bản những gì bạn đang tìm kiếm là một CPT tư nhân. Loại CPT này hữu ích cho việc lưu trữ dữ liệu trong DB theo cách tương tự với các bài đăng mang lại cho bạn lợi thế (tùy chọn) vẫn nhận được cùng loại giao diện quản trị và sử dụng cùng API truy vấn, meta và thuật ngữ trên nó.

"Riêng tư" thực sự là một từ gây hiểu lầm, nó không phải là nội dung riêng tư, nhưng wordpress đó sẽ không cố gắng tự xuất bản nó ở mặt trước. Bạn có thể, nếu bạn muốn, hiển thị nội dung ở mặt trước nhưng bạn sẽ cần phải tự viết mã cho nó. Trong trường hợp cụ thể của bạn, một cách đơn giản để làm điều đó là tạo một mẫu trang hiển thị tất cả các bài đăng trong CPT đó. Bằng cách này, bạn có quyền kiểm soát linh hoạt về địa chỉ của trang và bất kỳ SEO nào bạn có thể muốn làm trong đó.

Chỉ cần lưu ý rằng có rất nhiều chức năng mặc định mà bạn có thể cần phải phát minh lại, và có thể đơn giản hơn khi chỉ có CPT công khai và có một loại "xem thêm khách hàng" để hành động trên các trang CPT duy nhất.


Cảm ơn!!! Tôi thực sự thích mã bởi vì nó thích loại bài đăng tùy chỉnh của tôi và cho tôi thấy các giá trị tương tự. Chỉ cần tốt đẹp để có một đại diện trực quan. Và vâng tôi nghĩ điều bạn muốn nói là đặt công khai thành sai thay vì đúng. Tất cả các loại bài đăng của tôi đều được tạo, thực tế là chúng tôi không sử dụng URL nên tôi chỉ muốn bỏ nó để tôi có thể ngừng viết chuyển hướng (URL đi đến một trang tào lao vì không có mẫu nào được đặt)
danielle
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.