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 $argsvà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.phphà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_postschư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