四种wordpress常用的循环结构
wordpress循環結構是一個主題模版的最重要的部分,當你打開index.php文件的時候通常都會看見很具代表性的 if(have_posts()) 語句,包含在其中的就是wordpress的循環結構語句,當然默認的循環方法已經可以很完美的運行在執行單一循環的主題中。
如果你想制作更加高級的設計,我們就應該了解一些多樣性的自定義循環,所以學習更加強大的循環是十分必要的,幸運的是wordpress已經為我們提供了四種靈活的循環結構供我們使用。
默認循環
query_posts() 循環
WP_Query() 循環
get_posts() 循環
這幾種循環方式足以應付各種各樣的需求,它們都各自都包含了相同的底層功能,接受查詢參數的方式從本質上來說也是相同的,這四種技術可以同時運用到你的wordpress主題中。如果你想查看默認循環,最直接方式是打開index.php文件它就包含在里面。它們的功能就是將存儲在數據庫中的文章循環出來,通過瀏覽器顯示給用戶,然后根據模版標簽輕松的循環出文章標題、內容、關鍵詞甚至更多內容,下面我們就來認識一下這四種wordpress循環方式。
默認循環 默認循環通常看起來像這樣:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
<h1><a href="<?php%20the_permalink();%20?>"><?php the_title(); ?></a></h1>
<?php the_content(); ?>
</div>
<?php endwhile; ?>
<div class="navigation">
<div class="next-posts"><?php next_posts_link(); ?></div>
<div class="prev-posts"><?php previous_posts_link(); ?></div>
</div>
<?php else : ?>
<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
<h1>Not Found</h1>
</div>
<?php endif; ?>
那么為什么要使用默認循環?因為大部分情況下默認循環可以為我們循環出文章發布的內容,起初對于大多數主題來說都會使用這種默認循環。它會告訴wordpress通過循環遍歷出所有發布的文章信息,包括各種各樣的模版標簽(文章標題,文章內容..),它會根據有效的標簽來識別存儲在數據庫中的數據種類。
根據發送的數據查詢,默認循環將會根據日期或者分類欄目中遍歷出一定數量的文章等等。
所以如果只想做一些基本的遍歷方式默認循環已經運行的非常好了,如果你想做的更多就應該自定義一些查詢條件使它為你做更多的事情。
query_posts()循環
query_posts 循環功能可以讓我們修改查詢和修改想要獲取的文章信息,我們只需要修改一些參數來覆蓋之前的查詢方式。
<?php global $query_string; // 必須 $posts = query_posts($query_string.'&cat=-9'); // 排除 category 9 ?> <?php //循環內容 ?> <?php wp_reset_query(); // 重置 query ?>
如果你有一個默認的循環方式,但是你想改變一下文章顯示的數量,并且排除兩個分類欄目的文章,最后還要按照正序排序的方式遍歷出來,那么你只需在循環之前添加變量參數即可。
<?php global $query_string; // 必需 $posts = query_posts($query_string.'&posts_per_page=3&cat=-6,-9&order=ASC'); ?> <?php // 循環內容?> <?php wp_reset_query(); // 重置 query ?>
當然如果你愿意你同樣可以使用以下代碼覆蓋第二句查詢,實現的效果是一樣的。
$posts = query_posts('posts_per_page=3&cat=-6,-9&order=ASC');
值得注意的一點就是我們已經將$query_string參數 從query_posts中移除了。但這意味著很可能顯示不出分頁信息,所以在移除該參數之前應該清楚自己想要什么樣的效果。
在什么樣的情況下可以使用? 我們可以使用query_posts 對參數的修改修改來執行一些簡單的循環,包括限制文章顯示數量,排除指定分類欄目,標簽等等。 如果你需要更加強大復雜的循環方式當然query_posts也可以勝任,但是最好方式是使用WP_Query。
WP_Query()循環
為了想完全控制文章循環的數量,WP_Query 可以勝任這一任務,當我嘗試去修改默認的循環方式時,它看起來和query_posts非常相似。例如,使用WP_Query排除一些指定的category:
<?php $custom_query = new WP_Query('cat=-9'); // 排除 category 9
while($custom_query->have_posts()) : $custom_query->the_post(); ?>
<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
<h1><a href="<?php%20the_permalink();%20?>"><?php the_title(); ?></a></h1>
<?php the_content(); ?>
</div>
<?php endwhile; ?>
<?php wp_reset_postdata(); // reset the query ?>
它接收了與query_posts相同的參數,包括排除或者包括指定categories以及修改顯示文章數量上它們基本上時一致的。但是你再看一下下面這幾段代碼你就會發現在使用自定義循環方面 WP_Query 會方便許多而且也非常容易修改參數。
$custom_query = new WP_Query('cat=-7,-8,-9'); // 排除指定 categories
$custom_query = new WP_Query('posts_per_page=3'); // 限制文章顯示數量
$custom_query = new WP_Query('order=ASC'); // 按照正序排序
正如我們所想的那樣,WP_Query 可以使用與query_posts 和get_posts相同的組合語法進行循環調用。
$custom_query = new WP_Query('posts_per_page=3&cat=-6,-9&order=ASC');
需要注意的是,無論在什么情況下只要你使用了WP_Query循環,那么我們就不再需要$query_string這個變量了,除了使用WP_Query 自定義默認循環外,我們也可以使用它來自定義更加多樣的循環,以下是代碼示例:
<?php // 循環1
$first_query = new WP_Query('cat=-1');
while($first_query->have_posts()) : $first_query->the_post();
...
endwhile;
wp_reset_postdata();
// 循環2
$second_query = new WP_Query('cat=-2');
while($second_query->have_posts()) : $second_query->the_post();
...
endwhile;
wp_reset_postdata();
// 循環 3
$third_query = new WP_Query('cat=-3');
while($third_query->have_posts()) : $third_query->the_post();
...
endwhile;
wp_reset_postdata();
?>
以上每一種循環方式都可以使用到你主題的任何地方,無需為它們進行排序,例如第一個循環可以放在側邊欄的位置,第二個放在頁腳的位置等等。每一種循環都很容易使用,你可以輸入一些有效的參數對其進行修改。
在什么樣的情況下可以使用? WP_Query 可以用在多樣的自定義循環中,通過設置一些額外的功能,你可以創建任意數量的多個循環然后自定義每一種循環的輸出方式。
盡管如此,我們也并不需要每一次都派它上場,有些簡單循環你可以用之前的兩種循環就足夠了。
get_posts() 循環
使用get_posts() 可以在你的主題中很方便的創建多樣化的循環,使用這種方法也是比較安全可靠的,你可以在任何地方快速的遍歷出文章,你可以嘗試使用 get_posts 。假如你想遍歷出最新發布的十篇文章,或者隨機發表的文章。使用get_posts將變得非常容易,下面是一些簡單的例子:
<?php global $post; // 必需
$args = array('category' => -9); // 排除 category 9
$custom_posts = get_posts($args);
foreach($custom_posts as $post) : setup_postdata($post);
...
endforeach;
?>
值得注意的是,無論什么情況下, get_posts是需要一個數組接收參數的,以下是使用數組的組合方式。
$args = array('numberposts'=>3, 'category'=>-6,-9, 'order'=>'ASC');
總結
以上是生活随笔為你收集整理的四种wordpress常用的循环结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度网盘创建无提取码链接
- 下一篇: 美剧字幕绿箭侠第1季第7集