iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
2
Modern Web

讓0基礎的你也能製作簡單wordpress主題系列 第 23

【DAY 23 】 Wordpress 主題的comment?讓你也能夠著手設定吧

  • 分享至 

  • xImage
  •  

作為一編文章,當然都希望設有留言區,讓用家可以互相交流,向作者提問。不過,該怎樣才可以為您的wordpress主題設定留言區呢,我們又怎樣,才可以仔細地去設定一下我們的留意的主體距離,這裡我們就來深入探討一下,讓你不但能夠設定留言區,而這個留言區也是像樣子的。

簡單加設留言區

要加設留言區,本身並不是這麼困難。我們只需要在之前post頁面的loop內裡,加入編碼:

<?php if(comments_open()): comments_template();?>

<?php endif;?>

這樣就可以了。

編碼解釋

comments_template就是代表留言區。不過什麼是comments open?為何我們要讓common open時,才會使用comments_template,讓留言區會顯示出來呢?

不知道大家知不知道,其實你是可以在wordpress裏,選擇留言區要顯示還是不顯示出來的,我們還是在之前為文章加入分類和標籤的地方作設定,你會注意到那裡是有個評論的,我們可以透過更改為允許或不允許,來設定留言區該不該顯示出來。

透過設定是否允許評論,就能夠開啟或關閉留言

之前遺漏了沒說,假若是單獨設定,也可以滑向你想設定的文章,接著點選快速編輯,來加入分類,標籤,以及選擇是否允許留言。

![快速編輯文章可要來單獨設定文章用](https://i.imgur.com/584Y5b6.png

所以加入comment open 的原因,當然就是讓文章在允許留言時,才會出現留言區吧。

用comment.php 來修改樣式

上方這樣設定,確實很方便,不過假若希望能夠調整列出的留言數目等等的話,我們就需要用到comment.php檔案來作深入的設定,這裡先上編碼先把:

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

  
    <ol class="post-comments ">
        <?php
          wp_list_comments ( array(
                'walker'      => '',
                'style'       => 'ol',
                'max_depth'   => '',
                'page'        => '',
                'per_page'    => '',
                'avatar_size' => 32,
                'callback'          => null,
                'end-callback'      => null,
                'type'              => 'all',
                'reverse_top_level' => null,
                'reverse_children'  => '',
                'short_ping'  => true,
                'format'      => 'html5',
                'echo'        => true,
            ));
            
        ?>
    </ol>
<?php endif;?>

um,又是if字句,又是array,相信大家也不陌生吧,這裡比較特別的地方,我設定了$args,來代表那些array的內容,這樣做的最大好處,能夠讓你之後,可以設定數個至於如何修改?這次我們會使用到wordpress的wp_list_comments,來更改wordpress的原先的設定。我們每個項目慢慢解釋吧^^

walker

這和選單的walker,用途是相近,您可以把他理解成為一個藍圖,你留言區的根基,沒了他,你無論在下方設定了什麼,也不會看到任何結果。大樓的根基也沒有了,這棟大樓還用建做?這道理也同樣可以完整地套用到留言區裏,就只是把根基改為walker而已。

style

你想要他用什麼形式列出?就可以在這裡設定,假如你不設定,就會是使用ul。

max_depth

說了是留言區,那麼留言總是會有回覆的設定吧,這裡就是要來設定,您希望最多顯示多少個留言?留空代表不設限制,不設限制也有另一個好處,就是用家可以直接透過wordpress來更改。用家正常時可以在,設定,評論裏編輯的。

page

你想你留言區是有數頁紙》這樣剛好,您可以在這裡設定,不設限的話還是老規矩,留空吧。

per_page

既然想有多少頁也可以設定,那麼少不了也可以控制每頁,最多可以顯示多少個留言吧。那麼per_page 剛好可以幫助到你,這裡也是留空,來不設限制。

avatar_size

每天到youtube閒逛的你們,想必也知道吧,每個留言都總會有個小圖像,這個就是要來設定那個小圖像的大小,單位當然還是我們最常用的px吧,不過假若你不是有什麼需要會員登入,而是只要用家簡單輸入電郵和地址,就可以留言,這些通常用家都不能夠設定頭像的,那麼你可以設為0,這樣就沒這個小圖像了。

callback

假若你希望加設function,並且這個function,只會在這個選單裡有效的話,那麼我們就會用到callback,這裡我們就不能得這麼複雜了,所以放null

end-callback

和上方那個差別並不大,分別在於,這個是讓那個編碼,會放到comment編碼的最底部。

type

wordpress留言並不是只有普通的留言(comment),也同時有Ping、Pingback、Trackback這三種,假若選擇為all的話就會允許全部,假若comment的話就會是只有留言,通常建議為all,這樣用家就可以自己設定了。不過這是什麼來呢?他們三個在做網誌,是很常見到的,至少曾經是吧,現在可以用google analytics代替,也更輕鬆,更低風險。

Ping

Ping,主要當網站更新的時候,就會通知你有連結到的瀏覽器,我們有更新啦。除此之外,亦是要來協助Pingback、Trackback能夠正常運作的。

Pingback

Pingback,當別人引用到你的網站時,那麼別人就會收到你傳送過去的留言,告訴別人,我現在引用你文章呀。你說這樣有什麼好處?因為你的文章會夾雜在別人的留言裡,所以,假若有人偶爾看到你的留言,又覺得有興趣,並點了進去看,這樣,某程度上來說,就會增加你網誌的暴光率了。當然,濫發就會被視為是垃圾訊息吧。

對了這個這個是雙向的呀,換句話說,假若別人有引用你的網站,那麼你也會收到別人傳送過來的留言

Trackback

Trackback,和pingback相近,不過前者是自動發送,而這裡則需要人手設定。

wordpress調整方法

這裡也順便說說,大家可以在wordpress裏,設定要不要這些功能的,點選設定--> 討論,你會看到
「嘗試通知網站內容中所連結的任何網站」 和 「開放其他網站對新文章傳送連結通知 (即自動引用通知及引用通知)」,只要不勾選,那麼就可以取消這個pingback和trackback的設定了。

reverse_top_level 和 reverse_children

前者主要要來調整留言,是否會由最新到最舊去顯示。而後者,則主要是要來調整,那些回覆,是否由最新到最舊去顯示

short_ping

剛剛說了什麼是ping吧,那麼這個就能夠把那些ping壓縮一下,讓它們不會佔那麼大的空間,這個要麼是true,要麼是false

format

這裡是要來設定,您希望會是用什麼html格式來寫的,假若你有需要,我們可以在這裡設定xhtml。假若不設定呢?那麼就會是html5了。你說什麼是xhtml?簡單來說,就是一個格式更嚴格,某程度上可以更有利瀏覽器讀取的html,因為html5,還是會允許一些錯誤的寫法,例如不把編碼關閉,例如元素用大楷等等,這些會增加瀏覽器,讀取網頁內容的難度。假若用xhtml,就能夠杜絕這一切了。不過我們這裡是用不到的,所以還是用原先的設定就可以了。

echo

相信大家還記得echo吧,不過你可能並不是每次都希望所有內容,會直接放到螢幕上,而是您希望暫時先存起來,當要用的時候,先作一些小修改,然後才顯示到螢幕上。那麼你就需要用false,把他關掉了,假若您希望保持原狀?那麼繼續用原先設定的true,就可以了。

補充

大家不用這麼傻,每次把所有內容都輸入進去,只需要把需要更改的,放進去就可以了。我上方可能沒說得那麼清楚,那些才是官方的原先設定,大家可以到wordpress的 wp_list_comments 頁面查看。

調整表格的樣式

你現在看看發表時,用家需要填寫的表格,你會發現,非常難看

表格樣式在沒使用function修改前的模樣

我們可以在function加入編碼,來修改內裡的設定,編碼分為兩個部份,第一個部分是不包括按鈕的,看下方編碼:

function comment_form_redecoration ($fields) {

    //加入placeholder 及移除label
    
    $fields['author'] = '<div class="form-row mb-3"> <div class="col"> <input id="name" name="name" value="" class="form-control" placeholder="Name*" required="required" type="text"></div>';

    $fields['email'] = '<div class="col"> <input id="email"  class="form-control" name="email" type="email" value="" placeholder="Email*"  aria-describedby="email-notes" required="required"></div></div>';	

    //重設評論,讓評論可以重新出現在方格的頂部
    unset($fields['comment']);

    $fields['comment'] = '<textarea class="form-control mb-3" id="comment" name="comment"  rows="3" placeholder="Comment*" required="required"></textarea>';

    //移除連結欄位
    unset($fields['url']);


    return $fields;
}

add_filter('comment_form_fields', 'comment_form_redecoration');

雖然這裡看似很複雜,不過其實也只是php編碼,然後加入了bootstrap罷了,author,email,comment這些,是wordpress本身設定的要來控制作者,電郵,評論這些欄位。unset,要來重設或者移除時用的。textarea主要要來設定,評論那個欄位的,當中的row,代表著高,至於bootstrap部份,大家可以到bootstrap 的 form control 以及 bootstrap對於form的overview參考一下他們的編碼,因為原理和之前說的search form其實非常相近,這裡就不再解釋了。

$fields,這是wordpress設的一個變數。

按鈕部份

function comment_form_redecoration_button ($defaults) {

  $defaults['class_submit']= 'btn btn-info ';

  return $defaults;
}
add_filter('comment_form_defaults', 'comment_form_redecoration_button');

為什麼我們這次是用$defaults,而不是用$field,假若你注意一下wordpres檔案,就會看到上方那些是在$fields = array( 裡面的 ,您可以在2332行看到。 而button則是在$defaults = array( 裡面的,可以在2410行看到,button的相關設定則在2453行至2468行。

最後comment的部份,大家可以自行嘗試用css來修改看看,只要用回之前學習到的技巧就可以了,這裡我就不再詳細說明


上一篇
[Day22] 想為wordpress主題加入搜尋功能?看這篇你就會了
下一篇
【Day 24】 Wordpress WP_Query小入門,帶你看看WP_Query世界,讓你簡單操控wordpress loop
系列文
讓0基礎的你也能製作簡單wordpress主題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言