plugins:
Rewrite Rule Testing
Rewrite Rules Inspector
Viết lại đường dẫn URL, trong wordpress không quá khó, hãy xem ví dụ sau.
Sửa cấu trúc đường dẫn phân trang.
Chúng ta có hàm hiển thị phân trang.
$big = 999999999;
$pagination = paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max($paged,1),
'total' =>$data->max_num_pages, //$wp_query->max_num_pages,
'prev_text'=>'<<',
'next_text'=>'>>',
) );
|
- Đổi tên slug cho chỉ số trang, ví dụ tôi muốn đổi '/page/2' thành '/trang/2'. Liên quan đến việc viết lại đường dẫn, bạn cần khai báo đường dẫn chẳng hạn mình lấy trang category làm ví dụ bạn làm tương tự với địa chỉ home, tag..
// add `author_more` to query vars
add_filter( 'init', 'add_author_more_query_var' );
function add_author_more_query_var()
{
global $wp;
$wp->add_query_var( 'chiso_trang' );
add_rewrite_rule(
'category/(.+?)/trang/?([0-9]{1,})/?$',
'index.php?category_name=$matches[1]&chiso_trang=$matches[2]',
'top'
);
}
|
Lưu ý: viết lại đường dẫn bạn cần có kiến thức về biểu thức regular expression, vì chúng ta đổi tên phân đoạn url 'page' thành 'trang' do đó bạn thay URL của wordpress:
category/(.+?)/page/?([0-9]{1,})/?$
Thành:
category/(.+?)/trang/?([0-9]{1,})/?$
Để tránh đụng độ, mình đổi cả tên tham số khác với cấu trúc category cũ, tránh gặp lỗi. Chúng ta khai báo tham số mới bởi phương thức add_query_var từ đối tượng $wp.
Để url có thể hoạt động bạn cần flush lại cấu trúc URL mới. Bằng cách lưu lại cấu trúc permalink, truy cập Settings > Permalinks nhấn lưu thay đổi.
Hoặc cách đơn giản và trực quan hơn bạn cài đặt plugin 'Rewrite Rule Testing'. Sau khi kích hoạt plugin, bạn truy cập Tools > Rewrite Testing.
1 cấu trúc URL mới chúng ta vừa tạo ở trên xuất hiện, bạn nhấn vào 'Flush Rewrite Rules'.
Lấy trang hiện tại, bạn lấy giá trị của tham số mới 'chiso_trang'.
if(get_query_var('chiso_trang')) {
$paged = get_query_var('chiso_trang');
}
|
Nếu bạn không biết biểu thức nhận dạng URL category có thể tìm trong toàn bộ cấu trúc đường dẫn của wordpress bởi hàm:
$rewrite_rules = get_option( 'rewrite_rules' );
var_dump($rewrite_rules);
|
Bây giờ quay trở lại sửa tham số 'base' của hàm tạo liên kết paginate_links, nên nhớ cấu trúc pagination của chúng ta có dạng /trang/%#%
$big = 999999999;
$base = preg_replace('#\/trang\/.+#','/trang/%#%', get_pagenum_link( $big ));
|
Hàm bây giờ sẽ đổi lại như sau:
$big = 999999999;
$base = preg_replace('#\/trang\/.+#','/trang/%#%', get_pagenum_link( $big ));
$pagination = paginate_links( array(
'base' => $base,
'format' => '/trang/%#%/',
'current' => max($paged,1),
'total' =>$wp_query->max_num_pages, //$wp_query->max_num_pages,
'prev_text'=>'<<',
'next_text'=>'>>',
) );
|