การตอบความคิดเห็นที่ไม่ใช่เธรดพร้อมลิงก์ไปยังความคิดเห็นดั้งเดิม


10

ฉันจะอธิบายสิ่งที่ฉันพยายามทำให้สำเร็จ

ฉันต้องการแสดงความคิดเห็น (แบน / คลาสสิก) ที่ไม่มีเธรดปกติพร้อมลิงก์ตอบกลับสำหรับความคิดเห็นแต่ละรายการ เมื่อมีคนตอบความคิดเห็นความคิดเห็นตอบกลับจะสิ้นสุดที่ด้านบน (หรือด้านล่าง) เป็นความคิดเห็นล่าสุดเช่นเดียวกับในความคิดเห็นที่ไม่ใช่เธรดเริ่มต้น แต่ไม่เหมือนกับความคิดเห็นที่ไม่ใช่เธรดเริ่มต้นการตอบกลับควรแสดงลิงค์ไปที่ ความคิดเห็นเดิม / ผู้เขียน

มีวิธีแก้ปัญหาที่เสนอไปที่ฟอรัม wordpress:

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

ฉันแค่ไม่ให้มันทำงาน ฉันไม่แน่ใจว่าไฟล์ที่ผู้โพสต์วางโค้ดไว้แตกต่างกันอย่างไร ฉันพยายามใช้รหัสและขอฟังก์ชั่นเพื่อ 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 );
    } 
  }
}

ส่งคืนหน้าว่างด้วย "ในการตอบกลับชื่ออัตโนมัติ " หลังจากโหลดโพสต์ใหม่แล้วความคิดเห็นคำตอบจะแสดงขึ้นอย่างถูกต้อง แต่ไม่มีลิงก์ไปยังความคิดเห็นดั้งเดิม

ทักษะการเขียนโปรแกรมของฉันเป็นพื้นฐานจริง ๆ ดังนั้นฉันไม่มีความคิดที่ดีว่าฉันควรดำเนินการต่อไป จะขอบคุณมากสำหรับความช่วยเหลือใด ๆ


เนื้อหาhrefในรายการaต่อไปนี้คืออะไร 'ตอบกลับ' ตามเครื่องมือ 'ตรวจสอบองค์ประกอบ' ใน Chrome (หรือคล้ายกันในเบราว์เซอร์ที่คุณเลือก)
mor7ifer

ฉันได้แก้ไขปัญหาหลังจากทดลองใช้และข้อผิดพลาดมากมาย เคล็ดลับคือการได้รับรหัสในลำดับที่ถูกต้องและสถานที่ในความคิดเห็นและไฟล์ฟังก์ชั่น sใน%1$sหมายความว่าอาร์กิวเมนต์จะถือว่าเป็นและนำเสนอเป็นสตริง นี่คือคำอธิบายโดยละเอียดในคู่มือ php สำหรับฟังก์ชั่น sprintf: php.net/manual/en/function.sprintf.php
sarytash

3
คุณควรส่งสิ่งที่คุณทำเพื่อช่วยในการจัดระเบียบเว็บไซต์และช่วยเหลือทุกคนที่ติดตามคุณด้วยปัญหาเดียวกันเพื่อเอาชนะมันได้อย่างรวดเร็วและมีประสิทธิภาพ
mor7ifer

ใช่ถ้าคุณสามารถโพสต์วิธีแก้ปัญหาการทำงานที่จะดี
Borek Bernard

1
ตกลงจะรักที่จะเห็นสิ่งนี้ในการดำเนินการ
helgatheviking

คำตอบ:


4

นี่คือทางออกของฉันและไม่ใช่วิธีแก้ปัญหาที่เสนอบนฟอรัม WordPress กลายเป็นว่าค่อนข้างง่าย แต่มีขั้นตอนไม่กี่ขั้นตอน

1) ไปที่ wp-admin-> Settings-> Discussion และปิดความคิดเห็นที่เป็นเธรด สิ่งนี้จะปิดการใช้งานเธรดที่เราต้องการ แต่จะลบความสามารถให้เรา "ตอบกลับ" ความคิดเห็นเฉพาะ เราต้องนำมันกลับมา

2) เพิ่มสคริปต์ด้านล่างนี้ลงใน functions.php ของธีมของคุณหรือไปยังปลั๊กอิน

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) การพิมพ์ของการแสดงความคิดเห็นจะถูกจัดการโดยการเรียกกลับไปยังwp_list_comments TwentyEleven ใช้ฟังก์ชันtwentyeleven_comment()ในfunctions.phpนั้น หากธีมของคุณไม่มีการติดต่อกลับคุณจะต้องสร้าง โดยค่าเริ่มต้นเนื้อหาของวิธีการ start_el ของคลาส Walker_Comment ใน "wp-include / comment-template.php" ถูกนำมาใช้ fake_threaded_commentคัดลอกหรือคัดลอกโทรกลับชุดรูปแบบของฟังก์ชั่นและเปลี่ยนชื่อไป

3) ค้นหาฟังก์ชั่นwp_list_commentsในธีมของคุณcomments.phpและเปลี่ยนการติดต่อกลับ ควรมีลักษณะดังนี้:

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

4) ตอนนี้เรากำลังจะโกงนิดหน่อย ในการเรียกกลับนั้น 'fake_threaded_comment' ควรมีการเรียกใช้ฟังก์ชันcomment_reply_link เราจำเป็นต้องแก้ไขมันเพื่อที่เราจะผ่านข้อโต้แย้ง 'ความลึก' และ 'max_depth' เรากำลังตั้งค่า 'ความลึก' เป็น 1 และ max_depth เป็น 2 ซึ่งจะได้รับ "ตอบกลับ" ปุ่ม / ลิงค์กลับ

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

5) ตั้งค่าลิงค์ไปยังความคิดเห็นหลัก $commentในด้านฟังก์ชั่นการโทรกลับคุณอาจจะมีการอ้างอิงในการสังเกต $comment->comment_parentคือ ID ของความคิดเห็นตอบกลับและget_comment_link($comment->comment_parent)ให้ URL ของความคิดเห็นหลัก (ไม่ใช่มาร์กอัปจุดยึดที่สมบูรณ์) get_comment($comment->comment_parent)จะได้รับข้อมูลความคิดเห็นของผู้ปกครอง ดังนั้นบางอย่างเช่น ...

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

แค่นั้นแหละ. ตอนนี้คุณสามารถแสดงความคิดเห็นในความคิดเห็นเฉพาะ แต่เมื่อเผยแพร่ความคิดเห็นจะปรากฏขึ้นที่ส่วนท้ายหรือที่จุดเริ่มต้นของรายการความคิดเห็นขึ้นอยู่กับลำดับการโหลด

ทดสอบกับ TwentyEleven บน WordPress 3.4.1 (ล้าสมัยเล็กน้อย แต่มีอยู่แล้วบนเซิร์ฟเวอร์ dev ของฉัน) ฉันแน่ใจว่ามีสิ่งต่าง ๆ ที่ธีมหรือปลั๊กอินสามารถทำได้เพื่อทำลายสิ่งนี้ แต่ฉันไม่คิดว่าธีมหรือปลั๊กอินที่มีพฤติกรรมดีจะทำลายมันได้

นั่นคือการกระทำที่ดีของฉันสำหรับวันที่ โปรดแจ้งให้เราทราบหากมีข้อผิดพลาดเกิดขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.