fbpx

《WP筆記》不用外掛使用隨機文章、相關文章、文章分頁功能

隨著Wordpress愈來愈風行,隨之而起的外掛也愈來愈多,一不小心隨便裝都2.30個外掛,也有看過有人裝了50個以上,不過外掛裝的愈多愈耗記憶體,也容易拖慢網頁速度,所以能不用外掛就盡量不要用外掛,特別是一些比較簡易的功能像是《隨機文章、相關文章、文章分頁》這些其實如果在製作佈景時就可以順便加進去,減輕網站的一些負擔。

00

以下的代碼不像別人所分享的是直接將全部代碼加在佈景裡,而是先在functions裡寫好函數再到佈景裡調用,這樣在佈景裡看到的函數就不會感覺亂亂的,往後比較好修改,有需要的可以參考,丫湯也是能整合到佈景裡的功能都盡量整合,目前使用的外掛大約10幾個。

 

隨機文章:

前台呼叫語法:

<?php s_random_lists(); ?>

以下內容加入functions.php

<?php

function s_random_lists($num_limit = 5 , $exclude = "" , $date_limit = "" , $echo = true , $list = true){

        $out = "";

        if ( $num_limit < 1 ) $num_limit = "-1";

        if ( !$date_limit_ts = strtotime($date_limit) ) $date_limit = false;

        if ( !$date_limit ){

            $posts = get_posts('offset=0&numberposts='.$num_limit.'&exclude='.$exclude.'&orderby=rand');

        } else {

            $posts = get_posts('offset=0&numberposts=-1&exclude='.$exclude.'&orderby=rand');

        }

        $postscount = count($posts);

        if ( $num_limit < 1 ) $num_limit = $postscount;

        if ( $postscount < $num_limit ) $num_limit = $postscount ;

        for ( $i = 0 ; $i < $num_limit ; $i++ ){

             if ( !$date_limit or $date_limit_ts < strtotime( $posts[$i]->post_date )){

                if ( $list ) $out.= '<li class="random-post-link">'."\n";

                  $out.= '<a href="'.get_permalink($posts[$i]->ID).'" title="'.$posts[$i]->post_title.'">'.$posts[$i]->post_title.'</a>'."\n";

                if ( $list ) $out.= '</li>'."\n";

            }else{

                if ( $postscount > $num_limit ) $num_limit++;

            }

        }

        if ( $list ) $out = '<ul class="random-post-link">'."\n".$out.'</ul>'."\n";

        if ( $echo ){

              echo $out;

        } else {

            return $out;

        }

    }

?>

顯示文章數量設定:

$num_limit = 5 ,修改為要顯示的數量即可。

 

相關文章:

前台呼叫:

<?php s_related_posts(); ?>

以下內容加入functions.php

<?php

function srelated_posts($before_title="",$after_title="") {    

    global $wpdb, $post,$table_prefix;

    if(!$post->ID){return;}

    $now = current_time('mysql', 1);

    $tags = wp_get_post_tags($post->ID);

    

    $taglist = "'" . $tags[0]->term_id. "'";

    

    $tagcount = count($tags);

    if ($tagcount > 1) {

        for ($i = 1; $i < $tagcount; $i++) {

            $taglist = $taglist . ", '" . $tags[$i]->term_id . "'";

        }

    }    

    $limitclause = "LIMIT 5";    

    $q = "SELECT p.ID, p.post_title, p.post_content,p.post_excerpt, p.post_date,  p.comment_count, count(t_r.object_id) as cnt FROM $wpdb->term_taxonomy t_t, $wpdb->term_relationships t_r, $wpdb->posts p WHERE t_t.taxonomy ='post_tag' AND t_t.term_taxonomy_id = t_r.term_taxonomy_id AND t_r.object_id  = p.ID AND (t_t.term_id IN ($taglist)) AND p.ID != $post->ID AND p.post_status = 'publish' AND p.post_date_gmt < '$now' GROUP BY t_r.object_id ORDER BY cnt DESC, p.post_date_gmt DESC $limitclause;";    

    $related_posts = $wpdb->get_results($q);

    foreach ($related_posts as $related_post ){

        $output .=  '<li><a href="'.get_permalink($related_post->ID).'" title="'.wptexturize($related_post->post_title).'">'.wptexturize($related_post->post_title).'</a></li>';            

    }    

    $output = '<ul class="related_post">' . $output . '</ul>';        

    return $output;

}

function s_related_posts(){

    $output = srelated_posts() ;

    echo $output;

}

?>

顯示文章數量設定:

$limitclause = "LIMIT 5";,修改為要顯示的數量即可。

 

文章分頁:

前台呼叫:

<div id="spagenavi"><?php s_pagenavi(); ?></div>

CSS部份(style.css):

#paviinfo{border: 3px double #bfbfbf;padding:2px 5px;margin:0 2px;float:left;text-align:center;}

#spagenavi{float:right;font-size:13px;font-family:Arial;display:inline-block;}

#spagenavi a{color: #333;float:left;padding:2px 5px;border: 3px double #bfbfbf;margin:0 2px;text-decoration:none;}

#spagenavi a:hover{border-color: #BA0000;}

#spagenavi a.current{border-color: #0075b8;}

以下內容加入functions.php

<?php

    function s_pagenavi($range = 6){

  global $paged, $wp_query;

  if ( !$max_page ) {

    $max_page = $wp_query->max_num_pages;

  }

  if($max_page > 1){

    if(!$paged){

      $paged = 1;

    }

echo '<div id="paviinfo">文章頁次'.$paged.'/'.$max_page.'</div>';

    if($paged != 1){

      echo "<a href='" . get_pagenum_link(1) . "' class='extend' title='首頁'>首頁</a>";

    }

    previous_posts_link(' « ');

    if($max_page > $range){

      if($paged < $range){

        for($i = 1; $i <= ($range + 1); $i++){

          echo "<a title=".'"第'.$i.'頁"'. "href='" . get_pagenum_link($i) ."'";

          if($i==$paged) echo " class='current'";

          echo ">$i</a>";

        }

      }

      elseif($paged >= ($max_page - ceil(($range/2)))){

        for($i = $max_page - $range; $i <= $max_page; $i++){

          echo "<a title=".'"第'.$i.'頁"'. "href='" . get_pagenum_link($i) ."'";

          if($i==$paged) echo " class='current'";

          echo ">$i</a>";

        }

      }

      elseif($paged >= $range && $paged < ($max_page - ceil(($range/2)))){

        for($i = ($paged - ceil($range/2)); $i <= ($paged + ceil(($range/2))); $i++){

          echo "<a title=".'"第'.$i.'頁"'. "href='" . get_pagenum_link($i) ."'";

          if($i==$paged) echo " class='current'";

          echo ">$i</a>";

        }

      }

    }

    else{

      for($i = 1; $i <= $max_page; $i++){

        echo "<a title=".'"第'.$i.'頁"'. "href='" . get_pagenum_link($i) ."'";

        if($i==$paged) echo " class='current'";

        echo ">$i</a>";

      }

    }

    next_posts_link(' » ');

    if($paged != $max_page){

      echo "<a href='" . get_pagenum_link($max_page) . "' class='extend' title='最後一頁'>最後一頁</a>";

    }

  }

}

    ?>

文章分頁效果:

01




你可能對這些內容也有興趣

作者:阿湯

對電腦 & 網路資訊充滿興趣與熱情、瘋了似的每日堅持發文,「阿湯」這個名字是由湯姆克魯斯而來的,雖然我沒有他帥氣,也不會演電影,但我會寫文章....

更多關於的文章》

23 個留言

  1. 小蘭表示:

    阿湯哥…請問放在functions.php裡的任意位置嗎???謝謝!!

    阿湯 說:

    是的

  2. Amy表示:

    再補充一下,每天發佈的文章數量不是固定的.有時多,有時少.但希望按照日期,把每天的文章隨機出現.首頁會出現2-3天的文章.謝謝.

    阿湯 說:

    程式相關請來信另外報價,感謝

  3. Amy表示:

    您好,請問,若是我每天發佈20篇文章,我希望文章按照日期隨機出現.也就是今天的20篇隨機出現在1-20則.昨天的文隨機出現在21-40則.以此類推.請問該怎麼寫?

    阿湯 說:

    程式相關請來信另外報價,感謝

  4. dichao表示:

    文章分頁要如何使用啊!谢谢!就是加入后文章如何显示这个分页!

    阿湯說:

    教學裡不是都寫了嗎

  5. aj表示:

    1.functions.php 有好幾個 , 要改哪個 ?
    2.
    想顯示在側邊攔, 要加在哪個 php 檔的哪個段落 ?

    阿湯說:

    sidebar.php,剩下就自己研究囉

  6. 小奕表示:

    阿湯哥

    有沒有辦法把那個相關文章關掉或移除呢?

    阿湯說:

    你是佈景就有內建?從檔案找出來刪掉相關語法即可

  7. 小奕表示:

    丫湯哥你好!
    我在文章內插入繼續閱讀後
    回到首頁進入繼續閱讀文章
    而我在最下方發現相關文章
    可是他連相關文章的內容都一併顯示出來
    感覺很亂!
    有解決的方法嗎?
    或者可以只顯示標題就好不要連內容一起顯示!

    阿湯說:

    應該沒有內容吧~

  8. Jai1breaker表示:

    請問頁數12345的顏色怎麼改?
    因為我背景已經是黑的了= =

    阿湯說:

    那要自己修改外掛裡的css檔案囉

  9. 很实用的一个教程。。谢谢了。。

    阿湯說:

    不客氣

  10. needhelp表示:

    可不可以教一下相關文章改成依分類生成要怎麼改
    感謝^^

    阿湯說:

    依照每個分類生成相關文章??

  11. Punkhippie表示:

    0.0 這樣修改的話,收費會是多少?

    阿湯說:

    為了你的荷包著想,建議你還是用內建的插件

  12. Punkhippie表示:

    @@很難修改的嗎?我還以為取代代碼就可以呢!

    阿湯說:

    如果要和inove對換代碼不難,但我除了是佈景本身問題外,其它修改都是收費的

  13. Punkhippie表示:

    但iNove本身要搭配插件才能用,不可以改成不用插件嗎?
    而且文章分頁也是,我照上面的修改,後台會出現錯誤語句,也是因為iNove本身有內置的關係嗎?但兩個都要再安裝插件才可以用!/.\

    阿湯說:

    如果要幫你修改佈景為你要的功能,我這邊是收費的哦

  14. Punkhippie表示:

    我用的是iNove主題,他本身有集合下面那個插件,他是在無TAG的情況是就顯示隨機文章,因為我覺得這樣比較省位,可是我照上面來修改,只用成隨機文章而已,就算有TAG也沒有變成顯示相關文章,請問一下要如何修改才能做到呢?如果沒辦法的話,那又要再安裝插件囉!/.\

    http://wordpress.org/extend/plugins/wordpress-23-related-posts-plugin/

    阿湯說:

    inove寫的方法不一樣吧,其實inove作者已經寫的很好了.不需要替換

  15. andyckchen表示:

    全停~還是一樣,無法顯示

    阿湯說:

    那應該是和佈景的函數有衝到,就建議用其它外掛囉

  16. andyckchen表示:

    問一下哦!相關文章有需要特別的文字還是啥設定嗎?不然他怎知道是相關的?因為我隨機文章出的來,相關是空白的,很怪

    阿湯說:

    語法如果都有插入的話,如果空白有可能是其它相關的外掛衝突或是佈景衝突,你可以試試把外掛先全部停用試試

  17. Mr. ㄏㄧㄡˇ表示:

    ㄚ湯哥您好
    這兩天努力的結果 終於把分頁給弄成功了
    不過 卻衍生出一些問題…
    針對文章做動作(編輯 新增 刪除等…)會出現錯誤如下
    Warning: Cannot modify header information – headers already sent by (output started at /home/flopfree/public_html/wp-content/themes/azul/functions.php:9) in /home/flopfree/public_html/wp-includes/pluggable.php on line 868

    Window Live Writer也會無法發布..
    但是把這些code移除掉 就又正常了

    我的做法是 把那些code分別加入azul這佈景的檔案index.php functions.php style.css

    阿湯說:

    恭喜你哦

  18. Mr. ㄏㄧㄡˇ表示:

    您好
    我是WP初學者 想跟您請問一下
    甚麼是前台呼叫?? 是index.php那個嗎?

    阿湯說:

    就是放在你要顯示的地方

  19. 事件表示:

    很不錯的筆記兼教學,已套用了,感恩^^

    阿湯說:

    歡迎常來學習

  20. 表示:

    php s_random_lists();
    在試一次看看…

    阿湯說:

    放在你要顯示隨機文章的地方

  21. 表示:

    請問 .. 此行需要加在哪?
    有點不解,
    昨天回文
    .. 突然不見- –

    好像很不錯用的樣子 :as51

    阿湯說:

    哪一行呢?

  22. waxd表示:

    謝謝阿湯哥的教學,已經成功加入部落格中囉~
    繼續爬文去..^^

    阿湯說:

    歡迎常來哦

  23. 易春木表示:

    喔!! 的確
    外掛不之不覺越變越多

    阿湯說:

    少一點好

發表留言 »

姓名(*)
信箱(*)