Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Có thể lọc CPT theo Phân loại tùy chỉnh được liên kết trong Bảng điều khiển quản trị viên WP vớistrict_manage_posts

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Trong ảnh chụp màn hình có danh sách các bài đăng CPT, với menu thả xuống chứa các thuật ngữ phân loại tùy chỉnh được liên kết có thể lọc qua nút bộ lọc bên cạnh.

Nếu bạn có nhiều bài đăng tùy chỉnh trên trang web của mình, thì đôi khi việc lọc chúng theo phân loại cụ thể sẽ dễ dàng hơn nhiều khi bạn quản lý chúng trong quản trị viên WordPress của mình

Vâng, tìm kiếm cũng ổn, nhưng có lẽ bộ lọc phân loại sẽ là thứ bạn cần?

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh
Vì vậy, ở đây chúng tôi có một "Bài học" CPT và một "Khóa học" phân loại tùy chỉnh được kết nối với nó

Dưới đây là mã cho phép thêm bộ lọc phân loại cho một phân loại cụ thể

 $taxonomy_name, 
			'hide_empty' => false
		)
	);
	// selected taxonomy from URL
	$selected = isset( $_GET[ $taxonomy_name ] ) && $_GET[ $taxonomy_name ] ? $_GET[ $taxonomy_name ] : '';
	
	if( $courses ) {
		?>
			
		

Điều đáng ghi nhớ ở đây

  • Tôi đã sử dụng đối số $post_type của hàm để tạo điều kiện, vì vậy bộ lọc sẽ chỉ được hiển thị cho một loại bài đăng cụ thể. Nhưng đối số này chỉ khả dụng kể từ WordPress 4. 4, vì vậy nếu bạn đang sử dụng phiên bản WP cũ hơn, vui lòng sử dụng global $typenow để thay thế
  • Nếu bạn không biết chèn mã vào đâu, vui lòng đọc hướng dẫn này
  • Hãy xem dòng 26, chuỗi “Tất cả các khóa học” cũng có thể được in động chẳng hạn. $taxonomy->labels->all_items nhưng tất nhiên trước tiên bạn phải lấy một đối tượng phân loại với $taxonomy = get_taxonomy( $taxonomy_name )

Và cũng có thể đơn giản hóa bộ lọc bằng cách thay đổi HTML thành wp_dropdown_categories() và tại sao không mở rộng nó sang nhiều nguyên tắc phân loại

add_action( 'restrict_manage_posts', 'rudr_taxonomy_filter' );

function rudr_taxonomy_filter( $post_type ){
	
	// let's decide about post type first
	if( 'my_post_type' !== $post_type ){
		return;
	}
	// pass multiple taxonomies as an array of their slugs
	$taxonomies = array( 'taxonomy_1', 'taxonomy_2' );
	
	// for every taxonomy we are going to do the same
	foreach( $taxonomies as $taxonomy ){
		
		$taxonomy_object = get_taxonomy( $taxonomy );
		$selected = isset( $_GET[ $taxonomy ] ) ? $_GET[ $taxonomy ] : '';
		
		wp_dropdown_categories( 
			array(
				'show_option_all' =>  $taxonomy_object->labels->all_items,
				'taxonomy'        =>  $taxonomy,
				'name'            =>  $taxonomy,
				'orderby'         =>  'name', // slug / count / term_order etc
				'value_field'     =>  'slug',
				'selected'        =>  $selected,
				'hierarchical'    =>  true,
			)
		);
	}
}

# WordPress

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Misha Rudrastyh

Chào các bạn và chào mừng đến với trang web của tôi. Trong hơn 10 năm, tôi đã cố gắng hết sức để chia sẻ miễn phí với bạn một số hướng dẫn và mẹo tuyệt vời về WordPress

Bên cạnh việc sử dụng Thẻ và Danh mục để lọc các bài đăng của mình, bạn cũng có thể sử dụng các trường tùy chỉnh và phân loại tùy chỉnh để làm điều đó. Đây là bài hướng dẫn làm với ví dụ tạo 2 filter cho 1 site bán sách với 2 tính năng khác nhau. nhà xuất bản và tác giả

Phiên bản video

Dưới đây là một số công cụ chúng ta cần

  • Meta Box để có một khung để tạo các loại bài đăng tùy chỉnh và các trường tùy chỉnh. Nó miễn phí và có sẵn trên wordpress. tổ chức;
  • Loại bài đăng tùy chỉnh MB & Phân loại tùy chỉnh. để tạo loại bài đăng tùy chỉnh có tên Sách và phân loại tùy chỉnh có tên Nhà xuất bản;
  • Trình tạo hộp meta. để có giao diện người dùng trực quan để tạo các trường tùy chỉnh cho loại bài đăng tùy chỉnh Đặt sách trong phần phụ trợ

Sử dụng phân loại tùy chỉnh

1. Tạo phân loại tùy chỉnh

Vì tôi đã có một loại bài đăng tùy chỉnh có tên là Sách, nên tôi sẽ tạo một phân loại tùy chỉnh cho nó. Nếu bạn chưa biết cách tạo custom post type tham khảo bài viết này để biết thêm chi tiết

Vào Meta Box > Taxonomies > Add New để tạo các nguyên tắc phân loại. Sau đó, chỉ cần điền thông tin cho nó

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Để gán phân loại này cho loại bài đăng Sách, hãy chuyển đến tab Loại bài đăng và đánh dấu vào tùy chọn Sách

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Nếu bạn muốn hiển thị danh sách các thuật ngữ của phân loại dưới dạng danh sách hộp kiểm trong trình chỉnh sửa bài đăng như hình bên dưới, chỉ cần chuyển đến tab Nâng cao, đánh dấu vào hộp Phân cấp

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Ngược lại nếu bạn không tích vào ô Hierarchical thì phần taxonomy sẽ hiển thị như thế này

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Sau khi xuất bản phân loại, bạn sẽ thấy nó trong menu Sách

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Bây giờ, bạn có thể tạo các thuật ngữ cho phân loại

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Sau đó, bạn sẽ thấy tất cả các điều khoản được hiển thị trong trình chỉnh sửa bài đăng

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

2. Hiển thị các thuật ngữ phân loại trên trang lưu trữ

Vào Giao diện > Trình chỉnh sửa tệp chủ đề > archive.php và thêm mã này vào nơi bạn muốn hiển thị các điều khoản trên trang lưu trữ

<div class="filter-custom-taxonomy">
$terms = get_terms( 'publisher' ) ?>
foreach ( $terms as $term ) : ?>
<a href="?getby=cat&cat= esc_attr( $term->slug ) ?>">
esc_html( $term->name ) ?>
a>
endforeach; ?>
div>

Trong đó, nhà xuất bản là con sên của phân loại được tạo. Bạn có thể thay thế nó bằng cái của riêng bạn

Đây là cách cụm từ của bạn hiển thị trong trang lưu trữ

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

3. Nhận bài viết theo các điều khoản phân loại

Vẫn trong Trình chỉnh sửa tệp chủ đề, hãy chuyển đến tệp functions.php, thêm các mã này

function yourprefix_filter_archive_by_tax( $query ) {
if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
return;
}
$tax_query = [
[
'taxonomy' => 'publisher',
'field' => 'slug',
'terms' => $_GET['cat'],
],
];
$query->set( 'tax_query', $tax_query );
return $query;
}
add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);

Trong mã này

  • yourprefix_filter_archive_by_tax. Đây là tên mà tôi đặt cho chức năng. Bạn có thể đặt tên cho nó như bạn muốn

  • if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {. Câu lệnh này kiểm tra xem người dùng có ở trang lưu trữ trên giao diện người dùng hay không và nó có chạy truy vấn chính hay không

  • $tax_query = [ ['taxonomy' => 'publisher', 'field' => 'slug', 'terms' => $_GET['cat'], ], ];. Điều này là để khai báo biến để lấy các bài viết có slug của taxonomy là publisher.

    function yourprefix_filter_archive_by_tax( $query ) {
    if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
    return;
    }
    $tax_query = [
    [
    'taxonomy' => 'publisher',
    'field' => 'slug',
    'terms' => $_GET['cat'],
    ],
    ];
    $query->set( 'tax_query', $tax_query );
    return $query;
    }
    add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
    0 => $
    function yourprefix_filter_archive_by_tax( $query ) {
    if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
    return;
    }
    $tax_query = [
    [
    'taxonomy' => 'publisher',
    'field' => 'slug',
    'terms' => $_GET['cat'],
    ],
    ];
    $query->set( 'tax_query', $tax_query );
    return $query;
    }
    add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
    1 được sử dụng để lấy sên của các điều khoản bên trong phân loại

  • function yourprefix_filter_archive_by_tax( $query ) {
    if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
    return;
    }
    $tax_query = [
    [
    'taxonomy' => 'publisher',
    'field' => 'slug',
    'terms' => $_GET['cat'],
    ],
    ];
    $query->set( 'tax_query', $tax_query );
    return $query;
    }
    add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
    2. Điều này được sử dụng để thêm chức năng gọi lại vào hook hành động.
    function yourprefix_filter_archive_by_tax( $query ) {
    if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
    return;
    }
    $tax_query = [
    [
    'taxonomy' => 'publisher',
    'field' => 'slug',
    'terms' => $_GET['cat'],
    ],
    ];
    $query->set( 'tax_query', $tax_query );
    return $query;
    }
    add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
    3 là tên của bộ lọc hook và yourprefix_filter_archive_by_tax là lệnh gọi lại để thêm vào
    function yourprefix_filter_archive_by_tax( $query ) {
    if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
    return;
    }
    $tax_query = [
    [
    'taxonomy' => 'publisher',
    'field' => 'slug',
    'terms' => $_GET['cat'],
    ],
    ];
    $query->set( 'tax_query', $tax_query );
    return $query;
    }
    add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
    3. Chúng tôi sử dụng
    function yourprefix_filter_archive_by_tax( $query ) {
    if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
    return;
    }
    $tax_query = [
    [
    'taxonomy' => 'publisher',
    'field' => 'slug',
    'terms' => $_GET['cat'],
    ],
    ];
    $query->set( 'tax_query', $tax_query );
    return $query;
    }
    add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
    3 để sửa đổi truy vấn để nhận các bài đăng mong muốn. Chúng tôi chỉ cần thêm một
    function yourprefix_filter_archive_by_tax( $query ) {
    if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
    return;
    }
    $tax_query = [
    [
    'taxonomy' => 'publisher',
    'field' => 'slug',
    'terms' => $_GET['cat'],
    ],
    ];
    $query->set( 'tax_query', $tax_query );
    return $query;
    }
    add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
    7 của nhà xuất bản để nhận các bài đăng có cụm từ đã chọn

Đây là kết quả cuối cùng. Tất cả sách của thuật ngữ đó được lọc

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Sử dụng các trường tùy chỉnh

1. Tạo trường tùy chỉnh

Trước hết, tạo một trường tùy chỉnh có tên là Tác giả cho loại bài đăng Sách. Dữ liệu được lưu trong trường tùy chỉnh này sẽ được sử dụng cho bộ lọc

Trong Bảng điều khiển dành cho quản trị viên, hãy chuyển đến Hộp meta > Trường tùy chỉnh > Thêm mới > Thêm trường. Đối với Book’s Author, mình đặt là Text field để dễ điền tên tác giả

Lưu ý bạn nên nhớ ID của trường để thêm vào code

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Di chuyển đến tab Cài đặt, chọn Vị trí làm Loại bài đăng và chọn Sách để áp dụng trường này cho loại bài đăng này

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

Đây là trường tùy chỉnh được tạo trong trình chỉnh sửa bài đăng

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

2. Hiển thị danh sách giá trị của các trường

Thêm các mã bên dưới vào

function yourprefix_filter_archive_by_tax( $query ) {
if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
return;
}
$tax_query = [
[
'taxonomy' => 'publisher',
'field' => 'slug',
'terms' => $_GET['cat'],
],
];
$query->set( 'tax_query', $tax_query );
return $query;
}
add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
8 để hiển thị các giá trị của trường tùy chỉnh

<div class="filter-custom-field">

global $wpdb;
$meta_values = $wpdb->get_col( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key='book_author'" );
foreach ( $meta_values as $meta_value ) : ?>
<a href="?getby=field&field= esc_attr( $meta_value ) ?>">
esc_html( $meta_value ) ?>
a>
endforeach ?>
div>

Trong mã này, chúng tôi sử dụng truy vấn SQL thô để nhận tất cả các giá trị của trường tùy chỉnh

function yourprefix_filter_archive_by_tax( $query ) {
if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'cat' !== $_GET['getby'] ) {
return;
}
$tax_query = [
[
'taxonomy' => 'publisher',
'field' => 'slug',
'terms' => $_GET['cat'],
],
];
$query->set( 'tax_query', $tax_query );
return $query;
}
add_action( 'pre_get_posts', ‘yourprefix_filter_archive_by_tax’);
9. Các giá trị này được lưu trữ trong bảng meta bài đăng

Bây giờ, trong trang lưu trữ, tất cả các trường tùy chỉnh đã tạo đã được lấy

Bộ lọc bài đăng WordPress theo phân loại tùy chỉnh

3. Nhận bài đăng theo giá trị của trường tùy chỉnh

Trong tệp functions.php, hãy sử dụng các mã này để đặt hành động lọc

function yourprefix_filter_archive_by_field( $query ) {
if ( is_admin() || ! $query->is_archive() || ! $query->is_main_query() || empty( $_GET['getby'] ) || 'field' !== $_GET['getby'] ) {
return;
}

$query->set( 'meta_key', 'book_author' );
$query->set( 'meta_value', $_GET['field'] );

return $query;
}
add_action( 'pre_get_posts',’yourprefix_filter_archive_by_field’);

Tương tự như lọc bài viết theo phân loại, chúng tôi sử dụng

<div class="filter-custom-field">

global $wpdb;
$meta_values = $wpdb->get_col( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key='book_author'" );
foreach ( $meta_values as $meta_value ) : ?>
<a href="?getby=field&field= esc_attr( $meta_value ) ?>">
esc_html( $meta_value ) ?>
a>
endforeach ?>
div>
1 và đặt tham số truy vấn cho truy vấn meta.
<div class="filter-custom-field">

global $wpdb;
$meta_values = $wpdb->get_col( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key='book_author'" );
foreach ( $meta_values as $meta_value ) : ?>
<a href="?getby=field&field= esc_attr( $meta_value ) ?>">
esc_html( $meta_value ) ?>
a>
endforeach ?>
div>
2,
<div class="filter-custom-field">

global $wpdb;
$meta_values = $wpdb->get_col( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key='book_author'" );
foreach ( $meta_values as $meta_value ) : ?>
<a href="?getby=field&field= esc_attr( $meta_value ) ?>">
esc_html( $meta_value ) ?>
a>
endforeach ?>
div>
3

Bộ lọc phân loại là gì?

Bộ lọc phân loại là một plugin đơn giản và linh hoạt cho phép người dùng lọc các nguyên tắc phân loại thuật ngữ theo thứ bậc bên trong các trang quản trị . Nếu bạn cần đơn giản hóa việc nghiên cứu thẻ và danh mục của mình trên các trang quản trị, plugin này sẽ giúp bạn dễ dàng hơn.

Phân loại WordPress là gì?

Phân loại là phương pháp phân loại nội dung và dữ liệu trong WordPress . Khi bạn sử dụng phân loại, bạn đang nhóm những thứ tương tự lại với nhau. Phân loại đề cập đến tổng của các nhóm đó. Như với Loại bài đăng, có một số nguyên tắc phân loại mặc định và bạn cũng có thể tạo nguyên tắc phân loại của riêng mình.