it-swarm.asia

Ana Gönderi Olmadan Yalnızca Yorumlar Gösterme Sayfasına Bağlama

Gönderi yorumlarını üst yazı olmadan kendi sayfasında göstermek istiyorum. Tek yorum sayfasında wp_list_comments () kullanabileceğimi ve kendi yorum görüntüleme işaretlememi kullanmak için bir geri çağırma işlevini geçirebileceğimi biliyorum. Bunu yapmayı planlıyorum, böylece bu yorumu kendi sayfasında gösterecek olan her yoruma bir bağlantı ekleyebiliyorum.

Bu WordPress olmasaydı kullanırdım:

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

... ve sorgu dizesindeki $ comment_id'yi al.

Bu bağlantı WordPress'te nasıl görünür? yani: hangi dizgiyi doğrudan almak için ekleyeyim, diyelim ki, my_comments.php nerede get_comment ($ comment_id) ve comment_template () çağırırım?

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

WordPress'te büyük olasılıkla yeni bir sayfa oluşturabilir ve bu sayfaya özel bir şablon verebilirsiniz. Ardından, URL sadece normalde bu sayfaya ulaşmak için ne olursa olsun olacaktır. Tek fark, kullandığınız özel şablonun querystring yoluyla comment_id'i kabul etmek için ayarlanması ve ardından belirli yorum için ayrıntıları alması ve şablon kodunda yorumun ayrıntılarını yansıtmasıdır.

Bu nedenle, oluşturduğunuz "Yorum Ayrıntıları" adlı wordpress'te bir sayfanız varsa, o sayfaya http://www.domain.com/comment-details (kalıcı bağlantıların etkin olduğunu varsayarsak). Böylece bağlantınız şöyle görünür:

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

"Yorum Ayrıntıları" sayfası, ayrıntıları dağıtmak için kod içeren özel bir şablon kullanmak üzere kurulur.

2
Todd Perkins

Bunu başarmanın, bazıları diğerlerinden daha cilalı ve pratik olarak hepsinin diğer eklentilerle çakışma potansiyeli olan sayısız farklı yolu vardır; :)

Bu çözüm, aşağıdaki gibi bir URL biçimini destekleyecektir; burada %comment_id%, wp_comments tablosundaki yorumunuzun sayısal kimliğidir:

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

Öncelikle, aşağıdaki kodu kullanarak URL yeniden yazmanızı yapılandırmanız gerekir. Umarım makul bir şekilde kendi kendine açıklayıcıdır, ancak sormakta tereddüt etmeyin:

$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.

Ayrıca kuralları silmek için bu kodu bir eklenti etkinleştirme kancasında çağırmanız gerekir veya siteniz buysa, yönetici konsolundaki Ayarlar> Kalıcı Bağlantılar ayarlarında kalıcı bağlantıları kaydedebilirsiniz. alan:

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

Sonra bir parse_query filtre kancası ekleyin. Bu, WordPress sorguyu inceledikten sonra çağrılacaktır. Eklenen comment_id query_var ayarının yapılıp yapılmadığını test eder ve eğer öyleyse istediğiniz URL’de olup olmadığınızı test eder. Evet ise, 'p' parametresini (bir posta kimliğine ayarlanması gerekir) yorumla ilgili yazıya ayarlamak için get_comment() işlevini kullanarak yorum dizisini yükler. Bu şekilde, WordPress ne olursa olsun çalışacağı sorguyu çalıştırdığında, en azından aşağıdaki comment.php tema şablon dosyanızda gerek duyacağınız bir şey yükler; İhtiyacınız olduğunda daha sonra başka bir sorgu çalıştırmak için. Bu kod ayrıca WordPress'e garip olarak adlandırılmış caller_get_posts seçeneğini kullanarak yapışkan gönderileri yoksaymasını söyler:

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.
    }
}

Daha sonra, /wp-includes/template-loader.php filtresini kullanarak kodu template_include biçiminde bağlamanız gerekir. Bu, WordPress'in sorguyu hem incelemesi hem de yorumun gönderisini yüklemesinden sonra çağrılacaktır. Burada, önce query_var'daki comment_id ve ayrıca istediğiniz URL olan URL'yi tekrar kontrol edeceksiniz. Öyleyse, /index.php şablon sayfasını, oluşturmanız gereken bir tema şablon dosyası olan /comment.php ile değiştiririz:

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;
}

Son olarak, /comment.php öğesini çağırmayı seçtiğim tema şablonu dosyanızı oluşturmanız gerekir. Bu sizin temanız olduğundan, istediğiniz gibi görünmesini sağlayabilirsiniz ama işte başlamanıza bir örnek:

<?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();

Sorusu olan? Sadece sor.

Not; Yukarıda tanımladığım tüm kodlar temanızın functions.php dosyasında ve/veya kendi eklentinizde bulunabilir. Bir uyarı, URL yeniden yazma kuralları için, eklentiyi kullanacaksanız, eklenti etkinleştirme kancasına girmesi gereken kurallar yerine yönetici konsolunun permalinks bölümünde onları manuel olarak silmemizdir. Bir etkinleştirme kancasının nasıl kaydedileceğini göstermedim ama daha fazla bilgi edinmek isterseniz, buradan okuyabilirsiniz .

15
MikeSchinkel