() translation by (you can also view the original English article)
Matatagpuan na ngayon halos kahit saan ang WordPress, at hindi ito nakakagulat dahil sa dali nito gamitin at i-customize. Sa pagtuturong ito, hihimayin natin ang default na istruktura ng comments.php ng tema ng WordPress at ibibigay sa inyo ang sari-saring snippets ng code upang mas mapadali ang iyong skinning.
Para sa iyong reference, nagsama rin ako ng isang munting table of contents.
- Ang backend ng PHP
- Pangkalahatang code
- Pagdidisplay ng mga comments
- Ang comment form
- Ilang mga munting daya
- Konklusyon
1. Ang backend ng PHP
1 |
<?php if(!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) : ?> |
2 |
<?php endif; ?> |
3 |
|
4 |
<?php if(!empty($post->post_password)) : ?> |
5 |
<?php if($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?> |
6 |
<?php endif; ?> |
7 |
<?php endif; ?> |
8 |
|
9 |
<?php if($comments) : ?> |
10 |
<?php foreach($comments as $comment) : ?> |
11 |
<?php if ($comment->comment_approved == '0') : ?> |
12 |
<?php endif; ?> |
13 |
<?php endforeach; ?> |
14 |
<?php else : ?> |
15 |
<?php endif; ?> |
16 |
|
17 |
<?php if(comments_open()) : ?> |
18 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
19 |
<?php else : ?> |
20 |
<?php if($user_ID) : ?> |
21 |
<?php else : ?> |
22 |
<?php endif; ?> |
23 |
<?php endif; ?> |
24 |
<?php else : ?> |
25 |
<?php endif; ?> |
26 |
Narito ang raw PHP code na bubuo sa iyong comments.php file function. Sa isang baguhan, maaaring ito’y nakaktakot. Gayunpaman, wag mag-alala: gamit ang pagtuturong ito, ang lahat sa iyong comments file ay magiging sing-linaw ng Kristal!
2. Pangkalahatang code
Pag-iwas sa tuwirang access sa comments.php
1 |
<?php if(!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) : ?> |
2 |
<?php endif; ?> |
Ang linya ng code na ito ay pinipigilan
ang mga users na aksidenteng ma-view ang comments.php Ang linya na ito ay dapat nakasama sa
post page, hindi dapat nakahiwalay. Dapat isaalang-alang mo ito para sa
seguridad. Sa loob ng iyong statement, maaari kang
magpasok ng anumang mensahe na gusto mong mai-display sa taong tumitingin ng
comments.php file, mas maigi kung isang die
statement.
1 |
<?php if(!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) : ?> |
2 |
<?php die('You can not access this page directly!'); ?> |
3 |
<?php endif; ?> |
Kailangan ba ang password?
1 |
<?php if(!empty($post->post_password)) : ?> |
2 |
<?php if($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?> |
3 |
<?php endif; ?> |
4 |
<?php endif; ?> |
Ang statement na ito (dalawa ito, sa totoo lang, ngunit mas may sense ito kung titignan mo sila bilang isa) ay nagche-check kung kailangan ng password upang makita ang post. Malinaw namaw naman na kung wala kang password upang makita ang post, hindi mo ring maaaring makita ang mga komento.
Ang unang if
ay nagche-check kung
mayroon bang itinakdang password. Ang pangalawang if
ay nagche-check
kung mayroon bang isang cookie na may password na nakapuwesto at nagdi-display
ng angkop na mensahe kung wala ito doon. Maaari mong i-customize ang error
message sa pamamagian ng paglalagay ng anumang gusto mong ilagay sa pangalawang if
statement.
3. Pagdidisplay ng mga comments
1 |
<?php if($comments): ?> |
2 |
<?php foreach ($comments as $comment) : ?> |
3 |
<?php if ($comment->comment_approved == '0') : ?> |
4 |
<?php endif; ?> |
5 |
<?php endforeach; ?> |
6 |
<?php else : ?> |
7 |
<?php endif; ?> |
Ang unang conditional statement
(if($comments)
) ay nagche-check kung mayroon bang mga komento at naglu-loop sa
pamamagitan ng isang foreach
statement. Sa loob ng foreach
statement, mapapansin
mo ang susunod na conditional statement: if($comment->comment_approved == '0')
. Tinitignan nito kung ang komento ay
naaprubahan, at nagpapakita ng mensahe kung hindi pa.
Ang isang halimbawa nito ay ang sumusunod na piraso ng code.
1 |
<?php if($comments) : ?> |
2 |
<ol> |
3 |
<?php foreach($comments as $comment) : ?> |
4 |
<li> |
5 |
<?php if($comment->comment_approved == '0') : ?> |
6 |
<p>Your comment is awaiting approval</p> |
7 |
<?php endif; ?> |
8 |
<p>Your comment</p> |
9 |
</li> |
10 |
<?php endforeach; ?> |
11 |
</ol> |
12 |
<?php else : ?> |
13 |
<p>No comments</p> |
14 |
<?php endif; ?> |
Mga payak na template tags para sa pagkokomento
Upang magawa itong isang gumaganang piraso ng code, kailangan mong gamitin ang mga template tags na binibigay ng WordPress.
Template Tag | Paglalarawan |
---|---|
<?php comment_ID; ?> | ang ID ng komento |
<?php comment_autor(); ?> | ang sumulat ng komento |
<?php comment_autor_link(); ?> | ang sumulat ng komento, na may nakaugnay na link sa kanyang website, kung mayroon man siyang binanggit |
<?php comment_type(); ?> | ang uri ng komento; pingback, traceback o komento |
<?php commnet_text(); ?> | ang aktwal na komento |
<?php comment_date(); ?> | ang petsa kung kalian ito pinost |
<?php comment_tima(); ?> | ang oras kung kalian ito pinost |
Ang panghuling resulta
1 |
<?php if($comments) : ?> |
2 |
<ol> |
3 |
<?php foreach($comments as $comment) : ?> |
4 |
<li id="comment-<?php comment_ID(); ?>"> |
5 |
<?php if ($comment->comment_approved == '0') : ?> |
6 |
<p>Your comment is awaiting approval</p> |
7 |
<?php endif; ?> |
8 |
<?php comment_text(); ?> |
9 |
<cite><?php comment_type(); ?> by <?php comment_author_link(); ?> on <?php comment_date(); ?> at <?php comment_time(); ?></cite> |
10 |
</li> |
11 |
<?php endforeach; ?> |
12 |
</ol> |
13 |
<?php else : ?> |
14 |
<p>No comments yet</p> |
15 |
<?php endif; ?> |
Ang paglalagay nito sa comments.php ay magbibigay sa iyo ng isang nakaayos na listahan kung saan ang mga komento at ang kinakailangang impormasyon o display message na nagsasabing walang anumang mga komento ang naroroon.
4. Ang comment form
Nakakasunod pa ba kayo? Ayos! Malapit na tayo. Kailangan na lang nating iproseso ang comment form…Sige, baka nagsinungaling ako sa pagsasabing malapit na tayo. Sa totoo lang, ang comment form na ito ay isa sa mga mas mahirap na parte ng buong skin file ng comments.php.
Tatambakan ka ng sangkatutak na conditional statements (kailangan ba ng login, naka-login ka ba,...). Ang bahaging ito ay kung saan ang maraming skinners ay nagkakaroon ng pinakamalaking problema: ang pagkakamali sa paglalagay ng mga element ay maaaring mapigilang gumana ang form, ng walang binibigay na partikular na PHP error.
Para mabigyan kayo ng kaalam tungkol sa mga conditional statements na kasama sa comment form, ipapaliwanag ko muna ang mga statements na ito, at isasama ang HTML pagkatapos nito habang pinapaliwanag kung bakit ito dapat mapunta sa kinalalagyan nito.
Panimula sa conditional statement
1 |
<?php if(comments_open()) : ?> |
2 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
3 |
<?php else : ?> |
4 |
<?php if($user_ID) : ?> |
5 |
<?php else : ?> |
6 |
<?php endif; ?> |
7 |
<?php endif; ?> |
8 |
<?php else : ?> |
9 |
<?php endif; ?> |
Ang unang conditional statement na
masasalubong mo ay ang <?php if(comment_open()) : ?>
. Sa madaling salita, chine-check nito
kung ang mga komento ay bukas. Kita naman na kung nakasarado ang mga
komento, hindi ka makakapgpost ng komento at ang comment form ay hindi na
kailangan. Maaari mong ilagay ang mensaheng gusto mong i-display kung ang mga komento ay nakasara sa pagitan ng huling <?php esle : ?>
at<?php endif; ?>
.
Ang pangalawang conditional statement na
( <?php if(get_option("comment_registration') &&!$user_ID) : ?>
) ay chinecheck kung kailangan nyo bang maging rehistrado upang magpost ng
isang komento at kung ikaw ba ay logged in. Kung ang conditional statement ay
natupdat na, dapat mag-display ang script ng isang link kung saan pwedeng
tumungo ang mga users para mag-log in. Kung hindi kailangan ang pagrerehistro o
kung nakalog-in ka na, ang script ay magpapatuloy sa else
at magdidisplay ng
form.
Ang ating panghuling conditional statement ay nagche-check kung ikaw ay nakalog in o hindi. Kita naman na kung naka-log in ka na, wala nang pangangailangang maglagay ng iyong pangalan, email at website pang muli.
Pagpasok ng form
Binabati kita, nabungkal natng mabuti ang lahat ng mga conditional statements sa comments.php file. Ngayon, ang natitira na lang na gawin ay idagdag ang form doon.
Ang unang bagay na naririnig kong iniisip mo ay: saan magsisimula ang form na iyon? Kailangan mo lang paganahin ang iyong sentido kumon. Ang pangalawang conditional statement ay chinecheck kung kailangan bang naka-log in ka o hindi, dahil dito, hindi mo kailangang magdisplay ng form hanggang matapos ang statement na ito. Kaya ang buong form ay nakalagay sa loob ng conditional statement na ito.
1 |
<?php if(comments_open()) : ?> |
2 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
3 |
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">logged in</a> to post a comment.</p><?php else : ?> |
4 |
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> |
5 |
<?php if($user_ID) : ?> |
6 |
<?php else : ?> |
7 |
<?php endif; ?> |
8 |
</form> |
9 |
<?php endif; ?> |
10 |
<?php else : ?> |
11 |
<p>The comments are closed.</p> |
12 |
<?php endif; ?> |
Nilagay ko rin ang link sa login page, sa paraang nakita ko ito sa default na comments.php Gaya ng sabi ko dati, chinechek ng huling conditional statement kung naka-log in ka ba o hindi. Kitang-kita naman na ang mga input fields para sa pangalan, email at website ay idinidisplay lang kung hindi ka nakalog in. Ilagay natin sila doon!
1 |
<?php if(comments_open()) : ?> |
2 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
3 |
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">logged in</a> to post a comment.</p><?php else : ?> |
4 |
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> |
5 |
<?php if($user_ID) : ?> |
6 |
<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">Log out »</a></p> |
7 |
<?php else : ?> |
8 |
<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" /> |
9 |
<label for="author"><small>Name <?php if($req) echo "(required)"; ?></small></label></p> |
10 |
<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" /> |
11 |
<label for="email"><small>Mail (will not be published) <?php if($req) echo "(required)"; ?></small></label></p> |
12 |
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" /> |
13 |
<label for="url"><small>Website</small></label></p> |
14 |
<?php endif; ?> |
15 |
</form> |
16 |
<?php endif; ?> |
17 |
<?php else : ?> |
18 |
<p>The comments are closed.</p> |
19 |
<?php endif; ?> |
Ayos! Malapit na tayo! Kailangan na lang nating magdagdag ng ilang mga simpleng linya ng code gaya ng isang textarea at isang submit button. Ang mga ito ay susunod sa huling conditional statement, dahil walang kaugnayan sa mga elementong ito kung naka-log in ka ba o hindi.
1 |
<?php if(comments_open()) : ?> |
2 |
<?php if(get_option('comment_registration') && !$user_ID) : ?> |
3 |
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">logged in</a> to post a comment.</p><?php else : ?> |
4 |
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> |
5 |
<?php if($user_ID) : ?> |
6 |
<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">Log out »</a></p> |
7 |
<?php else : ?> |
8 |
<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" /> |
9 |
<label for="author"><small>Name <?php if($req) echo "(required)"; ?></small></label></p> |
10 |
<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" /> |
11 |
<label for="email"><small>Mail (will not be published) <?php if($req) echo "(required)"; ?></small></label></p> |
12 |
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" /> |
13 |
<label for="url"><small>Website</small></label></p> |
14 |
<?php endif; ?> |
15 |
<p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea></p> |
16 |
<p><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" /> |
17 |
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" /></p> |
18 |
<?php do_action('comment_form', $post->ID); ?> |
19 |
</form> |
20 |
<?php endif; ?> |
21 |
<?php else : ?> |
22 |
<p>The comments are closed.</p> |
23 |
<?php endif; ?> |
Madaling ipaliwanag ang code na ito. Ang isang textarea field para sa vomment, isang
submit button, isang naatagong input field na may future ID ng mga komento, at
isang PHP snippet (<?php do_action('comment_form', $post->ID); ?>
) Kinakailangan ng WordPress na paganahin
ang comment form.
Voila! That's all folks! Meron ka nang nakahandang comments.php file. I-view moa ng vile na ito upang makuha ang lahat ng PHP at HTML code na kailangan. Dapat ganito ang makukuha mo (pinalitan ko lang ang comments.php file ng default skin ng gamit natin at nagdagdag ng ilang munting disenyo dito.)



5. Ilang mga munting daya
Syempre, mayroon ka na lang ngayong isang payak na comments.php file. Maraming bagay kang maaaring gawin upang mas mapaganda ito. Maglilista ako ng ilang mga munting tips at daya upang matulungan ka sa ginagawa mo.
Mga Gravatars
Simula sa WordPress 2.5, mayroong isang custom WordPress na template tag upang makapag-embed ng mga gravatars. Kinukuha nito ang gravatar mula sa email na inilagay ng bisita. Ang code para gawin ito ay simple lang.
1 |
<?php echo get_avatar($author_email, $size, $default_avatar ); ?> |
Maaari mong palitan ang $author_email
ng get_comment_author_email();
function, ang $size
ay ang taas (at lawak)
ng avatar at ang $default_avata
r ay isang link sa default na larawang
pang-avatar (idinidisplay kung ang nagkomento ay walang avatar).
Ipasok ang code na ito sa loob ng foreach
loop na nagdidisplay ng mga komento. Ang output ay isang larawan na may mga
classes na avatar
at ang avatar-$size
(kung saan ang $size
ay ang sukat na
ibinigay mo). Sa pamamagitan ng ilang munting CSS
editing, maaari kang magkaroon ng kagaya nito:



Bilang ng mga komento
Sinadya kong iwan ang mga headers sa comments.php file na ginawa natin mamaya, dahil naniniwala ako na makakatulong ito para sa sobrang code sa isang proseso na mahirap na. Halata naman na kinakalimutan ko sila.
Kadalasan, ang mga tao ay mayroong heading na nagdidisplay ng mga gaya ng “3 komento na ang meron”. Napakadali nitong magawa salamat sa mga template tags na inaalok ng WordPress.
1 |
<?php comments_number($zero_comments, $one_comment, $more_comments); ?> |
Madaling lang itong intindihin: Ang
$zero_comments
ay ang tekstong idinidisplay kapag wala nang mga komento, ang
$one_comment
kapag mayroong isang komento, at $more_comments
naman kapag
maraming mga komento. Ang isang totoong buhay na halimbawa ay
kagaya nito:
1 |
<?php comments_number('No comments', 'One comment', '% comments'); ?> |
Gumamit ako ng %
para sa maraming mga
komento, yamang ang comments_number
function ay papalitan ang %
ng dami ng mga
komentong (2, 3, …)
Kapag ginamit ito sa ating comments.php file, magkakaroon ka ng kagaya nito:



Mga links sa mga komento
Upang magdisplay ng isang link sa parte ng mga komento (kasama rin ang bilang ng mga naka-display na mga komento), kailangan mo lang gamitin ang sumusunod na mga code.
1 |
<?php comments_popup_link($zero_comments, $one_comment, $more_comments, $css_class, $comments_closed); ?> |
Ang unang tatlong parameters sa function
na ito ay pareho ng comments_number
function. Ang $css_class
ay, kitang-kita naman, ang css class na ibinibigay mo sa na <a>
tag at ang $comments_closed
ay ang teksto na dapat i-display kapag ang mga komento ay nakasara. Kapag ginagamit ang temang ito, isa ito
sa mga posibleng paraan para gamitin ito.
1 |
<?php comments_popup_link('No comments', 'One comment', '% comments', 'comments-link', 'Comments are closed'); ?> |
Bibigyan ka nito ng isang link na
mayroon class comments-link
Pag-eedit ng mga komento
Minsan gugustuhin mong agad na makapag-edit ng comment. Sa kabutihang palad, gamit ang edit_comment_link function, madali ka nang makakapunta sa tamang page para i-edit ito, kaysa i-browse ang iyong admin panel para makarating sa sinabing komento. Ganito ang maaaring maging itsura niyan:
1 |
<?php edit_comment_link($link_text, $before_link, $after_link); ?> |
Kailangan mo itong ilagay sa loob ng
foreach
na comment loop. Madali namang intindihin ang mga
parameters: Ang $link_text
ay ang anchor text para sa link pang-edit, ang
$before_link
at $after_link
ay ang mga teksto o code na idi-display bago o
pagkatapos ng link.
Gagawin nitong napakadaling magbago ng isang komento; maaari ka lang mag-dagdag ng isang maliit na ‘Edit’ link sa meta information ng iyong komento (makikita lang ng admin). Ganito ang maaaring maging itsura niyan:



Pagsasalit-salit ng mga kulay para sa mga komento
Posible na gusto mong magkaroon ng salitang mga kulay ng hanay para sa iyong mga komento, para magkaroon ng mas malinaw na paghihiwalay. Madali lang itong gawin. Una, idagdag ang mga sumusunod na code sa taas ng iyong page:
1 |
function alternate_rows($i){ if($i % 2) { echo ' class="alt"'; } else { echo ''; } |
2 |
} |
Pagkatapos ay idagdag ang mga sumusunod
sa loob ng bawat foreach
loop (muli). Maaari mo itong palitan agad ang <li id="comment- <?php comment_ID ; ? >">
nito:
1 |
<?php $i++; ?> |
2 |
<li<?php alternate_rows($i); ?> id="comment-<?php comment_ID(); ?>"> |
Bibigyan nito ang bawat ibang komento ng
class alt
, kaya magiging posible nang baguhin ang itsura ng mga ito sa
pamamagitan ng CSS.
Pinagpasyan kong gumawa ng isang function para dito, upang mabawasan ang kalat sa iyong aktwal na theme file. Maaari mong idagdag ang paglalarawan ng function sa iyong functions.php file kung gusto mo, pero para sa akin, mas may sense na ilagay ito sa itaas ng iyong page.
Ang pagsasalit-salit ng mga hanay ay pinapadali ang pagkilala ng iba-ibang mga komento; kapag napatupad mo ito, maaari kang makakita ng katulad nito:



Pagdi-display ng mga pinapayagang mga tags
Upang mai-display ang code na maaaring gamitin ng mga bisita sa kanilang mga komento, ilagay lang ang munting snippet na ito.
1 |
Allowed tags: <?php echo allowed_tags(); ?> |
Pagkatapos nito’y makakuha ka ng isang listahan ng mga tags na pinapayagan sa iyong mga komento, gaya nito:
RSS link ng mga komento
Upang makakuha ng isang link sa RSS feed para sa mga komento ng isang post, magpasok lang ng isang code sa ilalim ng iyong comments.php file sa kung saan mo man ito gustong ilagay.
1 |
<?php comments_rss_link($link_text); ?> |
Pagkatapos nito’y palitan lang ang
$link_tes
t ng anchor text mula sa RSS link.
Magandang gamitin ito kung gusto mong bigyan ang iyong mga bisita ng pagkakataong magsubsribe sa comment feed para sa isang natatanging artikulo o blog post. Maari mo itong ipatupad sa ganitong paraan:



6. Konklusyon
Sana ay nagustuhan ninyo ang *ahem* munting artikulong ito sa pagsi-skin ng iyong WordPress comments.php file. Maaari mong makuha ang buong code dito, kasama ang mga dayang ipinakita ko:
- mga gravatars,
- salitang kulay ng mga hanay,
- pag-eedit ng link,
- comments rss link.
Halata namang ang comments link ay hindi kasama dahil dapat itong gamitin sa loob ng loop.
Swertehin ka sana sa iyong mga pakikpagsapalaran sa skinning gamit ang WordPress!