Đăng ký loại bài đăng tùy chỉnh với phân loại WordPress

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()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

  1. category, phân loại danh mục mặc định của WordPress,
  2. post_tags, phân loại thẻ mặc định của WordPress và
  3. 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

Đăng ký loại bài đăng tùy chỉnh với phân loại WordPress
Đăng ký loại bài đăng tùy chỉnh với phân loại WordPress
Up and Running là khóa học “tìm hiểu phát triển WordPress” hoàn chỉnh của chúng tôi. Giờ đây, trong Phiên bản thứ ba được cập nhật và mở rộng, nó đã giúp hàng trăm người mua hài lòng tìm hiểu cách phát triển WordPress một cách nhanh chóng, thông minh và kỹ lưỡng

Đâ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ự

  1. Đă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
  2. 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ôi difficulty—vào loại bài đăng của Khóa học
  3. 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_tagdifficulty 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

Đăng ký loại bài đăng tùy chỉnh với phân loại WordPress
Đăng ký loại bài đăng tùy chỉnh với phân loại WordPress

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ữ

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ả category0 và category1

Đâ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ư

Đăng ký loại bài đăng tùy chỉnh với phân loại WordPress
Đăng ký loại bài đăng tùy chỉnh với phân loại WordPress

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 category2 của họ thành chỉ category3, 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

Sự khác biệt giữa loại bài đăng tùy chỉnh và phân loại trong WordPress là gì?

Sự khác biệt giữa trường tùy chỉnh và phân loại là gì? . Vì vậy, sự khác biệt chính giữa các trường tùy chỉnh và phân loại ở đây là nhóm. custom fields store arbitrary extra information for a post, while taxonomies are ways to group posts together. So, the main difference between custom fields and taxonomies here is grouping.

Các loại bài tùy chỉnh và phân loại là gì?

Các loại bài đăng tùy chỉnh và phân loại là điều khiến WordPress trở thành một Hệ thống quản lý nội dung (CMS) chứ không chỉ là một nền tảng viết blog . Với chúng, bạn có thể thêm các loại bài đăng của riêng mình, sau đó bạn có thể hiển thị loại bài đăng này bằng các tệp mẫu được nhắm mục tiêu.