bạn CANT có TRANG và LOẠI POST TÙY CHỈNH có cùng tên
Có thể cây nhiều năm trước là không thể, nhưng bây giờ bạn CÓ THỂ.
Đầu tiên, thêm dòng này $args
vào loại bài đăng của bạn:
'has_archive' => false,
'rewrite' => array(
'slug' => 'your slug', // if you need slug
'with_front' => false,
),
Thứ hai, trong functions.php
hành động thêm:
add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
global $wp_post_types;
foreach ($wp_post_types as $wp_post_type) {
if ($wp_post_type->_builtin) continue;
if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
$slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
$page = get_page_by_slug($slug);
if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
}
}
}
function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
global $wpdb;
$page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );
return ($page ? get_post($page, $output) : NULL);
}
Đừng quên tuôn ra các quy tắc trong bảng điều khiển.
pre_get_posts
chưa? Sau đó, bạn có thể sử dụng mã phân trang được xây dựng thay vì tự viết và bạn có thể đơn giản hóa thành một vòng lặp tiêu chuẩn