Dừng WordPress chuyển hướng bình luận-trang-1 đến trang bài viết?


8

Tôi muốn có một trang riêng cho các bình luận trên một bài đăng, sao cho trang này: /2011/02/post-name/chỉ hiển thị bài đăng và sau đó bạn nhấp vào một liên kết để xem các bình luận, đưa bạn đến một trang như thế này:/2011/02/post-name/comment-page-1/

Sau đó, tôi sẽ kiểm tra URL để xem liệu "bình luận-trang-x" có trong đó hay không và hiển thị trang khác nếu có (xóa bài đăng, vì vậy mọi người không phải di chuyển qua đó mỗi lần và cũng tạo kiểu cho mọi thứ bit khác nhau).

Điều này sẽ hoạt động, nhưng WordPress chuyển hướng comment-page-1đến trang bài đăng - tôi cần nó để giữ comment-page-1ở đó trong URL.

Điều này có thể không? Tôi làm nó như thế nào? Cảm ơn!


1
upvotet the Q. Như Mike đã nói: một người tốt :)
kaiser

Câu trả lời:


7

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') ) {

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''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!

Ảnh chụp màn hình của Mẫu trang WordPress tùy chỉnh cho Nhận xét
(nguồn: mikechinkel.com )


Ngắn .... wow! Quá tệ, chúng tôi không thể thực hiện +10 ở đây ...
kaiser

Cảm ơn đã trả lời chi tiết, nhưng một câu hỏi - tôi có thể đặt mã này ở đâu? Tôi đã thử trong hàm.php nhưng không gặp nhiều may mắn. Giả sử tôi đang sử dụng chủ đề hai mươi, tôi sẽ thêm mã vào đâu trong tệp?
Shaun

@Shaun - Số liệu. :) Một lần tôi không thêm văn bản sau vào câu trả lời của mình, tôi được gọi cho nó: "Bạn có thể thêm mã sau vào functions.phptệp của chủ đề hoặc trong .phptệp của plugin bạn có thể đang viết." Nhưng bạn nói rằng nó không hoạt động? Chính xác thì nó không làm gì? Bạn đã đặt các echo "Test"; exit;câu lệnh trong mỗi hàm để đảm bảo các hook đang bắn chưa? Bạn có plugin có thể xung đột không? Bạn đã thử thay đổi 11ở hai nơi thành 100?Bạn đã bao gồm tất cả các mã chưa? Bạn đã tạo một tệp mẫu chủ đề được gọi là single[comments].php?
MikeSchinkel

@MikeSchinkel Rực rỡ, cảm ơn. Tôi không tạo [bình luận] .php!
Shaun

@Shaun - Vui mừng tôi có thể giúp!
MikeSchinkel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.