WordPress 2.7 > Bucăţi de cod pentru modificarea aspectului comentariilor

Au mai scris şi alţii şi, cred, de referinţă rămîne “manualul” lui Alex Negrea. Per total, Alex le zice foarte bine. Problema mea e că eu, unul, folosesc propria structură de afişare a comentariilor (un cod preluat de la Brian Gardner şi modificat ulterior), în speţă pentru că e mai simplă, ceea ce înseamnă mult mai multă uşurinţă la capitolul modificări pentru cineva care nu se pricepe la PHP. Pe de altă parte, structura mea de cod este simplă şi pentru că mă ajută pe mine să-mi bat capul cît mai puţin.

Activarea răspunsurilor la comentarii

Fireşte, nu e perfectă, nici măcar partea de CSS nu e perfectă după ce am adaptat codul pentru versiunea 2.7 (a se vedea aici cam cît e de stilizat, eu n-am îndrăznit să muncesc atîta). Pînă una-alta, s-o luăm cu începutul.

Enable threaded comments

Înainte de a te apuca de modificat codul, intră în Settings > Discussion şi bifează “Enable threaded (nested) comments“. Preferabil ar fi să bifezi 3 în loc de 5 (default). Şi asta din cauză că ai toate şansele ca, atunci cînd vei modifica CSS-ul, să strici aspectul template-ului.

Adăugarea primelor bucăţi de cod

Prima modificare în fişierele temei apare chiar în header.php. Practic, se adaugă o bucată de cod:

[php]< ?php if (is_singular()) wp_enqueue_script('comment-reply'); ?>[/php]

precum în imaginea de mai jos:

Modificări header.php

De reţinut, bucata de cod de mai sus trebuie pusă obligatoriu deasupra bucăţii de cod din rîndul 20 din imagine:

[php]< ?php wp_head(); ?>[/php]

Crearea functions.php

Pasul următor este scrierea funcţiilor necesare pentru afişarea comentariilor după noul “standard”. Noul “standard” vine şi ca urmare a introducerii de noi funcţii, în cazul de faţă < ?php wp_list_comments(); ?>. Nu stau să detaliez cu ce se mănîncă funcţia asta, a făcut-o deja Alex (vezi link-ul de sus). Totuşi, reţine că trebuie să salvezi fişierul comments.php înainte de a te apuca să-l modifici. Cel mai indicat ar fi să îl redenumeşti în legacy.comments.php. De ce? Detaliez mai jos.

Însă ceea ce pot să fac este să dau un copy/paste cu ceea ce ar trebui să conţină functions.php, respectiv funcţia pe care o folosesc eu pentru afişarea comentariilor. Altfel spus, e vorba strict despre afişarea comentariilor fără folosirea DIV-urilor, prin urmare fără mari bătai de cap din cauza stilizărilor.

O primă observaţie: dacă template-ul tău foloseşte widget-uri, implicit foloseşte şi functions.php. Ceea ce înseamnă că headerele < ?php sînt deja folosite, deci nu trebuie să le mai scrii încă o dată. Prin urmare, iată codul functions.php:

[php]
add_filter(‘comments_template’, ‘legacy_comments’);
function legacy_comments($file) {
if ( !function_exists(‘wp_list_comments’) )
$file = TEMPLATEPATH . ‘/legacy.comments.php’;
return $file;
}

function custom_comment($comment, $args, $depth) {
$GLOBALS[‘comment’] = $comment; ?>

  • class=”alt” id=”comment-< ?php comment_ID( ); ?>“>
    < ?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?>
    < ?php comment_author_link() ?> a scris la data de ‘, ‘after’ => ‘
  • ‘, ‘reply_text’ => ‘Raspunde’, ‘depth’ => $depth, ‘max_depth’ => $args[‘max_depth’] )); ?>
    < ?php // Do not close LI. WP will do it for you.}[/php]Ce înseamnă asta? Ei bine, prima parte este un filtru, cea de-a doua este funcţia propriu-zisă. Ce face filtrul? Caută existenţa funcţiei definite mai jos, iar în cazul în care nu o găseşte, foloseşte legacy.comments.php. Asta doar dacă se întîmplă să nu funcţioneze ceva sau vrei să faci update la template deşi încă nu te-ai hotărît cînd vei face şi la WordPress. Filtrul nu e necesar decît în cazul în care vrei să mai dai tema şi altora.În ceea ce priveşte noul comments.php, aici e un pic mai delicat, mai ales că e nevoie de mai multe înlocuiri. Mai exact, începînd cu prima parte şi continuînd cu alte cîteva bucăţi de cod. Altfel spus, prima parte este cea care defineşte fişierul.[php]

    This post is password protected. Enter the password to view comments.

    < ?php return; } ?>
    [/php]

    Asta este partea pe care nu trebuie să o editezi, dar pe care trebuie să o înlocuieşti dacă vrei un nou comments.php funcţional. Urmează partea în care se defineşte afişarea comentariilor în pagină. Parte care va arată (în cazul în care template-ul foloseşte un DIV exclusiv pentru comentarii) aşa:

    [php]
    < ?php if ( have_comments() ) : ?>

    < ?php else : // this is displayed if there are no comments so far ?>
    < ?php if ('open' == $post->comment_status) : ?>

    Nici un comentariu

    < ?php else : // comments are closed ?>

    Comentariile sint inchise.

    < ?php endif; ?>
    < ?php endif; ?>
    [/php]

    Bineînţeles, dacă template-ul tău foloseşte alt tip de heading, h4 poate fi înlocuit. Ce se întîmplă în codul de mai sus? Pe scurt, o traducere ar suna cam aşa:

    Dacă există comentarii, atunci creează DIV-ul “comentarii”, dacă există, afişează headingul pentru trackbacks şi lista de trackback-uri, afişează headingul cu numărul de comentarii, afişează lista de comentarii în funcţie de stilizarea lor CSS (funcţie de clase, “alt”, “staffcomment” dacă este al autorului), afişează avatar în dreapta, închide DIV-ul “comentarii” şi creează DIV pentru navigare, afişează link-uri navigare, închide DIV, iar dacă nu sînt comentarii ori comentariile sînt închise, afişează headingul prin care se anunţă acest lucru.

    Sper că s-a înţeles măcar un minimum. Urmează partea a doua a fişierului, cea în care este determinat răspunsul.

    [php]
    < ?php/** * @package WordPress * @subpackage Default_Theme */// Do not delete these lines if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) die ('Please do not load this page directly. Thanks!'); if ( post_password_required() ) { ?>

    This post is password protected. Enter the password to view comments.

    < ?php return; } ?>

    < ?php if ( have_comments() ) : ?>

    < ?php else : // this is displayed if there are no comments so far ?>

    < ?php if ('open' == $post->comment_status) : ?>

    Nici un comentariu

    < ?php else : // comments are closed ?>

    Comentariile sint inchise.

    < ?php endif; ?>
    < ?php endif; ?>

    < ?php if ('open' == $post->comment_status) : ?>