Skip to content

QueryString

fevereiro 23, 2010

Lista de parâmetros que eu posso usar numa QueryString  do  wordpress

Referência: http://codex.wordpress.org/Template_Tags/query_posts

Parameters

This is not an exhaustive list yet. It is meant to show some of the more common things possible with setting your own queries.

Category Parameters

Show posts only belonging to certain categories.

  • cat – must use cat ids
  • category_name
  • category__and – must use cat ids
  • category__in – must use cat ids
  • category__not_in – must use cat ids

Show One Category by ID

Display posts from only one category ID (and any children of that category):

query_posts('cat=4');

Show One Category by Name

Display posts from only one category by name:

query_posts('category_name=Staff Home');

Show Several Categories by ID

Display posts from several specific category IDs:

query_posts('cat=2,6,17,38');

Exclude Posts Belonging to Only One Category

Show all posts except those from a category by prefixing its ID with a ‘-‘ (minus) sign.

query_posts('cat=-3');

This excludes any post that belongs to category 3.

Multiple Category Handling

Display posts that are in multiple categories. This shows posts that are in both categories 2 and 6:

query_posts(array('category__and' => array(2,6)));

To display posts from either category 2 OR 6, you could use cat as mentioned above, or by using category__in (note this does not show posts from any children of these categories):

query_posts(array('category__in' => array(2,6)));

You can also exclude multiple categories this way:

query_posts(array('category__not_in' => array(2,6)));

Tag Parameters

Show posts associated with certain tags.

  • tag
  • tag_id – must use tag ids
  • tag__and – must use tag ids
  • tag__in – must use tag ids
  • tag__not_in – must use tag ids
  • tag_slug__and
  • tag_slug__in

Fetch posts for one tag

query_posts('tag=cooking');

Fetch posts that have either of these tags

query_posts('tag=bread,baking');

Fetch posts that have all three of these tags:

query_posts('tag=bread+baking+recipe');

Multiple Tag Handling

Display posts that are tagged with both tag id 37 and tag id 47:

query_posts(array('tag__and' => array(37,47));

To display posts from either tag id 37 or 47, you could use tag as mentioned above, or explicitly specify by using tag__in:

query_posts(array('tag__in' => array(37,47));

Display posts that do not have any of the two tag ids 37 and 47:

query_posts(array('tag__not_in' => array(37,47));

The tag_slug__in and tag_slug__and behave much the same, except match against the tag’s slug.

Also see Ryan’s discussion of Tag intersections and unions.

Author Parameters

You can also restrict the posts by author.

  • author=3
  • author=-3 – exclude author id 3 posts
  • author_name=Harriet

Note: author_name operates on the user_nicename field, whilst author operates on the author id field.

Display all Pages for author=1, in title order, with no sticky posts tacked to the top:

query_posts('caller_get_posts=1&author=1&post_type=page&post_status=publish&orderby=title&order=ASC');

Post & Page Parameters

Retrieve a single post or page.

  • 'p' => 27 – use the post ID to show that post
  • 'name' => 'about-my-life' – query for a particular post that has this Post Slug
  • 'page_id' => 7 – query for just Page ID 7
  • 'pagename' => 'about' – note that this is not the page’s title, but the page’s path
  • 'posts_per_page' => 1 – use 'posts_per_page' => 3 to show 3 posts. Use 'posts_per_page' => -1 to show all posts
  • 'showposts' => 1 – use 'showposts' => 3 to show 3 posts. Use 'showposts' => -1 to show all posts. Deprecated in favor of posts_per_page
  • 'post__in' => array(5,12,2,14,7) – inclusion, lets you specify the post IDs to retrieve
  • 'post__not_in' => array(6,2,8) – exclusion, lets you specify the post IDs NOT to retrieve
  • 'post_type' => 'page' – returns Pages; defaults to value of post; can be any, attachment, page, post, or revision. any retrieves any type except revisions.
  • 'post_status' => 'publish' – returns publish works. Also could use pending, draft, future, private, trash. For inherit see get_children. Status of trash added with Version 2.9.
  • 'post_parent' => 93 – return just the child Pages of Page 93.

Sticky Post Parameters

Sticky posts first became available with WordPress Version 2.7. Posts that are set as Sticky will be displayed before other posts in a query, unless excluded with the caller_get_posts=1 parameter.

  • array('post__in'=>get_option('sticky_posts')) – returns array of all sticky posts
  • caller_get_posts=1 – To 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.

To return just the first sticky post:

$sticky=get_option('sticky_posts') ;
query_posts('p=' . $sticky[0]);

or

$args = array(
	'posts_per_page' => 1,
	'post__in'  => get_option('sticky_posts'),
	'caller_get_posts' => 1
);
query_posts($args);

Note: the second method returns only the more recent sticky post; if there are not sticky posts, it returns the last post published.

To return just the first sticky post or nothing:

$sticky = get_option('sticky_posts');
$args = array(
	'posts_per_page' => 1,
	'post__in'  => $sticky,
	'caller_get_posts' => 1
);
query_posts($args);
if($sticky[0]) {
   // insert here your stuff...
}

To exclude all sticky posts from the query:

query_posts(array("post__not_in" =>get_option("sticky_posts")));

Return ALL posts with the category, but don’t show sticky posts at the top. The ‘sticky posts’ will still show in their natural position (e.g. by date):

query_posts('caller_get_posts=1&posts_per_page=3&cat=6');

Return posts with the category, but exclude sticky posts completely, and adhere to paging rules:

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$sticky=get_option('sticky_posts');
$args=array(
   'cat'=>3,
   'caller_get_posts'=>1,
   'post__not_in' => $sticky,
   'paged'=>$paged,
   );
query_posts($args);
?>

Time Parameters

Retrieve posts belonging to a certain time period.

  • hour= – hour (from 0 to 23)
  • minute= – minute (from 0 to 60)
  • second= – second (0 to 60)
  • day= – day of the month (from 1 to 31)
  • monthnum= – month number (from 1 to 12)
  • year= – 4 digit year (e.g. 2009)
  • w= – week of the year (from 0 to 53) and uses the MySQL WEEK command Mode=1.

Returns posts for just the current date:

$today = getdate();
query_posts('year=' .$today["year"] .'&monthnum=' .$today["mon"] .'&day=' .$today["mday"] );

Returns posts dated December 20:

query_posts( 'monthnum=12&day=20' );

Return posts for posts for March 1 to March 15, 2009:

<?php
//based on Austin Matzko's code from wp-hackers email list
  function filter_where($where = '') {
    //posts for March 1 to March 15, 2009
    $where .= " AND post_date >= '2009-03-01' AND post_date < '2009-03-16'";
    return $where;
  }
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>

Return posts from the last 30 days:

<?php
//based on Austin Matzko's code from wp-hackers email list
  function filter_where($where = '') {
    //posts in the last 30 days
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
    return $where;
  }
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>

Return posts 30 to 60 days old

<?php
//based on Austin Matzko's code from wp-hackers email list
  function filter_where($where = '') {
    //posts  30 to 60 days old
    $where .= " AND post_date >= '" . date('Y-m-d', strtotime('-60 days')) . "'" . " AND post_date <= '" . date('Y-m-d', strtotime('-30 days')) . "'";
    return $where;
  }
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>

Pagination Parameters

  • paged=2 – show the posts that would normally show up just on page 2 when using the “Older Entries” link. You should set this to get_query_var( 'paged' ) if you want your query to work with pagination.
  • posts_per_page=10 – number of posts to show per page; a value of -1 will show all posts.
  • order=ASC – show posts in chronological order, DESC to show in reverse order (the default)

Offset Parameter

You can displace or pass over one or more initial posts which would normally be collected by your query through the use of the offset parameter.

The following will display the 5 posts which follow the most recent (1):

query_posts('posts_per_page=5&offset=1');

Orderby Parameters

Sort retrieved posts by this field.

  • orderby=author
  • orderby=date
  • orderby=title
  • orderby=modified
  • orderby=menu_order Note: Only works with Pages.
  • orderby=parent
  • orderby=ID
  • orderby=rand
  • orderby=meta_value Note: A meta_key=keyname must also be present in the query.
  • orderby=none – no order (available with Version 2.8)
  • orderby=comment_count – (available with Version 2.9)

Order Parameters

Designates the ascending or descending order of the ORDERBY parameter.

  • order=ASC – ascending order, lowest to highest value
  • order=DESC – descending order, highest to lowest value

Custom Field Parameters

Retrieve posts (or Pages) based on a custom field key or value.

  • meta_key=
  • meta_value=
  • meta_compare= – operator to test the meta_value=, default is ‘=’, with other possible values of ‘!=’, ‘>’, ‘>=’, ‘<‘, or ‘<=’

Returns posts with custom fields matching both a key of ‘color’ AND a value of ‘blue’:

query_posts('meta_key=color&meta_value=blue');

Returns posts with a custom field key of ‘color’, regardless of the custom field value:

query_posts('meta_key=color');

Returns posts where the custom field value is ‘color’, regardless of the custom field key:

query_posts('meta_value=color');

Returns any Page where the custom field value is ‘green’, regardless of the custom field key:

query_posts('post_type=page&meta_value=green');

Returns both posts and Pages with a custom field key of ‘color’ where the custom field value IS NOT EQUAL TO ‘blue’:

query_posts('post_type=any&meta_key=color&meta_compare=!=&meta_value=blue');

Returns posts with custom field key of ‘miles’ with a custom field value that is LESS THAN OR EQUAL TO 22. Note the value 99 will be considered greater than 100 as the data is stored as strings, not numbers.

query_posts('meta_key=miles&meta_compare=<=&meta_value=22');

Combining Parameters

You may have noticed from some of the examples above that you combine parameters with an ampersand (&), like so:

query_posts('cat=3&year=2004');

Posts for category 13, for the current month on the main page:

if (is_home()) {
query_posts($query_string . '&cat=13&monthnum=' . date('n',current_time('timestamp')));
}

At 2.3 this combination will return posts belong to both Category 1 AND 3, showing just two (2) posts, in descending order by the title:

 query_posts(array('category__and'=>array(1,3),'posts_per_page'=>2,'orderby'=>title,'order'=>DESC));

In 2.3 and 2.5 one would expect the following to return all posts that belong to category 1 and is tagged “apples”

query_posts('cat=1&tag=apples');

A bug prevents this from happening. See Ticket #5433. A workaround is to search for several tags using +

query_posts('cat=1&tag=apples+apples');

This will yield the expected results of the previous query. Note that using ‘cat=1&tag=apples+oranges’ yields expected results.

Examples

Exclude Categories From Your Home Page

Placing this code in your index.php file will cause your home page to display posts from all categories except category ID 3.

<?php
   if (is_home()) {
      query_posts("cat=-3");
   }
?>

You can also add some more categories to the exclude-list (tested with WP 2.1.2):

<?php
   if (is_home()) {
      query_posts("cat=-1,-2,-3");
   }
?>

Retrieve a Particular Post

To retrieve a particular post, you could use the following:

<?php
// retrieve one post with an ID of 5
query_posts('p=5');
?>

If you want to use the Read More functionality with this query, you will need to set the global $more variable to 0.

<?php
// retrieve one post with an ID of 5
query_posts('p=5');

global $more;
// set $more to 0 in order to only get the first part of the post
$more = 0; 

// the Loop
while (have_posts()) : the_post();
  // the content of the post
  the_content('Read the full post »');
endwhile;
?>

Retrieve a Particular Page

To retrieve a particular page, you could use the following:

<?php
query_posts('page_id=7');      //retrieves page 7 only
?>

or

<?php
query_posts('pagename=about'); //retrieves the about page only
?>

For child pages, the slug of the parent and the child is required, separated by a slash. For example:

<?php
query_posts('pagename=parent/child'); // retrieve the child page of a parent
?>

Passing variables to query_posts

You can pass a variable to the query with two methods, depending on your needs. As with other examples, place these above your Loop:

Example 1

In this example, we concatenate the query before running it. First assign the variable, then concatenate and then run it. Here we’re pulling in a category variable from elsewhere.

 <?php
 $categoryvariable=$cat; // assign the variable as current category
 $query= 'cat=' . $categoryvariable. '&orderby=date&order=ASC'; // concatenate the query
 query_posts($query); // run the query
 ?>

Example 2

In this next example, the double quotes tell PHP to treat the enclosed as an expression. For this example, we are getting the current month and the current year, and telling query_posts to bring us the posts for the current month/year, and in this case, listing in ascending order so we get the oldest post at the top of the page.

<?php
$current_month = date('m');
$current_year = date('Y');

query_posts("cat=22&year=$current_year&monthnum=$current_month&order=ASC");
?>
<!-- put your loop here -->

Example 3

This example explains how to generate a complete list of posts, dealing with pagination. We can use the default $query_string telling query_posts to bring us a full posts listing. We can also modify the posts_per_page query argument from -1 to the number of posts you want to show on each page; in this last case, you’ll probably want to use posts_nav_link() to navigate the generated archive.

<?php
query_posts($query_string.'&posts_per_page=-1');
while(have_posts()) { the_post();
<!-- put your loop here -->
}
?>

Example 4

If you don’t need to use the $query_string variable, another method exists that is more clear and readable, in some more complex cases. This method puts the parameters into an array. The same query as in Example 2 above could be done like this:

query_posts(array(
 'cat'      => 22,
 'year'     => $current_year,
 'monthnum' => $current_month,
 'order'    => 'ASC',
));

As you can see, with this approach, every variable can be put on its own line, for easier reading.

Preserving the Original Query (Pagination etc.)

By default running query_posts will completely overwrite all existing query variables on the current page. Pagination, categories dates etc. will be lost and only the variables you pass into query_posts will be used.

If you want to preserve the original query you can merge the original query array into your parameter array:

global $wp_query;
query_posts(
	array_merge(
		array('cat' => 1),
		$wp_query->query
	)
);

Usage Tips

The “Blog pages show at most” parameter in Settings > Reading can influence your results. To overcome this, add the ‘posts_per_page’ parameter. For example:

query_posts('category_name=The Category Name&posts_per_page=-1');  //returns ALL from the category

Resources

Anúncios
No comments yet

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: