İş parçacığı içermeyen yorum, orijinal yoruma bağlantı içeren yanıtlar


10

Neyi başarmaya çalıştığımı açıklayacağım.

Her yoruma bir yanıt bağlantısı içeren düzenli iş parçacıklı olmayan (düz / klasik) yorumlar istiyorum. Birisi bir yoruma yanıt verdiğinde, yanıt yorumu, varsayılan iş parçacığı içermeyen yorumlarda olduğu gibi en son yorum olarak en üstte (veya altta) sonuçlanır, ancak varsayılan iş parçacığı olmayan yorumun aksine yanıtta bir bağlantı görüntülenmelidir orijinal yorum / yazar.

WordPress forumunda önerilen bir çözüm var:

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

Sadece iţe almýyorum. Posterin farklı kod parçalarını hangi dosyalara yerleştirdiğinden emin değilim. Ben kodu kullanmak ve comment_post için bir işlev kanca çalıştı:

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

Bu, " yazar adına yanıt olarak" içeren boş bir sayfa döndürdü . Gönderi yeniden yüklendikten sonra, bir yanıt yorumu doğru bir şekilde görünür, ancak orijinal yoruma bağlantı olmadan

Kodlama becerilerim gerçekten çok basit, bu yüzden nasıl ilerlemem gerektiği konusunda iyi bir fikrim yok. Herhangi bir yardım için çok minnettar olacaktır.


İçeriği nedir hrefiçinde aÖğeyi Denetle 'Chrome'da aracı (veya tercih tarayıcınızda benzeri) 'uyarınca cevap to` içinde' şu?
mor7ifer

Birçok deneme yanılma sonrasında sorunu çözdüm. İşin püf noktası, kod parçalarını doğru sırayla almak ve yorum ve işlev dosyalarına yerleştirmekti. sİçinde %1$sargüman olarak ele alınır ve bir dize olarak gösterilmesi ise vasıtası. Bu, sprintf işlevi için php kılavuzunda ayrıntılı olarak açıklanmıştır: php.net/manual/en/function.sprintf.php
sarytash

3
Siteyi düzenli tutmanıza ve aynı sorundan sonra gelen herkese sitenin hızlı ve verimli bir şekilde üstesinden gelmesine yardımcı olmak için yaptıklarınızı bir çözüm olarak sunmalısınız.
mor7ifer

Evet, harika bir çalışma çözümü gönderebilirseniz.
Borek Bernard

1
kabul etti, bunu eylemde görmek isterim.
helgatheviking

Yanıtlar:


4

Bu benim çözümüm ve WordPress forumlarında önerilen çözüm değil. Oldukça kolay olduğu ortaya çıkıyor, ancak birkaç adım içeriyor.

1) wp-admin-> Ayarlar-> Tartışma bölümüne gidin ve iş parçacığı yorumlarını kapatın. Bu, istediğimiz iş parçacığını devre dışı bırakır, ancak belirli bir yorumu "yanıtlama" yeteneğimizi de ortadan kaldırır. Bunu geri koymalıyız.

2) Aşağıdaki komut dosyasını temanızın function.php dosyasına veya bir eklentiye ekleyin.

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) Yorumların yazdırılması, wp_list_comments adresine yapılan bir geri arama ile gerçekleştirilir . TwentyEleven işlevi twentyeleven_comment()içinde kullanır functions.php. Temanızda geri arama yoksa bir tane oluşturmanız gerekir. Varsayılan olarak, "wp-include / comment-template.php" içindeki Walker_Comment sınıfının start_el yönteminin içeriği kullanılır. Bunu kopyalayın veya temanın geri aramasını kopyalayın ve işlevi yeniden adlandırın fake_threaded_comment.

3) Temanızdaki wp_list_comments işlevini bulun comments.phpve geri aramayı değiştirin. Şöyle görünmelidir:

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

4) Şimdi biraz hile yapacağız. Bu geri aramada 'fake_threaded_comment', comment_reply_link işlevine bir çağrı yapılmalıdır . Sabit kodlu 'derinlik' ve 'max_depth' argümanlarını iletmek için düzenlemeliyiz. 'Derinliği' 1 ve max_depth'i 2 olarak ayarlıyoruz. Bu, "Yanıtla" düğmemizi / bağlantımızı geri alacak.

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

5) Üst yoruma bağlantı oluşturun. Yan taraftaki geri arama işlevi referansları fark etmiş olabilirsiniz $comment. $comment->comment_parentyanıtlanan yorumun kimliğidir get_comment_link($comment->comment_parent)ve üst yorumun URL'sini verir (bağlantı işaretlemesinin tamamını değil). get_comment($comment->comment_parent)üst yorum verilerini alır. Yani, böyle bir şey ...

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

Bu kadar. Artık belirli yorumlara yorum yapabilirsiniz, ancak yayınlandıktan sonra yorum yükleme sırasına bağlı olarak yorum listesinin sonunda veya başında görünecektir.

WordPress 3.4.1'de TwentyEleven ile test edildi (biraz modası geçmiş, ancak zaten dev sunucumda). Temalar veya eklentilerin bunu kırmak için yapabileceği şeyler olduğundan eminim, ancak iyi davranmış bir tema veya eklentinin onu bozacağını düşünmüyorum.

O gün için benim iyi işim. Bir şeyler ters giderse lütfen bize bildirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.