<legend id="q3juh"><pre id="q3juh"></pre></legend>
  • <li id="q3juh"><acronym id="q3juh"></acronym></li>
  • <progress id="q3juh"></progress>

    1. <th id="q3juh"></th>
      <em id="q3juh"><acronym id="q3juh"></acronym></em>

      会员登录 您是新人?

         QQ登录

      会员注册

      Wordpress管理员之家QQ群:wordpress技术群注册会员,享受更多主题专属优惠!

      WP管理员之家

      ?

      WP_Query、query_posts() 和 get_posts()应该在什么时候使用

      WordPress输出文章最常见的函数是query_posts(),但query_posts()不是唯一的方式,而且乱用query_posts()不是一个好习惯。get_posts()或者WP_Query也可以达到相同的作用。看了一篇文章,描述了这三者的区别。

      query_posts()

      query_posts()主要用来输出主循环,并且会创建很多全局变量。因此不适合到处使用,最佳使用场所就是输出主循环,别的地方能不用就不要用。如果一定要用,记得在输出结果以后使用wp_reset_query()函数重置查询结果,防止意外修改主循环和全局变量产生一堆莫名其妙的错误。

      1. query_posts()是最简单的,但不是首选或最有效率,主要用来改变文章的显示方式。改变主查询,使WordPress用来显示文章。它通过把主查询放到一边,并替换为一个新的查询。在query_posts后需要清理,用wp_reset_query(),使原来的主查询恢复。
      2. 基本结构(无法分页)
      3. ?<?php?query_posts(?$args?);??>
      4. <?php?while?(?have_posts()?)?:?the_post();??>
      5. ...
      6. <?php?endwhile;??>
      7. <?php?wp_reset_query();??>
      8. query_posts函数添加在主循环前,如果后面还有循环函数,需要在循环结束后增加<?php?wp_reset_query();??>来重置query
      9. 控制分类文章
      10. ?<?php?query_posts(?"cat=1,5,6"?);??>
      11. 只显示分类ID为1,5,6的文章,要排除分类ID为35的文章只需在分类ID前增加1个减号<?php?query_posts(?‘cat=-3,-5′?);??>
      12. 显示特定文章
      13. ?<?php?query_posts(?"p=2"?);??>
      14. 只显示ID为2的文章
      15. 使用query_posts控制文章数量
      16. ?<?php?query_posts(?"posts_per_page=5"?);??>
      17. 显示最多5篇文章
      18. 使用query_posts控制文章排序方式
      19. ??<?php?query_posts(?"orderby=value"?);??>
      20. 详见?orderby参数说明
      21. 多参数结构(支持分页)
      22. ?<?php
      23. $paged?=?(get_query_var("paged"))???get_query_var("paged")?:?1;
      24. $args?=?array(
      25. "orderby"?=>?"rand",
      26. "paged"?=>?$paged
      27. );
      28. query_posts($args);
      29. ?>
      30. 把参数写在’paged’?=>?$paged上面就可以了,上例中只写了一个文章排序方式为随机的参数,’orderby’?=>?‘rand’,每个参数结束后用半角逗号来结束
      31. 使用query_posts控制显示哪些分类,TAG标签或特定的文章
      32. ??"category__in"?=>?array(?1,?3)
      33. 只显示分类ID为13的文章,如果需要排除分类ID为24的文章则用’category__not_in’?=>?array(2,?4),
      34. 要显示某个分类区间的文章,’category__in’?=>?range(3,?6),显示分类ID3到6的文章。
      35. 同理,需要控制显示哪些TAG标签的文章,只需要将该参数的category改为tag,如’tag__in’?=>?array(?5,?8),只显示标签ID为58的文章。
      36. 将参数的category改为post则能控制显示哪些ID的文章,’post__in’?=>?array(2,4,6),只显示ID为2,4,6的文章,如果只想显示置顶文章,则将array(2,4,6)改成get_option(‘sticky_posts’)
      37. 使用query_posts控制文章数量
      38. ?"showposts"?=>?5?或?"posts_per_page"?=>?5
      39. 显示最多5篇文章,如果把5改成-1,则显示所有文章
      40. 使用query_posts控制显示指定自定义字段的文章
      41. ?"meta_key"?=>?"sort",
      42. "orderby"?=>?"meta_value_num",
      43. 只显示自定义字段为sort的文章,且按照sort值的大小来排序,值填写数字就可以按照数字从大到小的顺序排序了,从而可以自由的排序文章。
      44. 在分类页中使用query_posts函数
      45. ??"category__in"?=>?array(get_query_var("cat"))
      46. 如果是在分类页中使用,需要调用当前分类的ID,那么直接在array的括号内填写
      47. ?get_query_var("cat")
      48. 但是如果该分类有子分类,使用上面的方法并不会显示子分类的文章,想要显示所有子分类的文章就把上面的代码替换为
      49. ?"cat"?=>?get_query_var("cat")
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      //get_posts参数
      <?php
      $args = array(
      ?'numberposts'? => 5,
      ?'offset'??? => 0,
      ?'category'? => ,
      ?'orderby'?? => 'post_date',
      ?'order'???? => 'DESC',
      ?'include'?? => ,
      ?'exclude'?? => ,
      ?'meta_key'? => ,
      ?'meta_value'?? => ,
      ?'post_type'??? => 'post',
      ?'post_mime_type'? => ,
      ?'post_parent'? => ,
      ?'post_status'? => 'publish' ); ?>

      get_posts()

      get_posts()的机制与query_posts()类似,参数也相同,是一种简单的获取文章的方法,get_posts()不会产生全局变量,不影响主循环,非常安全。如果要在主循环之外输出最新文章、特色文章等,不妨考虑用这个。

      WP_Query

      WP_Query是前两个函数的基础,使用起来更复杂,但限制也少。适合创建功能比较特殊的自定义循环,也完全可以取代上面两个函数。

      关于上述三者的区别,在WordPress Answers网站有很好的讨论,感兴趣的不妨看一下,对于WordPress的数据库交互机制,Sola还有很多不明白的地方,还要努力研究一下。但query_posts()绝对不是一个想用就能用的功能,乱用这个函数可能产生严重的错误。

      http://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts

             直奔主题

      添加微信客服
      工作日9:00-18:00
      节假日休息
      本港台开码 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>