Câu hỏi tuyệt vời! WordPress gán số trang bình luận của bạn cho var truy vấn 'cpage'
được đặt khi URL của bạn /comment-page-1/
ở cuối. Vì vậy, thủ phạm của bạn là trong redirect_canonical()
chức năng, dòng 192 của /wp-includes/canoncial.php
.
if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {
Vì redirect_canonical()
hàm được đặt thành một hành động, điều chúng ta có thể làm là chèn hàm riêng của chúng ta để được gọi thay vào đó, hãy để hàm của chúng ta đặt 'cpage'
var truy vấn thành false
, gọi redirect_canonical()
và sau đó đặt 'cpage'
lại thành hàm; điều đó sẽ khiến WordPress không chuyển hướng vào bạn.
Để chèn chức năng của riêng bạn, bạn cần gọi hai hook 'init'
và 'template_redirect'
như vậy, hãy chắc chắn đặt 'init'
hook được gọi sau do_action()
lõi WordPress bên trong có thêm redirect_canonical()
:
add_action('init','yoursite_init',11); //11=lower priority
function yoursite_init() {
remove_action('template_redirect','redirect_canonical');
add_action('template_redirect','yoursite_redirect_canonical');
}
add_action('template_redirect','yoursite_redirect_canonical');
function yoursite_redirect_canonical($requested_url=null, $do_redirect=true) {
$cpage = get_query_var('cpage');
set_query_var('cpage',false);
redirect_canonical($requested_url, $do_redirect);
set_query_var('cpage',$cpage);
}
Sau đó, tất nhiên bạn cần phải làm một cái gì đó với của bạn 'cpage'
. Bạn có thể kiểm tra giá trị được trả về get_query_var('cpage')
hoặc bạn có thể thêm một móc khác để cho phép bạn tạo một mẫu cụ thể nhận xét, đó là những gì tôi đã làm. Nó sẽ thêm tìm kiếm một tệp mẫu chủ đề giống như nó thường tải nhưng [comments].php
ở cuối tên thay vì .php
, nghĩa là single[comments].php
. Lưu ý rằng tôi đặt mức độ ưu tiên cho bộ lọc này là 11; bạn có thể cần phải đặt thành một số lượng lớn hơn nữa nếu một plugin bạn sử dụng tự thêm vào sau hook của bạn:
add_filter('single_template','yoursite_single_template',11);
function yoursite_single_template($template) {
if (get_query_var('cpage'))
$template = str_replace('.php','[comments].php',$template);
return $template;
}
Và đây là bằng chứng cho thấy tất cả đều hoạt động!
(nguồn: mikechinkel.com )