Trả lời bình luận không có chủ đề với liên kết đến nhận xét ban đầu


10

Tôi sẽ giải thích những gì tôi đang cố gắng thực hiện.

Tôi muốn có các bình luận không phân luồng (phẳng / cổ điển) thường xuyên với một liên kết trả lời cho mỗi bình luận. Khi ai đó trả lời một bình luận, bình luận trả lời sẽ kết thúc ở trên cùng (hoặc dưới cùng) là bình luận mới nhất giống như trong các bình luận không có luồng mặc định, nhưng không giống như bình luận không có luồng mặc định, phản hồi sẽ hiển thị một liên kết đến các bình luận / tác giả ban đầu.

Có một giải pháp được đề xuất tại diễn đàn wordpress:

http://wordpress.org/support/topic/reply-to-link-for- syncological-non-threaded-comments

Tôi không làm cho nó hoạt động. Tôi không chắc chắn trong tập tin nào người đăng đang đặt các đoạn mã khác nhau. Tôi đã cố gắng sử dụng mã và móc một hàm vào comment_post:

add_action('comment_post', 'print_reply_link', 10, 2);

function print_reply_link( $comment_id, $approved ){
  if( $approved ){
    $comment = get_comment( $comment_id );
    if ( $comment->comment_parent ) {
    $parent = get_comment( $comment->comment_parent );
    $parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
    printf( ' in reply to <a href="%1$s">%2$s</a>', $parent_link, $parent->comment_author );
    } 
  }
}

Điều này trả về một trang trống với "trả lời authorname ". Sau khi tải lại bài đăng, một bình luận trả lời hiển thị chính xác nhưng không có bất kỳ liên kết nào đến bình luận ban đầu

Kỹ năng mã hóa của tôi thực sự rất cơ bản vì vậy tôi không biết nên tiến hành như thế nào. Sẽ rất biết ơn cho bất kỳ sự giúp đỡ.


Nội dung của là gì hreftrong ađó sau 'trong bài trả lời to` theo 'công cụ Kiểm tra Element' trong Chrome (hoặc tương tự trong trình duyệt của bạn lựa chọn)?
mor7ifer

Tôi đã giải quyết vấn đề sau rất nhiều thử nghiệm và sai sót. Bí quyết là lấy các đoạn mã theo đúng thứ tự và vị trí trong các tệp nhận xét và hàm. Các strong %1$sphương tiện mà đối số được coi là và trình bày như là một chuỗi. Này được giải thích một cách chi tiết trong cuốn hướng dẫn php cho chức năng sprintf: php.net/manual/en/function.sprintf.php
sarytash

3
Bạn nên gửi những gì bạn đã làm như một giải pháp để giúp giữ cho trang web được tổ chức và để giúp bất kỳ ai đến sau bạn với cùng một vấn đề để khắc phục nó một cách nhanh chóng và hiệu quả.
mor7ifer

Có nếu bạn có thể đăng một giải pháp làm việc sẽ là tuyệt vời.
Borek Bernard

1
đồng ý, rất thích nhìn thấy điều này trong hành động.
đạp xe vào

Câu trả lời:


4

Đây là giải pháp của tôi chứ không phải giải pháp đề xuất được đề xuất trên các diễn đàn WordPress. Nó hóa ra khá dễ dàng, nhưng bao gồm một vài bước.

1) Truy cập wp-admin-> Cài đặt-> Thảo luận và tắt nhận xét theo luồng. Điều này sẽ vô hiệu hóa luồng, mà chúng tôi muốn, nhưng cũng sẽ loại bỏ khả năng chúng tôi "trả lời" một nhận xét cụ thể. Chúng tôi phải đặt lại.

2) Thêm tập lệnh bên dưới vào hàm.php của chủ đề hoặc vào plugin.

function load_script_for_fake_threading() {
    if (is_singular()) wp_enqueue_script('comment-reply');
}
add_action('wp_enqueue_scripts','load_script_for_fake_threading');

3) Việc in các bình luận được xử lý bằng cách gọi lại wp_list_comments . TwentyEleven sử dụng chức năng twentyeleven_comment()trong nó functions.php. Nếu chủ đề của bạn không có cuộc gọi lại, bạn sẽ cần tạo một cuộc gọi. Theo mặc định, nội dung của phương thức start_el của lớp Walker_Ver trong "wp-gồm / comment-template.php" được sử dụng. Sao chép hoặc sao chép cuộc gọi lại của chủ đề và đổi tên hàm thành fake_threaded_comment.

3) Tìm hàm wp_list_comments trong chủ đề của bạn comments.phpvà thay đổi cuộc gọi lại. Nó sẽ trông giống như:

wp_list_comments(array('callback'=>'fake_threaded_comment'));

4) Bây giờ chúng ta sẽ gian lận một chút. Trong cuộc gọi lại đó, 'fake_threaded_comment', cần có một cuộc gọi đến hàm comment_Vply_link . Chúng ta cần chỉnh sửa nó để chúng ta chuyển các đối số 'độ sâu' và 'max_depth' được mã hóa cứng. Chúng tôi đang đặt 'độ sâu' thành 1 và max_depth thành 2. Điều này sẽ đưa nút / liên kết "Trả lời" của chúng tôi trở lại.

comment_reply_link( 
  array_merge( 
    $args, 
      array( 
        'reply_text' => __( 'Reply <span>&darr;</span>', 
        'themetextdomainname' ), 
        'depth' => 1, 
        'max_depth' => 2 
)));

5) Thiết lập liên kết đến nhận xét phụ huynh. Trong chức năng gọi lại, bạn có thể nhận thấy các tham chiếu đến $comment. $comment->comment_parentlà ID của nhận xét được trả lời và get_comment_link($comment->comment_parent)đưa ra URL của nhận xét chính (không phải là đánh dấu neo hoàn chỉnh). get_comment($comment->comment_parent)sẽ nhận được dữ liệu bình luận của phụ huynh. Vì vậy, một cái gì đó như ...

$pcom = get_comment($comment->comment_parent);
echo '<a href="'.get_comment_link($comment->comment_parent).'">This is a reply to '.$pcom->comment_author.'</a>';

Đó là nó. Bây giờ bạn có thể nhận xét về các nhận xét cụ thể nhưng sau khi xuất bản, nhận xét sẽ hiển thị ở cuối hoặc ở đầu danh sách nhận xét tùy thuộc vào thứ tự tải.

Đã thử nghiệm với TwentyEleven trên WordPress 3.4.1 (hơi lỗi thời nhưng nó đã có trên máy chủ dev của tôi). Tôi chắc chắn có những điều mà chủ đề hoặc plugin có thể làm để phá vỡ điều này, nhưng tôi không nghĩ rằng một chủ đề hay plugin hoạt động tốt sẽ phá vỡ nó.

Đó là hành động tốt của tôi trong ngày. Xin vui lòng cho tôi biết nếu có điều gì sai.

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.