it-swarm.asia

الارتباط بالصفحة يعرض فقط التعليقات دون مشاركة الوالد

أرغب في عرض تعليقات النشر على صفحتهم الخاصة دون مشاركة الوالد. أعلم أنه يمكنني استخدام wp_list_comments () في صفحة النشر الفردية وتمرير وظيفة رد الاتصال لاستخدام ترميز عرض التعليقات الخاص بي. أخطط للقيام بذلك حتى أتمكن من تضمين رابط مع كل تعليق يعرض هذا التعليق على صفحته الخاصة.

إذا لم يكن هذا WordPress فسوف أستخدم:

<a href = " www.example.com/individual_comment.php?comment_id = $comment_id">View single comment</a>

... وانتزاع $ comment_id من سلسلة الاستعلام.

كيف سيكون هذا الرابط في ووردبريس؟ على سبيل المثال: ما السلسلة التي يجب تضمينها للوصول مباشرة ، دعنا نقول ، my_comments.php حيث أتصل بـ get_comment ($ comment_id) و comment_template ()؟

<a href = "<?php bloginfo('url');?>/what/goes/here?comment_id = $comment_id"<View single comment</a>
5
kevtrout

ربما يمكنك فقط إنشاء صفحة جديدة في WordPress ، ومنح تلك الصفحة قالبًا مخصصًا. بعد ذلك ، سيكون عنوان url هو ما سيكون عليه عادة الوصول إلى تلك الصفحة. يتمثل الاختلاف الوحيد في أن القالب المخصص الذي تستخدمه سيكون الإعداد لقبول التعليق_عن طريق الاستعلام ، ثم الحصول على التفاصيل الخاصة بالتعليق المحدد ، وفي رمز القالب يردد تفاصيل التعليق.

لذلك ، إذا كان لديك صفحة في وورد تسمى "تفاصيل التعليق" التي تنشئها ، فيمكنك الوصول إلى هذه الصفحة عبر http://www.domain.com/comment-details (على افتراض أنه تم تمكين الروابط الدائمة). لذا فإن رابطتك ستبدو كما يلي:

<a href = "<?php bloginfo('url');?>/comment-details?comment_id=$comment_id">View single comment</a>

سيتم إعداد صفحة "تفاصيل التعليق" لاستخدام قالب مخصص يحتوي على الكود لإخراج التفاصيل.

2
Todd Perkins

هناك العديد من الطرق المختلفة لتحقيق ذلك ، بعضها مصقول أكثر من غيرها ، وكلها عمليًا من المحتمل أن تتعارض مع الإضافات الأخرى ، لكن تجاهل كل ما هو هنا هو وسيلة قريبة جدًا من ما طلبته. :)

سيدعم هذا الحل تنسيق URL مثل التالي حيث %comment_id% هو المعرف الرقمي لتعليقك من جدول wp_comments:

http://example.com/comments/٪comment_id٪/

ستحتاج أولاً إلى تكوين إعادة كتابة عنوان URL باستخدام الشفرة التالية. نأمل أن يكون هذا أمرًا بديهيًا ولكن لا تتردد في طرح الأسئلة التالية:

$wp->add_query_var('comment_id');  // Add the "behind-the-scenes" query variable that WordPress will use
$wp_rewrite->add_rewrite_tag('%comment_id%', '([0-9]+)','comment_id=');  // Define a rewrite tag to match that assigns to the query var 
$wp_rewrite->add_permastruct('comment-page', 'comments/%comment_id%');   // Define a URL pattern to match the rewrite tag.

ستحتاج أيضًا إلى استدعاء هذا الرمز في ربط تنشيط المكون الإضافي لمسح القواعد ، أو إذا كان موقعك يمكنك فقط حفظ الروابط الدائمة في إعدادات وحدة تحكم المشرف الإعدادات> الروابط الدائمة منطقة:

global $wp_rewrite;
$wp_rewrite->flush_rules(false);

أضف بعد ذلك رابط تصفية parse_query. سيتم استدعاء هذا بعد قيام WordPress بفحص الاستعلام. إنه يختبر لمعرفة ما إذا كانت مجموعة comment_id query_var المضافة الخاصة بك وإذا كان الأمر كذلك ، فإنه يختبر لمعرفة ما إذا كنت تستخدم عنوان URL المطلوب. إذا كانت الإجابة بنعم ، فسيتم تحميل صفيف التعليقات باستخدام get_comment() من أجل تعيين المعلمة 'p' (التي يجب تعيينها على معرف منشور) على المنشور المتعلق بالتعليق. بهذه الطريقة ، عندما يقوم WordPress بتشغيل الاستعلام بأنه سيعمل بغض النظر عن على الأقل يقوم بتحميل شيء ستحتاجه في ملف قالب سمة comment.php أدناه ولن يكون لديك لتشغيل استعلام آخر في وقت لاحق عندما كنت في حاجة إليها. يخبر هذا الرمز أيضًا WordPress بتجاهل المشاركات اللزجة باستخدام خيار caller_get_posts المسمى بشكل غريب:

add_filter( 'parse_query', 'my_parse_query' );
function my_parse_query( $query ) {
    global $wp;
    if (isset($query->query['comment_id']) && substr($wp->request,0,9)=='comments/') { 
        $comment = get_comment($query->query['comment_id']);
        $query->query_vars['p'] =  $comment->comment_post_ID; // Causes the comment's post to be loaded by the query.
        $query->query_vars['caller_get_posts'] = true;  // Keeps sticky posts from invading into the top of our query.
    }
}

مع ذلك ، ستحتاج إلى ربط الكود في /wp-includes/template-loader.php باستخدام عامل التصفية template_include. سيتم استدعاء هذا بعد قيام WordPress بفحص الاستعلام وتحميل المنشور للتعليق. هنا ستقوم أولاً بالتحقق مرة أخرى من comment_id في query_var وأيضًا أن يكون عنوان URL هو العنوان الذي تريده. إذا كان الأمر كذلك ، فقد استبدلنا صفحة القالب /index.php بـ /comment.php الذي يعد ملفًا لقالب السمة الذي ستحتاج إلى إنشاؤه:

add_filter( 'template_include', 'my_template_include' );
function my_template_include( $template ) {
    global $wp,$wp_query;
    if (isset($wp_query->query['comment_id']) && substr($wp->request,0,9)=='comments/') {
        $template = str_replace('/index.php','/comment.php',$template);
    }
    return $template;
}

أخيرًا ، تحتاج إلى إنشاء ملف قالب السمة الذي اخترت الاتصال بـ /comment.php. نظرًا لأنه موضوعك ، فستريد أن تجعله يبدو كما تريد ولكن هنا مثال لتبدأ به:

<?php 
/*
 *  File: /wp-content/themes/my-theme/comment.php
 */ 
global $wp_query,$post;
$comment_id = $wp_query->query['comment_id'];
$comment = get_comment($comment_id);
$permalink = get_permalink($post->ID);
get_header();
?>
<div id="container">
    <div id="comment-<?php echo $comment_id; ?>" class="comment">
        <p>Comment by: <span class="comment-author">
            <a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></span>
            on <span class="comment-date"><?php echo date("D M jS Y", strtotime($comment->comment_date)); ?></span>
          at <span class="comment-time"><?php echo date("h:ia", strtotime($comment->comment_date)); ?></span>
        </p>
        <p>About: <a href="<?php echo $permalink; ?>"><?php echo $post->post_title; ?></a></p>
        <blockquote><?php echo $comment->comment_content; ?></blockquote>
    </div>
</div>
<?php 
get_sidebar();
get_footer();

أي أسئلة؟ فقط إسأل.

ملاحظة يمكن أن تدخل كل الشفرة التي أصفها أعلاه في ملف functions.php الخاص بالموضوع و/أو في مكون إضافي خاص بك. التحذير موجه إلى إعادة كتابة عنوان URL لقواعد التنظيف التي يجب أن تدخل في ربط تنشيط البرنامج المساعد إذا كنت ستقوم بإدراجها بدلاً من ذلك ، فلنقم بإدخالها يدويًا في قسم الروابط الدائمة بوحدة تحكم المشرف. لم أظهر كيفية تسجيل ربط التنشيط ، ولكن إذا كنت تريد معرفة المزيد ، فيمكنك القراءة عنه هنا .

15
MikeSchinkel