Há algum tempo que desejávamos iniciar esta série de artigos, a partir da qual esperamos ajudá-lo a aprender como criar um template WordPress. Esta série irá analisar passo-a-passo todas as diferentes fases do desenvolvimento de um template para WordPress, e para que você consiga analisar e implementar todas elas, decidimos partir esta ideia em vários artigos mais simples de assimilar e explorar. No final da série, certamente conseguirá criar seu template WordPress!

Os templates wordpress são hoje em dia cada vez mais procurados e podem ser facilmente criados com o intuito de serem vendidos em mercados como a Theme Forest ou a Mojo Themes. Qualquer pessoa que deseje entrar neste mundo fascinante do desenvolvimento de templates para wordpress, pode posteriormente comercializá-los nesses mercados e começar a ganhar dinheiro produzindo templates de qualidade.

Se não deseja perder pitada desta nova série sobre Como criar um Template WordPress, considere assinar a nossa newsletter e receber todos os próximos artigos por email e comodamente. É grátis!

Endereço de Email:

Vejamos algumas das competências do template que vamos desenvolver ao longo dos próximos artigos:

  • Otimização para motores de busca
  • Marcação com suporte Microformato da Google
  • Semântica da estrutura de marcação válida e lógica que pode ser usada em qualquer template
  • Layouts de CSS inteligentes
  • Classes dinâmicas para o corpo, postagens e comentários
  • Trackbacks e comentários em árvore separados
  • 2 áreas para widgets que desaparecem quando não estão ocupadas
  • Tudo o resto que é normal num template WordPress

No final desta série de tutoriais, com o código feito e pronto a ser implementado, você poderá fazer praticamente tudo aquilo que desejar com ele. Você pode inclusive olhar para o resultado final como a sua framework WordPress de trabalho.

CONSTRUINDO O FICHEIRO COMMENTS.PHP

Qualquer desenvolvedor que se preze odeia programar o template de comentários do WordPress.  Na verdade ele poderá tornar-se uma verdadeira confusão. Na versão 2.7, o WordPress introduziu felizmente uma forma mais fácil de criar templates para comentários — o que na verdade não foi grande ajuda se você desejar separar seus comentários e trackbacks ou desejar introduzir algumas funcionalidades customizadas. Continua sendo confuso.

Felizmente para você, tentámos recriar um template de forma mais fácil. Continua confuso, mas ainda assim mais simples, presumo. Para este tutorial sobre o desenvolvimento do template de comentários, vamos tentar guiá-lo sobre o que vai acontecer, mostrar-lhe algumas porções de código interessantes e que você vai necessitar de adicionar ao ficheiro functions.php, e depois então apresentar o código completo e final. Se tudo correr bem, no final fará sentido.

Vejamos o que irá acontecer neste template.

  • Prevenir o carregamento de páginas por robots
  • Verificar se há comentários
  • Contar o número de comentários e trackbacks (ou pings)
  • Se existirem comentários, mostrar esses comentários — com navegação para paginação de comentários
  • Se existirem trackbacks, mostrar os trackbacks
  • Se os comentários estiverem ligados, mostrar o formulário de “resposta”

Na verdade é muita coisa para um template só, mas penso que conseguiremos explicar-lhe como tudo isso funciona.

CHAMANDO OS COMENTÁRIOS E TRACKBACKS DE FORMA CUSTOMIZADA

Agora, com o WordPress 2.7 foi lançada a função wp_list_comments() que apresenta uma lista desordenada de comentários e trackbacks para os seus artigos (em árvore também). Pode ser conveniente se você assim o desejar. Mas para nós não. Nós queremos comentários em árvore separados dos trackbacks, e customizados à nossa maneira.

Para criar o código do template de comentários vamos dar-lhe algum trabalho. Você irá necessitar de criar chamadas customizadas para a sua lista de Comentários e Trackbacks. Adicione as seguintes 2 funções ao seu ficheiro functions.php.

      // Chamada customizada de comentários
      function custom_comments($comment, $args, $depth) {
        $GLOBALS['comment'] = $comment;
       $GLOBALS['comment_depth'] = $depth;
        ?>
         <li id="comment-<?php comment_ID() ?>" <?php comment_class() ?>>
          <div class="comment-author vcard"><?php commenter_link() ?></div>
          <div class="comment-meta"><?php printf(__('Posted %1$s at %2$s <span class="meta-sep">|</span> <a href="%3$s" title="Permalink to this comment">Permalink</a>', 'seu-template'),
             get_comment_date(),
             get_comment_time(),
             '#comment-' . get_comment_ID() );
             edit_comment_link(__('Edit', 'seu-template'), ' <span class="meta-sep">|</span> <span class="edit-link">', '</span>'); ?></div>
        <?php if ($comment->comment_approved == '0') _e("\t\t\t\t\t<span class='unapproved'>Your comment is awaiting moderation.</span>\n", 'seu-template') ?>
                <div class="comment-content">
              <?php comment_text() ?>
          </div>
        <?php // echo the comment reply link
         if($args['type'] == 'all' || get_comment_type() == 'comment') :
          comment_reply_link(array_merge($args, array(
           'reply_text' => __('Reply','seu-template'),
           'login_text' => __('Log in to reply.','seu-template'),
           'depth' => $depth,
           'before' => '<div class="comment-reply-link">',
           'after' => '</div>'
          )));
         endif;
        ?>
      <?php } // end custom_comments
      // Chamada customizada para listar trackbacks
      function custom_pings($comment, $args, $depth) {
             $GLOBALS['comment'] = $comment;
              ?>
            <li id="comment-<?php comment_ID() ?>" <?php comment_class() ?>>
             <div class="comment-author"><?php printf(__('By %1$s on %2$s at %3$s', 'seu-template'),
               get_comment_author_link(),
               get_comment_date(),
               get_comment_time() );
               edit_comment_link(__('Edit', 'seu-template'), ' <span class="meta-sep">|</span> <span class="edit-link">', '</span>'); ?></div>
          <?php if ($comment->comment_approved == '0') _e('\t\t\t\t\t<span class="unapproved">Your trackback is awaiting moderation.</span>\n', 'seu-template') ?>
                  <div class="comment-content">
             <?php comment_text() ?>
         </div>
      <?php } // end custom_pings

Iremos necessitar também de uma função customizada que o custom_comments() está chamando. Esta função irá fazer a marcação do gravatar que estamos a usar, mas que ele se enquadre no esquema de microformato para hcard.

      // Produz um avatar compatível com hCard
      function commenter_link() {
       $commenter = get_comment_author_link();
       if ( ereg( '<a[^>]* class=[^>]+>', $commenter ) ) {
        $commenter = ereg_replace( '(<a[^>]* class=[\'"]?)', '\\1url ' , $commenter );
       } else {
        $commenter = ereg_replace( '(<a )/', '\\1class="url "' , $commenter );
       }
       $avatar_email = get_comment_author_email();
       $avatar = str_replace( "class='avatar", "class='photo avatar", get_avatar( $avatar_email, 80 ) );
       echo $avatar . ' <span class="fn n">' . $commenter . '</span>';
      } // end commenter_link

Se você pretende mudar a dimensão original do seu gravatar, troque o valor de 80 na função get_avatar( $avatar_email, 80 ) ). O valor 80 é a dimensão em pixeis para o seu gravatar.

O TEMPLATE DE COMENTÁRIOS

Vejamos então o template de comentários com algums comentários PHP que o vão ajudar a compreender melhor as funcionalidades presentes no template.

      <?php /* O template de comentários! */ ?>
         <div id="comments">
      <?php /* Correr algumas verificações para robots artigos protegidos com password */ ?>
      <?php
       $req = get_option('require_name_email'); // Verifica se os campos são obrigatórios.
       if ( 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']) )
        die ( 'Please do not load this page directly. Thanks!' );
       if ( ! empty($post->post_password) ) :
        if ( $_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password ) :
      ?>
          <div class="nopassword"><?php _e('This post is password protected. Enter the password to view any comments.', 'seu-template') ?></div>
         </div><!– .comments –>
      <?php
        return;
       endif;
      endif;
      ?>

      <?php /* Verificar se há comentários e fazer coisas! */ ?>
      <?php if ( have_comments() ) : ?>

      <?php /* Contar o número de comentários e trackbacks (ou pings) */
      $ping_count = $comment_count = 0;
      foreach ( $comments as $comment )
       get_comment_type() == "comment" ? ++$comment_count : ++$ping_count;
      ?>

      <?php /* Se existire comentários, mostrar os comentários */ ?>
      <?php if ( ! empty($comments_by_type['comment']) ) : ?>

          <div id="comments-list" class="comments">
           <h3><?php printf($comment_count > 1 ? __('<span>%d</span> Comments', 'seu-template') : __('<span>One</span> Comment', 'seu-template'), $comment_count) ?></h3>

      <?php /* Se existirem comentários suficientes, construir a paginação de comentários  */ ?>
      <?php $total_pages = get_comment_pages_count(); if ( $total_pages > 1 ) : ?>
           <div id="comments-nav-above" class="comments-navigation">
              <div class="paginated-comments-links"><?php paginate_comments_links(); ?></div>
           </div><!– #comments-nav-above –>
      <?php endif; ?>    

      <?php /* Uma lista ordenada de comentários, custom_comments(), in functions.php   */ ?>
           <ol>
      <?php wp_list_comments('type=comment&callback=custom_comments'); ?>
           </ol>

      <?php /* Se existirem comentários suficientes, construir a navegação */ ?>
      <?php $total_pages = get_comment_pages_count(); if ( $total_pages > 1 ) : ?>
            <div id="comments-nav-below" class="comments-navigation">
            <div class="paginated-comments-links"><?php paginate_comments_links(); ?></div>
               </div><!– #comments-nav-below –>
      <?php endif; ?>    

          </div><!– #comments-list .comments –>

      <?php endif; /* if ( $comment_count ) */ ?>

      <?php /* Se existirem trackbacks(pings), mostrar os trackbacks  */ ?>
      <?php if ( ! empty($comments_by_type['pings']) ) : ?>

          <div id="trackbacks-list" class="comments">
           <h3><?php printf($ping_count > 1 ? __('<span>%d</span> Trackbacks', 'seu-template') : __('<span>One</span> Trackback', 'seu-template'), $ping_count) ?></h3>

      <?php /* Uma lista ordenada de trackbacks, custom_pings(), in functions.php   */ ?>
           <ol>
      <?php wp_list_comments('type=pings&callback=custom_pings'); ?>
           </ol>    

          </div><!– #trackbacks-list .comments –>  

      <?php endif /* if ( $ping_count ) */ ?>
      <?php endif /* if ( $comments ) */ ?>

      <?php /* Se os comentários estiverem ligados, criar o formulário de resposta */ ?>
      <?php if ( 'open' == $post->comment_status ) : ?>
          <div id="respond">
              <h3><?php comment_form_title( __('Post a Comment', 'seu-template'), __('Post a Reply to %s', 'your-theme') ); ?></h3>

              <div id="cancel-comment-reply"><?php cancel_comment_reply_link() ?></div>

      <?php if ( get_option('comment_registration') && !$user_ID ) : ?>
           <p id="login-req"><?php printf(__('You must be <a href="%s" title="Log in">logged in</a> to post a comment.', 'seu-template'),
           get_option('siteurl') . '/wp-login.php?redirect_to=' . get_permalink() ) ?></p>

      <?php else : ?>
           <div class="formcontainer">

            <form id="commentform" action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post">

      <?php if ( $user_ID ) : ?>
             <p id="login"><?php printf(__('<span class="loggedin">Logged in as <a href="%1$s" title="Logged in as %2$s">%2$s</a>.</span> <span class="logout"><a href="%3$s" title="Log out of this account">Log out?</a></span>', 'seu-template'),
              get_option('siteurl') . '/wp-admin/profile.php',
              wp_specialchars($user_identity, true),
              wp_logout_url(get_permalink()) ) ?></p>

      <?php else : ?>

             <p id="comment-notes"><?php _e('Your email is <em>never</em> published nor shared.', 'your-theme') ?> <?php if ($req) _e('Required fields are marked <span class="required">*</span>', 'seu-template') ?></p>

                    <div id="form-section-author" class="form-section">
              <div class="form-label"><label for="author"><?php _e('Name', 'seu-template') ?></label> <?php if ($req) _e('<span class="required">*</span>', 'seu-template') ?></div>
              <div class="form-input"><input id="author" name="author" type="text" value="<?php echo $comment_author ?>" size="30" maxlength="20" tabindex="3" /></div>
                    </div><!– #form-section-author .form-section –>

                    <div id="form-section-email" class="form-section">
              <div class="form-label"><label for="email"><?php _e('Email', 'seu-template') ?></label> <?php if ($req) _e('<span class="required">*</span>', 'seu-template') ?></div>
              <div class="form-input"><input id="email" name="email" type="text" value="<?php echo $comment_author_email ?>" size="30" maxlength="50" tabindex="4" /></div>
                    </div><!– #form-section-email .form-section –>

                    <div id="form-section-url" class="form-section">
              <div class="form-label"><label for="url"><?php _e('Website', 'seu-template') ?></label></div>
              <div class="form-input"><input id="url" name="url" type="text" value="<?php echo $comment_author_url ?>" size="30" maxlength="50" tabindex="5" /></div>
                    </div><!– #form-section-url .form-section –>

      <?php endif /* if ( $user_ID ) */ ?>

                    <div id="form-section-comment" class="form-section">
              <div class="form-label"><label for="comment"><?php _e('Comment', 'seu-template') ?></label></div>
              <div class="form-textarea"><textarea id="comment" name="comment" cols="45" rows="8" tabindex="6"></textarea></div>
                    </div><!– #form-section-comment .form-section –>

                    <div id="form-allowed-tags" class="form-section">
                     <p><span><?php _e('You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes:', 'seu-template') ?></span> <code><?php echo allowed_tags(); ?></code></p>
                    </div>

      <?php do_action('comment_form', $post->ID); ?>

             <div class="form-submit"><input id="submit" name="submit" type="submit" value="<?php _e('Post Comment', 'seu-template') ?>" tabindex="7" /><input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" /></div>

      <?php comment_id_fields(); ?>  

      <?php /* O código termina aqui. Está feito. Vamos encerrá-lo. */ ?>  

            </form><!– #commentform –>
           </div><!– .formcontainer –>
      <?php endif /* if ( get_option('comment_registration') && !$user_ID ) */ ?>
          </div><!– #respond –>
      <?php endif /* if ( 'open' == $post->comment_status ) */ ?>
         </div><!– #comments –>

E está feito! Acaba de criar o seu template de comentários com estilo e alguns pormenores bem interessantes.

ESTÁ ACOMPANHANDO? TEM DÚVIDAS?

Este sétimo artigo teve como base a programação do template de comentários e sua devida otimização. O mais importante neste momento é que você compreenda os passos que vamos dando e caso tenha dúvidas, poderá colocá-las sem problema. Contamos com a sua participação e as suas dúvidas. Está gostado? Participe com seus comentários!

Se não deseja perder pitada desta nova série sobre Como criar um Template WordPress, considere assinar a nossa newsletter e receber todos os próximos artigos por email e comodamente. É grátis!

Endereço de Email:

Até Já!

Autor: Paulo Faustino

Blog do Autor | Artigos do Autor:

Fundador da Escola Dinheiro. É um empreendedor e blogueiro que dedica a sua vida à produção e partilha de conteúdos de grande qualidade, contando já com alguns dos mais reconhecidos blogs de Portugal e do Brasil.

Templates Wordpress que Recomendamos:

  • U-Design WordPress Theme
  • Tersus - Responsive WordPress Theme
  • Modernize - Flexibility of Wordpress
  • Good Space - Responsive Minimal WP Theme
  • Sterling - Responsive Wordpress Theme
  • Karma - Clean and Modern Wordpress Theme
  • Doover Premium WordPress Theme
  • MayaShop - A Flexible Responsive e-Commerce Theme
  • SmartStart WP - Responsive HTML5 Theme
  • Striking Premium Corporate & Portfolio WP Theme
  • Core Minimalist Photography Portfolio
  • King Size - fullscreen background WordPress theme

Gostou deste artigo? Então torne-se fã do Blog no Facebook!


WooThemes - WordPress themes for everyone

Comentários dos Alunos


  1. rockz
    10.12.2010

    otimo artigo, mas eu nao consegui listar os comentarios como eu faço?

    Responder


    • Dan Lopes
      11.02.2011

      Olá Rockz,

      acredito que faltou no artigo comentar sobre a inserção do código abaixo no template do seu tema, por exemplo no arquivo ‘single.php’

      CHAMA O TEMPLATE CRIADO ACIMA ‘comments.php’

      LISTA OS COMENTÁRIOS POSTADOS

      []‘s

      Responder


      • Dan Lopes
        11.02.2011

        Ops…

        CHAMA O TEMPLATE CRIADO ACIMA ‘comments.php’

        LISTA OS COMENTÁRIOS POSTADOS

        Agora espero que esteja certo ;)

        Responder


      • Dan Lopes
        11.02.2011

        Karaca…

        CHAMA O TEMPLATE CRIADO ACIMA ‘comments.php’
        comments_template();

        LISTA OS COMENTÁRIOS POSTADOS
        wp_list_comments();

        Responder


  2. anderson
    11.12.2010

    Olá, em qual ficheiro coloco o ultimo código “Template de Comentários” ?

    Responder


    • Nany
      17.12.2010

      Você coloca na página comments.php se caso o seu tema tiver essa.

      Responder


  3. Mateus
    03.01.2011

    Tem como listar apenas os comentários aprovados? Porque quando alguém manda um comentário, esse é exibido para ela apenas. Queria saber, se tem como só exibir definitivamente, quando for aprovado.
    Espero respostas,
    Mateus :) .

    Responder


  4. Gustavo D. Castro
    08.04.2011

    Olá Paulo, infelizmente parece ter algo errado, os comentários não funcionam seguindo esse tutorial!

    Responder


  5. Anderson
    25.06.2011

    Funciona no wordpress 3.0? Porque rodando aqui em servidor local ele não faz a lista de comentários!

    Responder


  6. Rafael
    15.07.2011

    Paulo,

    primeiramente parabéns ótimo post… funcionou perfeitamente aqui…

    mas estou precisando resgatar a quantidade de post que tem… como faço para saber o numero?? e colocar na pagina inicial do blog… junto ao resumo?? tipo aqueles… X comentários …

    Grato

    Responder


  7. Rafael
    15.07.2011

    esqueci de me notificar quando vc responder….

    desculpa ta aqui marcando… mas se possivel vc pdoeria me avisar quando vc responder?

    grato… nesse post eu marquei a opção!

    Responder

Comente o Artigo!

RSS
Twitter
Facebook
Comentários
ASSINANTES
SEGUIDORES
FÃS
COMENTÁRIOS
11485

Subscrever Newsletter
Subscreva a Newsletter:


Elegant Themes

Wix

Theme Forest

Mojo Themes



Assine a Escola Wordpress Assine a Newsletter da Escola Wordpress Escola Wordpress no Twitter Escola Wordpress no Facebook Escola Wordpress no Youtube Escola Wordpress no Google Buzz