博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wordpress---wp_query的使用方法
阅读量:6693 次
发布时间:2019-06-25

本文共 24771 字,大约阅读时间需要 82 分钟。

wp_query是一个wordpress用于复杂请求的的一个类,看到query懂开发的人就会反应这个是数据库查询的一个类,这个类可谓是非常有用的,可以帮助我们做很多复杂的查询。

wp_query的使用方法也很简单:

$query = new WP_Query( 'author=123' ); // 查询单个作者的文章$query = new WP_Query( 'author_name=rami' ); // 根据用户名查找$query = new WP_Query( 'author=2,6,17,38' ); // 查询多个人的文章$query = new WP_Query( 'author=-12' ); // 查询不属于某个人的文章 可以通过减号“-”来排除某位作者。$query = new WP_Query( 'cat=4' ); // 按分类ID$query = new WP_Query( 'category_name=staff' ); //查询某个分类下的文章(包含它的子分类)$query = new WP_Query( 'category__in=4' ); //查询某个分类下的文章(不包含它的子分类)$query = new WP_Query( 'cat=2,6,17,38' ); // ID 类似的,查询多个分类下的文章$query = new WP_Query( 'category_name=staff,news' ); // slug 类似的,查询多个分类下的文章$query = new WP_Query( 'cat=-12,-34,-56' ); //不包含某个分类// 查询同时属于多个分类的文章$query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) ); // 2 and 6$query = new WP_Query( array( 'category__in' => array( 2, 6 ) ) ); // 2 or 6

通过标签查询

可通过标签查询的条件包括:tag, tag_id, tag__and, tag__in, tag__not_in, tag_slug__and, tag_slug__in。

对应到上面分类的查询方法,不难理解每个条件如何使用,我不一一举例了。(注意:名字中没有slug的,用tag的id查询)。

简单使用示例:

'4','posts_per_page' =>'2',);$the_query = new WP_Query($where);// 开始循环if ( $the_query->have_posts() ) {
//如果找到了结果,便输出以下内容 echo '
    '; while ( $the_query->have_posts() ) {
    //再次判断是否有结果 $the_query->the_post();//不用问为什么,每次都要写这个; ?>
  • '; } else { // 如果没有找到任何结果,就输出这个 } wp_reset_postdata();//不用问为什么,每次都记得写就好?>

简单示例:

have_posts() ) : // 通过查询的结果,开始主循环 while ( $the_query->have_posts() ) : $the_query->the_post(); //获取到特定的文章 // 要输出的内容,如标题、日期等 endwhile;endif; // 重置请求数据wp_reset_postdata(); ?>

深入查看wp_query类

'1,2,3,', //(int) - use author id [use minus (-) to exclude authors by ID ex. 'author' => '-1,-2,-3,'] 'author_name' => 'luetkemj', //(string) - use 'user_nicename' (NOT name) 'author__in' => array( 2, 6 ), //(array) - use author id (available with Version 3.7). 'author__not_in' => array( 2, 6 ), //(array)' - use author id (available with Version 3.7). //类别参数 - Show posts associated with certain categories. //http://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters 'cat' => 5,//(int) - use category id. 'category_name' => 'staff, news', //(string) - Display posts that have these categories, using category slug. 'category_name' => 'staff+news', //(string) - Display posts that have "all" of these categories, using category slug. 'category__and' => array( 2, 6 ), //(array) - use category id. 'category__in' => array( 2, 6 ), //(array) - use category id. 'category__not_in' => array( 2, 6 ), //(array) - use category id. //标签参数 - Show posts associated with certain tags. //http://codex.wordpress.org/Class_Reference/WP_Query#Tag_Parameters 'tag' => 'cooking', //(string) - use tag slug. 'tag_id' => 5, //(int) - use tag id. 'tag__and' => array( 2, 6), //(array) - use tag ids. 'tag__in' => array( 2, 6), //(array) - use tag ids. 'tag__not_in' => array( 2, 6), //(array) - use tag ids. 'tag_slug__and' => array( 'red', 'blue'), //(array) - use tag slugs. 'tag_slug__in' => array( 'red', 'blue'), //(array) - use tag slugs. //分类参数(自定义分类法) - Show posts associated with certain taxonomy. //http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters //Important Note: tax_query takes an array of tax query arguments arrays (it takes an array of arrays) //This construct allows you to query multiple taxonomies by using the relation parameter in the first (outer) array to describe the boolean relationship between the taxonomy queries. 'tax_query' => array( //(array) - use taxonomy parameters (available with Version 3.1). 'relation' => 'AND', //(string) - Possible values are 'AND' or 'OR' and is the equivalent of running a JOIN for each taxonomy array( 'taxonomy' => 'color', //(string) - Taxonomy. 'field' => 'slug', //(string) - Select taxonomy term by ('id' or 'slug') 'terms' => array( 'red', 'blue' ), //(int/string/array) - Taxonomy term(s). 'include_children' => true, //(bool) - Whether or not to include children for hierarchical taxonomies. Defaults to true. 'operator' => 'IN' //(string) - Operator to test. Possible values are 'IN', 'NOT IN', 'AND'. ), array( 'taxonomy' => 'actor', 'field' => 'id', 'terms' => array( 103, 115, 206 ), 'include_children' => false, 'operator' => 'NOT IN' ) ), //文章和页面参数 - Display content based on post and page parameters. //http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters 'p' => 1, //(int) - use post id. 'name' => 'hello-world', //(string) - use post slug. 'page_id' => 1, //(int) - use page id. 'pagename' => 'sample-page', //(string) - use page slug. 'pagename' => 'contact_us/canada', //(string) - Display child page using the slug of the parent and the child page, separated ba slash 'post_parent' => 1, //(int) - use page id. Return just the child Pages. (Only works with heirachical post types.) 'post_parent__in' => array(1,2,3) //(array) - use post ids. Specify posts whose parent is in an array. NOTE: Introduced in 3.6 'post_parent__not_in' => array(1,2,3), //(array) - use post ids. Specify posts whose parent is not in an array. 'post__in' => array(1,2,3), //(array) - use post ids. Specify posts to retrieve. ATTENTION If you use sticky posts, they will be included (prepended!) in the posts you retrieve whether you want it or not. To suppress this behaviour use ignore_sticky_posts 'post__not_in' => array(1,2,3), //(array) - use post ids. Specify post NOT to retrieve. //NOTE: you cannot combine 'post__in' and 'post__not_in' in the same query//Password Parameters - Show content based on post and page parameters. Remember that default post_type is only set to display posts but not pages. //http://codex.wordpress.org/Class_Reference/WP_Query#Password_Parameters 'has_password' => true, //(bool) - available with Version 3.9 //true for posts with passwords; //false for posts without passwords; //null for all posts with and without passwords 'post_password' => 'multi-pass', //(string) - show posts with a particular password (available with Version 3.9)//类型状态参数 - Show posts associated with certain type or status. //http://codex.wordpress.org/Class_Reference/WP_Query#Type_Parameters 'post_type' => array( //(string / array) - use post types. Retrieves posts by Post Types, default value is 'post'; 'post', // - a post. 'page', // - a page. 'revision', // - a revision. 'attachment', // - an attachment. The default WP_Query sets 'post_status'=>'published', but atchments default to 'post_status'=>'inherit' so you'll need to set the status to 'inherit' or 'any'. 'my-post-type', // - Custom Post Types (e.g. movies) ), //NOTE: The 'any' keyword available to both post_type and post_status queries cannot be used within an array. 'post_type' => 'any', // - retrieves any type except revisions and types with 'exclude_from_search' set to true. //Type & Status Parameters - Show posts associated with certain type or status. //http://codex.wordpress.org/Class_Reference/WP_Query#Status_Parameters 'post_status' => array( //(string / array) - use post status. Retrieves posts by Post Status, default value i'publish'. 'publish', // - a published post or page. 'pending', // - post is pending review. 'draft', // - a post in draft status. 'auto-draft', // - a newly created post, with no content. 'future', // - a post to publish in the future. 'private', // - not visible to users who are not logged in. 'inherit', // - a revision. see get_children. 'trash' // - post is in trashbin (available with Version 2.9). ), //NOTE: The 'any' keyword available to both post_type and post_status queries cannot be used within an array. 'post_status' => 'any', // - retrieves any status except those from post types with 'exclude_from_search' set to true. //分页参数 //http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters 'posts_per_page' => 10, //(int) - number of post to show per page (available with Version 2.1). Use 'posts_per_page' => -1 to show all posts. //Note: if the query is in a feed, wordpress overwrites this parameter with the stored 'posts_per_rss' option. Treimpose the limit, try using the 'post_limits' filter, or filter 'pre_option_posts_per_rss' and return -1 'posts_per_archive_page' => 10, //(int) - number of posts to show per page - on archive pages only. Over-rides showposts anposts_per_page on pages where is_archive() or is_search() would be true 'nopaging' => false, //(bool) - show all posts or use pagination. Default value is 'false', use paging. 'paged' => get_query_var('paged'), //(int) - number of page. Show the posts that would normally show up just on page X when usinthe "Older Entries" link. //NOTE: Use get_query_var('page'); if you want your query to work in a Page template that you've set as your static front page. The query variable 'page' holds the pagenumber for a single paginated Post or Page that includes the lt;!--nextpage--gt; Quicktag in the post content. 'nopaging' => false, // (boolean) - show all posts or use pagination. Default value is 'false', use paging. 'posts_per_archive_page' => 10, // (int) - number of posts to show per page - on archive pages only. Over-rides posts_per_page and showposts on pages where is_archive() or is_search() would be true. 'offset' => 3, // (int) - number of post to displace or pass over. // Warning: Setting the offset parameter overrides/ignores the paged parameter and breaks pagination. for a workaround see: http://codex.wordpress.org/Making_Custom_Queries_using_Offset_and_Pagination // The 'offset' parameter is ignored when 'posts_per_page'=>-1 (show all posts) is used. 'paged' => get_query_var('paged'), //(int) - number of page. Show the posts that would normally show up just on page X when usinthe "Older Entries" link. //NOTE: This whole paging thing gets tricky. Some links to help you out: // http://codex.wordpress.org/Function_Reference/next_posts_link#Usage_when_querying_the_loop_with_WP_Query // http://codex.wordpress.org/Pagination#Troubleshooting_Broken_Pagination 'page' => get_query_var('page'), // (int) - number of page for a static front page. Show the posts that would normally show up just on page X of a Static Front Page. //NOTE: The query variable page holds the pagenumber for a single paginated Post or Page that includes the < !--nextpage--> Quicktag in the post content. 'ignore_sticky_posts' => false, // (boolean) - ignore sticky posts or not (available with Version 3.1, replaced caller_get_posts parameter). Default value is 0 - don't ignore sticky posts. Note: ignore/exclude sticky posts being included at the beginning of posts returned, but the sticky post will still be returned in the natural order of that list of posts returned.//排序参数 - Sort retrieved posts. //http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters 'order' => 'DESC', //(string) - Designates the ascending or descending order of the 'orderby' parameter. Default to 'DESC'. //Possible Values: //'ASC' - ascending order from lowest to highest values (1, 2, 3; a, b, c). //'DESC' - descending order from highest to lowest values (3, 2, 1; c, b, a). 'orderby' => 'date', //(string) - Sort retrieved posts by parameter. Defaults to 'date'. One or more options can be passed. EX: 'orderby' => 'menu_order title' //Possible Values: //'none' - No order (available with Version 2.8). //'ID' - Order by post id. Note the captialization. //'author' - Order by author. //'title' - Order by title. //'name' - Order by post name (post slug). //'date' - Order by date. //'modified' - Order by last modified date. //'parent' - Order by post/page parent id. //'rand' - Random order. //'comment_count' - Order by number of comments (available with Version 2.9). //'menu_order' - Order by Page Order. Used most often for Pages (Order field in the EdiPage Attributes box) and for Attachments (the integer fields in the Insert / Upload MediGallery dialog), but could be used for any post type with distinct 'menu_order' values (theall default to 0). //'meta_value' - Note that a 'meta_key=keyname' must also be present in the query. Note alsthat the sorting will be alphabetical which is fine for strings (i.e. words), but can bunexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as yomight naturally expect). //'meta_value_num' - Order by numeric meta value (available with Version 2.8). Also notthat a 'meta_key=keyname' must also be present in the query. This value allows for numericasorting as noted above in 'meta_value'. //'title menu_order' - Order by both menu_order AND title at the same time. For more info see: http://wordpress.stackexchange.com/questions/2969/order-by-menu-order-and-title //'post__in' - Preserve post ID order given in the post__in array (available with Version 3.5). //日期参数 - Show posts associated with a certain time and date period. //http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters 'year' => 2014, //(int) - 4 digit year (e.g. 2011). 'monthnum' => 4, //(int) - Month number (from 1 to 12). 'w' => 25, //(int) - Week of the year (from 0 to 53). Uses the MySQL WEEK command. The mode is dependenon the "start_of_week" option. 'day' => 17, //(int) - Day of the month (from 1 to 31). 'hour' => 13, //(int) - Hour (from 0 to 23). 'minute' => 19, //(int) - Minute (from 0 to 60). 'second' => 30, //(int) - Second (0 to 60). 'm' => 201404, //(int) - YearMonth (For e.g.: 201307). 'date_query' => array( //(array) - Date parameters (available with Version 3.7). //these are super powerful. check out the codex for more comprehensive code examples http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters array( 'year' => 2014, //(int) - 4 digit year (e.g. 2011). 'month' => 4 //(int) - Month number (from 1 to 12). 'week' => 31 //(int) - Week of the year (from 0 to 53). 'day' => 5 //(int) - Day of the month (from 1 to 31). 'hour' => 2 //(int) - Hour (from 0 to 23). 'minute' => 3 //(int) - Minute (from 0 to 59). 'second' => 36 //(int) - Second (0 to 59). 'after' => 'January 1st, 2013', //(string/array) - Date to retrieve posts after. Accepts strtotime()-compatible string, or array of 'year', 'month', 'day' 'before' => array( //(string/array) - Date to retrieve posts after. Accepts strtotime()-compatible string, or array of 'year', 'month', 'day' 'year' => 2013, //(string) Accepts any four-digit year. Default is empty. 'month' => 2, //(string) The month of the year. Accepts numbers 1-12. Default: 12. 'day' => 28, //(string) The day of the month. Accepts numbers 1-31. Default: last day of month. ), 'inclusive' => true, //(boolean) - For after/before, whether exact value should be matched or not'. 'compare' => '=', //(string) - Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' (only in WP >= 3.5), and 'NOT EXISTS' (also only in WP >= 3.5). Default value is '=' 'column' => 'post_date', //(string) - Column to query against. Default: 'post_date'. 'relation' => 'AND', //(string) - OR or AND, how the sub-arrays should be compared. Default: AND. ), ),//自定义字段参数 - Show posts associated with a certain custom field. //http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters 'meta_key' => 'key', //(string) - Custom field key. 'meta_value' => 'value', //(string) - Custom field value. 'meta_value_num' => 10, //(number) - Custom field value. 'meta_compare' => '=', //(string) - Operator to test the 'meta_value'. Possible values are '!=', '>', '>=', '<', or ='. Default value is '='. 'meta_query' => array( //(array) - Custom field parameters (available with Version 3.1). 'relation' => 'AND', //(string) - Possible values are 'AND', 'OR'. The logical relationship between each inner meta_query array when there is more than one. Do not use with a single inner meta_query array. array( 'key' => 'color', //(string) - Custom field key. 'value' => 'blue' //(string/array) - Custom field value (Note: Array support is limited to a compare value of 'IN', 'NOT IN', 'BETWEEN', or 'NOT BETWEEN') Using WP < 3.9? Check out this page for details: http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters 'type' => 'CHAR', //(string) - Custom field type. Possible values are 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED'. Default value is 'CHAR'. The 'type' DATE works with the 'compare' value BETWEEN only if the date is stored at the format YYYYMMDD and tested with this format. //NOTE: The 'type' DATE works with the 'compare' value BETWEEN only if the date is stored at the format YYYYMMDD and tested with this format. 'compare' => '=' //(string) - Operator to test. Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' (only in WP >= 3.5), and 'NOT EXISTS' (also only in WP >= 3.5). Default value is '='. ), array( 'key' => 'price', 'value' => array( 1,200 ), 'compare' => 'NOT LIKE' ) ), //Permission Parameters - Display published posts, as well as private posts, if the user has the appropriate capability: //http://codex.wordpress.org/Class_Reference/WP_Query#Permission_Parameters 'perm' => 'readable' //(string) Possible values are 'readable', 'editable'//Caching Parameters //http://codex.wordpress.org/Class_Reference/WP_Query#Caching_Parameters //NOTE Caching is a good thing. Setting these to false is generally not advised. 'cache_results' => true, //(bool) Default is true - Post information cache. 'update_post_term_cache' => true, //(bool) Default is true - Post meta information cache. 'update_post_meta_cache' => true, //(bool) Default is true - Post term information cache. 'no_found_rows' => false, //(bool) Default is false. WordPress uses SQL_CALC_FOUND_ROWS in most queries in order to implement pagination. Even when you don’t need pagination at all. By Setting this parameter to true you are telling wordPress not to count the total rows and reducing load on the DB. Pagination will NOT WORK when this parameter is set to true. For more information see: http://flavio.tordini.org/speed-up-wordpress-get_posts-and-query_posts-functions //Search Parameter //http://codex.wordpress.org/Class_Reference/WP_Query#Search_Parameter 's' => $s, //(string) - Passes along the query string variable from a search. For example usage see: http://www.wprecipes.com/how-to-display-the-number-of-results-in-wordpress-search 'exact' => true, //(bool) - flag to make it only match whole titles/posts - Default value is false. For more information see: https://gist.github.com/2023628#gistcomment-285118 'sentence' => true, //(bool) - flag to make it do a phrase search - Default value is false. For more information see: https://gist.github.com/2023628#gistcomment-285118//Post Field Parameters //For more info see: http://codex.wordpress.org/Class_Reference/WP_Query#Return_Fields_Parameter //also https://gist.github.com/luetkemj/2023628/#comment-1003542 'fields' => 'ids' //(string) - Which fields to return. All fields are returned by default. //Possible values: //'ids' - Return an array of post IDs. //'id=>parent' - Return an associative array [ parent => ID, … ]. //Passing anything else will return all fields (default) - an array of post objects. //Filters //For more information on available Filters see: http://codex.wordpress.org/Class_Reference/WP_Query#Filters);?>

具体使用示例:

'post','showposts'=>'10','posts_per_page'=>'10','paged'=>get_query_var('paged')); $recendposts = new WP_Query( $args );if($recendposts->have_posts()) : while($recendposts->have_posts()) : $recendposts->the_post();?>
  •  一个非常有用的查询,看得懂的拿去:

    1,'posts_per_page'=2); // $where = array('author'=>1); $where = array('s'=>'工具','post_type'=>'post'); $the_query = new WP_Query( $where ); var_dump($the_query); // 开始循环 if($the_query->have_posts()){
    //如果找到了结果,便输出以下内容 echo '
      '; while ( $the_query->have_posts() ) { //再次判断是否有结果 $the_query->the_post(); //不用问为什么,每次都要写这个;?>
    • '; } else { echo "没有找到相关的文章"; } wp_reset_postdata();?>

     结合PHP的流程控制对上面的代码进行改造:

    '工具','post_type'=>'post'); ?>
    have_posts()):?>
    have_posts()) : $the_query->the_post();?>
    //此处显示未找到文章时的信息,比如404相关

     查询5条浏览量最多的:

    '工具','post_type'=>'post','order'=>'DESC','meta_key'=>'views','orderby'=>'meta_value_num','posts_per_page'=>1); ?>
    have_posts()):?>
    have_posts()) : $the_query->the_post();?>
    //此处显示未找到文章时的信息,比如404相关

     

    转载于:https://www.cnblogs.com/e0yu/p/10160938.html

    你可能感兴趣的文章
    .NET二级域名共享Session
    查看>>
    [汇编] 比较2个字符串是否相等
    查看>>
    CutJS – 用于 HTML5 游戏开发的 2D 渲染引擎
    查看>>
    jquery easy ui 学习 (3) window 限制在父类窗体内
    查看>>
    lightswitch 添加 TreeView 控件
    查看>>
    积累的VC编程小技巧之文件操作
    查看>>
    javascript 文件的同步加载与异步加载
    查看>>
    【struts2】Struts2的运行流程
    查看>>
    阻止函数源码在控制台输出
    查看>>
    php递归无限极分类
    查看>>
    ”凉凉“ 的故事
    查看>>
    Java对数组的操作(二)——集合与数组的切换
    查看>>
    VS2010皮肤控件介绍
    查看>>
    编译Ngnix遇到的问题,查看程序依赖的库文件
    查看>>
    ViewBag 找不到编译动态表达式所需的一种或多种类型,是否缺少引用?
    查看>>
    前端翻译:Activating Browser Modes with Doctype
    查看>>
    软考复习之路—组成原理
    查看>>
    arrayPointer
    查看>>
    Android SDK开发包国内下载地址
    查看>>
    浅谈尾递归
    查看>>