Bạn muốn xác định phân loại và loại bài đăng tùy chỉnh trong các chức năng của mình. php sử dụng các hàm register_taxonomy[]
và register_post_type[]
Đây là một ví dụ nó có thể trông như thế nào
/****************************************
* Add custom taxonomy for Toys *
****************************************/
add_action['init', 'toys_categories_register'];
function toys_categories_register[] {
$labels = array[
'name' => 'Toys Categories',
'singular_name' => 'Toys Category',
'search_items' => 'Search Toys Categories',
'popular_items' => 'Popular Toys Categories',
'all_items' => 'All Toys Categories',
'parent_item' => 'Parent Toy Category',
'edit_item' => 'Edit Toy Category',
'update_item' => 'Update Toy Category',
'add_new_item' => 'Add New Toy Category',
'new_item_name' => 'New Toy Category',
'separate_items_with_commas' => 'Separate toys categories with commas',
'add_or_remove_items' => 'Add or remove toys categories',
'choose_from_most_used' => 'Choose from most used toys categories'
];
$args = array[
'label' => 'Toys Categories',
'labels' => $labels,
'public' => true,
'hierarchical' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'args' => array[ 'orderby' => 'term_order' ],
'rewrite' => array[ 'slug' => 'toys', 'with_front' => true, 'hierarchical' => true ],
'query_var' => true
];
register_taxonomy[ 'toys_categories', 'toys', $args ];
}
/*****************************************
* Add custom post type for Toys *
*****************************************/
add_action['init', 'toys_register'];
function toys_register[] {
$labels = array[
'name' => 'Toys',
'singular_name' => 'Toy',
'add_new' => 'Add New',
'add_new_item' => 'Add New Toy',
'edit_item' => 'Edit Toy',
'new_item' => 'New Toy',
'view_item' => 'View Toy',
'search_items' => 'Search Toys',
'not_found' => 'Nothing found',
'not_found_in_trash' => 'Nothing found in Trash',
'parent_item_colon' => ''
];
$args = array[
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'has_archive' => true,
'rewrite' => array[ 'slug' => 'toys', 'with_front' => true ],
'capability_type' => 'post',
'menu_position' => 6,
'supports' => array['title', 'excerpt', 'editor','thumbnail'] //here you can specify what type of inputs will be accessible in the admin area
];
register_post_type[ 'toys' , $args ];
}
Sau đó, bạn cần truy cập back-end của quản trị viên và bạn sẽ thấy Đồ chơi ngay bên dưới Bài đăng, hãy tạo danh mục bạn muốn trong 'Danh mục Đồ chơi'
Bài viết này đề cập đến cách thêm các nguyên tắc phân loại hiện có vào loại bài đăng tùy chỉnh và cách làm cho loại bài đăng tùy chỉnh đó hiển thị trong các trang lưu trữ của các nguyên tắc phân loại đó
Chúng tôi sẽ lấy một ví dụ từ công việc của chúng tôi. Gần đây, chúng tôi đã ra mắt các Khóa học, một cách mới để chúng tôi giảng dạy kỹ lưỡng các chủ đề trong quá trình phát triển WordPress. Hiện tại, các khóa học chỉ là các bài đăng cũ thông thường, nhưng chúng tôi đang chuyển đổi chúng thành loại bài đăng tùy chỉnh của riêng họ. Điều này có một số lợi thế, chẳng hạn như giúp dễ dàng có trang lưu trữ “Chỉ dành cho các khóa học”
Tuy nhiên, mặc dù chúng sẽ là loại bài đăng tùy chỉnh của riêng chúng, nhưng chúng tôi muốn các Khóa học sử dụng ba nguyên tắc phân loại WordPress hiện có của chúng tôi
category
, phân loại danh mục mặc định của WordPress,post_tags
, phân loại thẻ mặc định của WordPress vàdifficulty
, một phân loại độ khó tùy chỉnh mà chúng tôi đã tự đăng ký
Hơn nữa, chúng tôi muốn các Khóa học kết hợp với các loại bài đăng khác của chúng tôi trong các trang lưu trữ. Ví dụ: nếu bạn nhấp vào “Trung cấp” để tìm tất cả nội dung của chúng tôi ở độ khó Trung cấp, chúng tôi muốn các Khóa học Trung cấp của chúng tôi hiển thị ngay bên cạnh các bài báo Trung cấp thông thường của chúng tôi
Điều này hóa ra có một số bước để nó. Vì vậy, trong tuần này, chúng ta sẽ đề cập đến cách thêm các phân loại hiện có vào loại bài đăng tùy chỉnh và cách làm cho loại bài đăng tùy chỉnh đó hiển thị trong các trang lưu trữ của phân loại đó
Một điều nữa trước khi chúng ta bắt đầu. Nếu bạn đang muốn học cách phát triển WordPress, chúng tôi đã viết hướng dẫn tốt nhất về nó
Cách tốt nhất để học phát triển WordPress
Hãy đứng dậy và chạy ngay hôm nay
Đây là những gì họ phải nói
“Tôi nghĩ rằng bất kỳ ai quan tâm đến việc học phát triển WordPress CẦN khóa học này. Xem video giống như một loạt đèn được bật. ” -Jason, nhà phát triển WordPress
“Các khóa học khác mà tôi đã thử gần như luôn thiếu giải thích rõ ràng về lý do tại sao WordPress làm mọi thứ theo một cách nhất định hoặc cách mọi thứ hoạt động cùng nhau. Up and Running làm được tất cả những điều này và mọi thứ đều được giải thích rõ ràng và bằng ngôn ngữ dễ hiểu. ” -Caroline, WordPress freelancer
Đứng dậy và chạy ngay
Bây giờ, hãy đi sâu vào mã để thêm phân loại hiện có vào loại bài đăng tùy chỉnh WordPress
Mật mã
Dưới đây là mã hoàn chỉnh chúng ta sẽ xem xét ngày hôm nay. Đây sẽ là tệp tốt nhất trong một plugin độc lập. Để biết thêm về cách đăng ký plugin, hãy xem bài viết của chúng tôi về chủ đề này
// 1. Register post type
add_action[ 'init', 'wpshout_register_cpts' ];
function wpshout_register_cpts[] {
$args = array[
'public' => true,
'label' => 'Courses',
'has_archive' => true,
'rewrite' => array[ 'slug' => 'courses' ],
'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
],
];
register_post_type[ 'course', $args ];
}
// 2. Add existing taxonomies to post type
add_action[ 'init', 'wpshout_add_taxonomies_to_courses' ];
function wpshout_add_taxonomies_to_courses[] {
register_taxonomy_for_object_type[ 'category', 'course' ];
register_taxonomy_for_object_type[ 'difficulty', 'course' ];
register_taxonomy_for_object_type[ 'post_tag', 'course' ];
}
// 3. Make Courses posts show up in archive pages
add_filter[ 'pre_get_posts', 'wpshout_add_custom_post_types_to_query' ];
function wpshout_add_custom_post_types_to_query[ $query ] {
if[
is_archive[] &&
$query->is_main_query[] &&
empty[ $query->query_vars['suppress_filters'] ]
] {
$query->set[ 'post_type', array[
'post',
'course'
] ];
}
}
Điểm nổi bật lớn là việc thêm các nguyên tắc phân loại vào các loại bài đăng tùy chỉnh yêu cầu ba bước riêng biệt
Đoạn mã trên thực hiện ba việc, theo thứ tự
- Đăng ký loại bài đăng tùy chỉnh “Khóa học” với các thuộc tính cần thiết
- Thêm ba nguyên tắc phân loại hiện có—
category
,post_tag
và nguyên tắc phân loại tùy chỉnh của chúng tôidifficulty
—vào loại bài đăng của Khóa học - Làm cho các Khóa học hiển thị trong các trang lưu trữ, để tìm kiếm theo danh mục, độ khó, v.v. sẽ bao gồm các kết quả của Khóa học
Không có phần nào trong số ba phần này là đặc biệt khó—biết rằng bạn cần phải thực hiện cả ba phần đó là bài học lớn đối với tôi và hy vọng là đối với bạn. Hãy xem xét từng phần chi tiết hơn
1. Đăng ký các khóa học với register_post_type[]
Phần này sử dụng WordPress
'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
]
0 hook để chạy lệnh gọi tới register_post_type[]
với một số đối số được đưa ra bởi một mảng 'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
]
2. Nếu bạn chưa bao giờ đăng ký loại bài đăng tùy chỉnh trước đây, hãy xem mô tả của Codex về chính register_post_type[]
. Thiết lập 'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
]
2-và-một-chức-năng-trong-trong-một-WordPress-hook hoàn toàn cốt lõi đối với WordPress và register_post_type[]
không quá khó hiểu nếu bạn đã quen thuộc với mô hình đóMột điều tôi muốn đề cập là việc bao gồm thủ công một tham số trong
'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
]
2 là cần thiết đối với chúng tôi. Nếu bạn bỏ nó hoàn toàn khỏi 'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
]
2, loại bài đăng tùy chỉnh của bạn có một số thuộc tính theo mặc định, nhưng không có một số [như đoạn trích] mà chúng tôi muốn. Và nếu bạn chỉ bao gồm 'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
]
9, thì nó sẽ tắt mọi thứ khác—chẳng hạn như tiêu đề bài đăng, tác giả hoặc nội dung. Vì vậy, chúng tôi cảm thấy cần phải liệt kê mọi tính năng tiêu chuẩn mà chúng tôi muốn các Khóa học của mình có'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
]
2. Thêm các nguyên tắc phân loại hiện có vào loại bài đăng tùy chỉnh của khóa học
Phần đơn giản này sử dụng ba lệnh gọi tới
function wpshout_add_custom_post_types_to_query[ $query ] {
if[
// If we're trying to generate an archive page, and
is_archive[] &&
// If the current query is the page's main query, and
$query->is_main_query[] &&
// If the query hasn't already been modified to ignore
// filters like the one we're writing
empty[ $query->query_vars['suppress_filters'] ]
] {
// Then set the query to fetch posts of type
// both "post" and "course"
$query->set[ 'post_type', array[
'post',
'course'
] ];
}
}
0 để đăng ký các nguyên tắc phân loại category
, post_tag
và difficulty
cho các khóa học. Ba chuỗi chữ thường này là "sên" cho phân loại Danh mục, Thẻ và Độ khó. Chúng tôi phải tra cứu chúng cho Danh mục và Thẻ [vì đó là các nguyên tắc phân loại mặc định của WordPress] và chúng tôi biết rằng chúng tôi đã đưa cho Độ khó con sên difficulty
khi chúng tôi đăng ký nóKết quả cuối cùng trông như thế này
Nhấp để phóng to
Tín dụng cho Pippin Williamson cho mã cơ bản của phần này. Xin lưu ý, Pippin khuyên bạn nên sử dụng hook
function wpshout_add_custom_post_types_to_query[ $query ] {
if[
// If we're trying to generate an archive page, and
is_archive[] &&
// If the current query is the page's main query, and
$query->is_main_query[] &&
// If the query hasn't already been modified to ignore
// filters like the one we're writing
empty[ $query->query_vars['suppress_filters'] ]
] {
// Then set the query to fetch posts of type
// both "post" and "course"
$query->set[ 'post_type', array[
'post',
'course'
] ];
}
}
5 thay vì hook 'supports' => array[
'title',
'editor',
'author',
'thumbnail',
'excerpt',
'comments',
'revisions'
]
0 nếu bạn đang thực hiện việc này trong plugin; 3. Sử dụng function wpshout_add_custom_post_types_to_query[ $query ] {
if[
// If we're trying to generate an archive page, and
is_archive[] &&
// If the current query is the page's main query, and
$query->is_main_query[] &&
// If the query hasn't already been modified to ignore
// filters like the one we're writing
empty[ $query->query_vars['suppress_filters'] ]
] {
// Then set the query to fetch posts of type
// both "post" and "course"
$query->set[ 'post_type', array[
'post',
'course'
] ];
}
}
8 để thêm khóa học vào trang lưu trữ
function wpshout_add_custom_post_types_to_query[ $query ] {
if[
// If we're trying to generate an archive page, and
is_archive[] &&
// If the current query is the page's main query, and
$query->is_main_query[] &&
// If the query hasn't already been modified to ignore
// filters like the one we're writing
empty[ $query->query_vars['suppress_filters'] ]
] {
// Then set the query to fetch posts of type
// both "post" and "course"
$query->set[ 'post_type', array[
'post',
'course'
] ];
}
}
Phần cuối cùng này rất cần thiết nếu bạn muốn người dùng thực sự có thể nhấp vào, ví dụ: “Trung cấp” và xem danh sách tất cả các bài đăng và khóa học Trung cấp. Nó sử dụng một chức năng nối vào móc
function wpshout_add_custom_post_types_to_query[ $query ] {
if[
// If we're trying to generate an archive page, and
is_archive[] &&
// If the current query is the page's main query, and
$query->is_main_query[] &&
// If the query hasn't already been modified to ignore
// filters like the one we're writing
empty[ $query->query_vars['suppress_filters'] ]
] {
// Then set the query to fetch posts of type
// both "post" and "course"
$query->set[ 'post_type', array[
'post',
'course'
] ];
}
}
9 quan trọng của WordPress [chúng tôi sẽ sớm giải thích chi tiết. ] để sửa đổi truy vấn trên mọi trang lưu trữ sao cho bao gồm cả category
0 và category
1Đây là mã của hàm một lần nữa, với logic được viết chi tiết hơn dưới dạng nhận xét
function wpshout_add_custom_post_types_to_query[ $query ] {
if[
// If we're trying to generate an archive page, and
is_archive[] &&
// If the current query is the page's main query, and
$query->is_main_query[] &&
// If the query hasn't already been modified to ignore
// filters like the one we're writing
empty[ $query->query_vars['suppress_filters'] ]
] {
// Then set the query to fetch posts of type
// both "post" and "course"
$query->set[ 'post_type', array[
'post',
'course'
] ];
}
}
Kết quả cuối cùng [trên trang dàn dựng mà tôi giữ cục bộ] trông giống như
Nhấp để phóng to
[Tín dụng cho mẫu mã cơ bản này cho CSS-Tricks. Lưu ý rằng chúng tôi đã thay đổi séc category
2 của họ thành chỉ category
3, bao gồm tất cả các loại trang lưu trữ, bao gồm, ví dụ: trang tác giả. ]
Bây giờ bạn đã biết cách thêm phân loại vào các loại bài đăng tùy chỉnh
Cảm ơn vì đã đọc. Một lần nữa, mỗi bước trong quy trình này hơi đơn giản, nhưng biết rằng bạn phải thực hiện cả ba bước là một khoảnh khắc “Aha” khi tôi tự mình làm điều này