2015-10-08 153 views
0

我正在開發一個項目,我需要列出所有的類別,子類別(子項目,大孩子等到第5級)以及其中的帖子。目前,我已經設法使網站正常工作,但問題是網站需要幾分鐘才能加載。Wordpress顯示成千上萬的帖子

要什麼我希望自己的網站看起來像清晰,這裏有一個圖紙:

類別 子類 Subsubcategory 內容 Subsubcategory 內容 子類別 你明白了

這裏是代碼:

<?php 
    function listing($parentcat, $list_id='', $list_name='', $path=false) { 
     // parentcat is the desired category parent category, which is defined because the function is called a few times with different sets on the page. 

     // list_id, list_name and path are used for purposes not related to the question 

      echo "<ul><li name='$list_name'><h2><a href='#$list_name'>$list_name</a></h2>"; 
     } 

     $args = array(
      'parent' => $parentcat, 
      'include' => $cat_ids, 
      'hide_empty' => 1, 
      'orderby' => 'id' 
     ); 

     $categories = get_categories($args); 
     echo "<ul>"; 
      foreach ($categories as $cat) { 
       if ($cat->cat_name != 'Uncategorized') { 

        $flat_path = substr(get_category_parents($cat->cat_ID, false, ' &raquo;'), 14); 
        $catnam = $cat->cat_name; 

        $listtitle = ($path ? $flat_path : $catnam); 
        echo ('<li name="' . $cat->cat_ID . '"><h2><a href="#' . $cat->cat_ID . '">' . $listtitle . '</a></h2>'); 

        if (get_posts("category_name=$catnam")) { 
         if (have_posts()) : while (have_posts()) : the_post(); 
         if (in_category($cat->cat_ID)) { 
           echo '<ul><li><div>'; 
            the_content(); 
           echo '</div></li></ul>'; 
         } endwhile; 
         else : 
         _e('Empty list'); 
         endif; 
        } 

        // Here's a recursive call for the function 
        listing($cat->cat_ID); 
        echo '</li>'; 
       } 
      } 
     echo '</ul>'; 
    } 
    ?> 
+0

曾嘗試使用替代函數模板部分,創建一個模板,這個遞歸。看到這個子模板http://stackoverflow.com/questions/32585441/woocommerce-plugin-nested-products -for-subcategories/32602389#32602389有這樣的事情,但我在他的網站上爲他做了。 –

回答

1

你可能會在這裏失去了上崗

'posts_per_page' 看看http://codex.wordpress.org/Function_Reference/get_posts

&

'數' 的類別

看一看這裏http://codex.wordpress.org/Function_Reference/get_categories

+0

在正常情況下,它會這樣做。事情是,我需要一次加載所有的內容。這絕對不是好的做法等,但該網站的邏輯要求他們都立即加載。 – Petri

+0

你的問題是頁面加載速度問題?如果是,那麼分頁就是解決方案。 –

0

發現的解決方案!我會回答自己的問題,如果其他人需要類似的東西,答案就在這裏。

基本上,重點是首先創建一個包含所有類別的數組。之後,可以簡單地遍歷數組。這樣我們就可以避免遞歸地使用The Loop,這可能是以前解決方案中最大的問題。

即使這個解決方案真的很慢,但在過去的一個令人難以置信的改善。大約30秒後,第一個想法在超時之前加載了幾百個帖子。這個人在5-10秒內得到整個網站(約1500個帖子)。速度非常糟糕,但隨着我們網站的使用方式以及將所有內容劃分爲單獨帖子的附加功能超過了速度問題。

$categories = get_categories('orderby=id'); 

    $cats_by_parent = array(); 

    foreach ($categories as $cat) { 
     $parent_id = $cat->category_parent; 
     if (!array_key_exists($parent_id, $cats_by_parent)) { 
      $cats_by_parent[$parent_id] = array(); 
     } 
     $cats_by_parent[$parent_id][] = $cat; 
    } 

    $posts = get_posts(['posts_per_page' => 10000000]); 
    $posts_by_cats = array(); 

    foreach ($posts as $post) { 
     $cat_id = wp_get_post_categories($post->ID)[0]; 
     $posts_by_cats[$cat_id] = $post->post_content; 
    } 

// Loop through the array and print with: 
    echo $posts_by_cats[$cat->cat_ID];