2013-02-03 38 views
1

我有一個問題,因爲某些原因,試圖添加到側欄的基本循環保持....保持在內部頁面(單頁和頁面.php)上循環但不在index.php上。WordPress的基本循環問題

on index.php(主頁)很好。

例如,我想循環來填充無序列表行項目,所以我去一下這樣的:

 <div id="sideBarMain"> 
     <h2>title4sidebar</h2> 
     <ul>  
      <?php 
      query_posts(array ('category_name' => 'left_sidebar', 'posts_per_page' => 4, 'orderby=menu_order')); 
      if (have_posts()) : while (have_posts()) : the_post(); ?> 
      <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> 
      <?php endwhile; endif; ?> 
     </ul> 

     </div><!-- sidebar ender --> 

有幾件事情正在發生。 1.最常遇到的問題是,當這個循環到位時,它會導致導航等全部中斷。我點擊一個頁面,頁面加載與標題上的列表項目之一...所以如果我點擊主要導航上的「關於我們」,頁面加載「行項目標題」,而不是.... 。

也發生在任何被點擊的物品上。

2 - 是在(page/single.php頁面)上,在側邊欄上,它會發布類別爲「left_sidebar」的前4個帖子應該如何顯示,css是否到位以及除了第四行項目,它會再次重複循環。

3 - 我的網站內容區域有2列,左邊的邊欄和中間的主要內容區域。在錯誤重複的部分(循環重複之後),當我使用FireBug檢查重複的行項目時,它也從我假設的H標記屬性中假設了一個h標記,它旁邊是另一列。因此,前4款產品通過CSS,鏈接顏色,翻轉等賦予它們的樣式表現良好,接下來的4款產品出類拔萃,永久鏈接也不會像前4款一樣適用於它們。

3 - 我刪除了所有的HTML從該循環像divs和ul/lis等所以沒有CSS應用,這種方式只有文本從循環出現,但同樣的事情發生,因爲我刪除了HTML第一個4裏的想出了標準的默認藍色鏈接文本等,以下越野車4出現以前所有與附加htags大所有相同...

排除故障全部, - 只有一個來自邊欄的頁面循環。 - 我正確地清除了所有漂浮物 - 在檢查W3C的錯誤等時,沒有。綠燈通過和通過。 - 在php方面沒有錯誤。 (一次檢查每個頁面並且啓用錯誤)在本地服務器上。

im lost。

關於可能發生什麼的任何想法?

注:超前的思維,雖然有一個僅環的sidebar.php的頁面上,一旦進口技術上那裏有2個循環。我想這側邊欄WP循環和page.php文件/ single.php中環,其獲得內容。

有什麼不同的最新WP可能?我總是這樣做,現在我有問題......

有什麼想法?我迷路了。

謝謝先進。

+1

多後:http://wordpress.stackexchange.com/q/84336,請檢查:http://meta.stackexchange.com/q/64068 – brasofilo

回答

2

你的問題是雙重的:

1)這是imperitive您停止使用query_posts。關於爲什麼使用此功能需要結束,有許多有據可查的理由,但我認爲this is the best explanation

2)您沒有重置您的查詢。更多關於這一點。

回到數字1,query_posts的問題是它影響全局$ wp_query對象。如果你的意圖是修改主循環,這樣可以,但這不是你在這裏要做的。你需要使用的是WP Query。創建新查詢對象的語法與query_posts相同,但好處是您不再影響$ wp_query的全局實例。

重置您的查詢還可確保使用Wordpress查詢的其他代碼段不會受到查詢對象的影響。

試着改變你的代碼示例如下:

<?php 
$query = new WP_Query(array('category_name'=>'left_sidebar','posts_per_page'=>4,'orderby=menu_order')); 
if($query->have_posts()) : while($query->have_posts()) : $query->the_post(); 
?> 
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> 
<?php 
endwhile;endif; 
wp_reset_postdata(); 
?> 
+1

+1良好的答案和偉大的鏈接到WordPress的Stackexchange線程,第一次我看到了。這是一個很好的答案,我甚至可以假裝流程圖尚未在漫畫sans中完成:) – McNab

1

您的functions.php中可能會有一些與這些函數交互的過濾器。看看那裏,看看你是否想找到一些東西。

您也應該在循環之前和之後嘗試使用<?php wp_reset_query(); ?>,以確保它不與其他人交互。