2006-03-13 01:44:32 +00:00
<? php
2008-09-04 19:19:32 +00:00
/**
* WordPress Query API
*
2013-04-25 23:10:36 +00:00
* The query API attempts to get which part of WordPress the user is on. It
* also provides functionality for getting URL query information.
2008-09-04 19:19:32 +00:00
*
2015-04-12 21:29:32 +00:00
* @link https://codex.wordpress.org/The_Loop More information on The Loop.
2008-09-04 19:19:32 +00:00
*
* @package WordPress
* @subpackage Query
2006-03-13 01:44:32 +00:00
*/
2006-11-19 07:56:05 +00:00
2008-09-04 19:19:32 +00:00
/**
* Retrieve variable in the WP_Query class.
*
* @since 1.5.0
2015-09-18 09:41:27 +00:00
* @since 3.9.0 The `$default` argument was introduced.
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2014-02-26 23:58:14 +00:00
* @param string $var The variable key to retrieve.
2015-09-18 09:41:27 +00:00
* @param mixed $default Optional. Value to return if the query variable is not set. Default empty.
* @return mixed Contents of the query variable.
2008-09-04 19:19:32 +00:00
*/
2014-02-26 23:58:14 +00:00
function get_query_var ( $var , $default = '' ) {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2014-02-26 23:58:14 +00:00
return $wp_query -> get ( $var , $default );
2006-03-13 01:44:32 +00:00
}
2010-10-29 20:48:54 +00:00
/**
2015-09-18 10:21:26 +00:00
* Retrieve the currently-queried object.
*
* Wrapper for WP_Query::get_queried_object().
2010-10-29 20:48:54 +00:00
*
* @since 3.1.0
*
2015-09-18 10:21:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2015-05-27 18:15:25 +00:00
*
2015-09-18 10:21:26 +00:00
* @return object Queried object.
2010-10-29 20:48:54 +00:00
*/
function get_queried_object () {
global $wp_query ;
return $wp_query -> get_queried_object ();
}
/**
2015-09-18 10:27:24 +00:00
* Retrieve ID of the current queried object.
*
* Wrapper for WP_Query::get_queried_object_id().
2010-11-17 18:47:34 +00:00
*
2010-10-29 20:48:54 +00:00
* @since 3.1.0
*
2015-09-18 10:27:24 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2015-05-27 18:15:25 +00:00
*
2015-09-18 10:27:24 +00:00
* @return int ID of the queried object.
2010-10-29 20:48:54 +00:00
*/
function get_queried_object_id () {
global $wp_query ;
return $wp_query -> get_queried_object_id ();
}
2008-09-04 19:19:32 +00:00
/**
* Set query variable.
*
* @since 2.2.0
*
2015-09-18 10:29:25 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2015-05-27 18:15:25 +00:00
*
* @param string $var Query variable key.
2015-09-18 10:29:25 +00:00
* @param mixed $value Query variable value.
2008-09-04 19:19:32 +00:00
*/
2015-05-27 18:15:25 +00:00
function set_query_var ( $var , $value ) {
2007-02-24 07:33:29 +00:00
global $wp_query ;
2015-05-27 18:15:25 +00:00
$wp_query -> set ( $var , $value );
2007-02-24 07:33:29 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2016-06-26 17:47:28 +00:00
* Sets up The Loop with query parameters.
2008-09-04 19:19:32 +00:00
*
2016-06-26 18:06:27 +00:00
* Note: This function will completely override the main query and isn't intended for use
* by plugins or themes. Its overly-simplistic approach to modifying the main query can be
* problematic and should be avoided wherever possible. In most cases, there are better,
* more performant options for modifying the main query such as via the {@see 'pre_get_posts'}
* action within WP_Query.
2016-06-26 17:47:28 +00:00
*
* This must not be used within the WordPress Loop.
2008-09-04 19:19:32 +00:00
*
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2016-06-26 17:47:28 +00:00
* @param array|string $query Array or string of WP_Query arguments.
* @return array List of post objects.
2008-09-04 19:19:32 +00:00
*/
2017-11-30 23:11:00 +00:00
function query_posts ( $query ) {
2011-10-18 20:20:59 +00:00
$GLOBALS [ 'wp_query' ] = new WP_Query ();
2017-11-30 23:11:00 +00:00
return $GLOBALS [ 'wp_query' ] -> query ( $query );
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2016-05-22 17:39:28 +00:00
* Destroys the previous query and sets up a new query.
2008-09-04 19:19:32 +00:00
*
2016-05-22 17:39:28 +00:00
* This should be used after query_posts() and before another query_posts().
* This will remove obscure bugs that occur when the previous WP_Query object
* is not destroyed properly before another is set up.
2008-09-04 19:19:32 +00:00
*
* @since 2.3.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
* @global WP_Query $wp_the_query Copy of the global WP_Query instance created during wp_reset_query().
2008-09-04 19:19:32 +00:00
*/
2007-08-20 22:55:43 +00:00
function wp_reset_query () {
2011-10-18 20:20:59 +00:00
$GLOBALS [ 'wp_query' ] = $GLOBALS [ 'wp_the_query' ];
2010-05-13 20:39:54 +00:00
wp_reset_postdata ();
}
/**
* After looping through a separate query, this function restores
2013-09-24 15:53:09 +00:00
* the $post global to the current post in the main query.
2010-05-13 20:39:54 +00:00
*
* @since 3.0.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2010-05-13 20:39:54 +00:00
*/
function wp_reset_postdata () {
2008-01-23 18:20:59 +00:00
global $wp_query ;
2014-01-11 23:57:14 +00:00
if ( isset ( $wp_query ) ) {
$wp_query -> reset_postdata ();
}
2007-08-20 22:55:43 +00:00
}
2006-03-13 01:44:32 +00:00
/*
* Query type checks.
*/
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing archive page.
2008-09-04 19:19:32 +00:00
*
2010-10-23 19:20:47 +00:00
* Month, Year, Category, Author, Post Type archive...
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2010-08-25 18:05:33 +00:00
* @return bool
2008-09-04 19:19:32 +00:00
*/
2010-10-24 03:27:01 +00:00
function is_archive () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-10-24 03:27:01 +00:00
return $wp_query -> is_archive ();
2006-03-13 01:44:32 +00:00
}
2010-10-15 19:44:57 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing post type archive page.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2010-10-15 19:44:57 +00:00
* @since 3.1.0
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2015-05-27 18:15:25 +00:00
*
* @param string|array $post_types Optional. Post type or array of posts types to check against.
2010-10-15 19:44:57 +00:00
* @return bool
*/
function is_post_type_archive ( $post_types = '' ) {
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-10-15 19:44:57 +00:00
return $wp_query -> is_post_type_archive ( $post_types );
}
2010-10-19 07:48:22 +00:00
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing attachment page.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 2.0.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2014-12-01 02:17:21 +00:00
* @param int|string|array|object $attachment Attachment ID, title, slug, or array of such.
2010-08-25 18:05:33 +00:00
* @return bool
2008-09-04 19:19:32 +00:00
*/
2014-01-22 22:31:12 +00:00
function is_attachment ( $attachment = '' ) {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2014-01-22 22:31:12 +00:00
return $wp_query -> is_attachment ( $attachment );
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing author archive page.
2008-09-04 19:19:32 +00:00
*
2010-08-25 18:05:33 +00:00
* If the $author parameter is specified, this function will additionally
* check if the query is for one of the authors specified.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2010-08-25 18:05:33 +00:00
* @param mixed $author Optional. User ID, nickname, nicename, or array of User IDs, nicknames, and nicenames
* @return bool
2008-09-04 19:19:32 +00:00
*/
2010-08-25 18:05:33 +00:00
function is_author ( $author = '' ) {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_author ( $author );
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing category archive page.
2008-09-04 19:19:32 +00:00
*
2010-08-25 18:05:33 +00:00
* If the $category parameter is specified, this function will additionally
* check if the query is for one of the categories specified.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2010-08-25 18:05:33 +00:00
* @param mixed $category Optional. Category ID, name, slug, or array of Category IDs, names, and slugs.
2008-09-04 19:19:32 +00:00
* @return bool
*/
2010-08-25 18:05:33 +00:00
function is_category ( $category = '' ) {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_category ( $category );
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing tag archive page.
2010-08-25 18:05:33 +00:00
*
* If the $tag parameter is specified, this function will additionally
* check if the query is for one of the tags specified.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2008-09-04 19:19:32 +00:00
*
* @since 2.3.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2013-09-06 17:27:08 +00:00
* @param mixed $tag Optional. Tag ID, name, slug, or array of Tag IDs, names, and slugs.
2008-09-04 19:19:32 +00:00
* @return bool
*/
2013-09-06 17:27:08 +00:00
function is_tag ( $tag = '' ) {
2007-03-31 06:16:12 +00:00
global $wp_query ;
2008-02-13 19:02:08 +00:00
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2013-09-06 17:27:08 +00:00
return $wp_query -> is_tag ( $tag );
2007-03-31 06:16:12 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing custom taxonomy archive page.
2010-08-25 18:05:33 +00:00
*
* If the $taxonomy parameter is specified, this function will additionally
* check if the query is for that specific $taxonomy.
2010-02-28 05:59:39 +00:00
*
2010-08-25 18:05:33 +00:00
* If the $term parameter is specified in addition to the $taxonomy parameter,
* this function will additionally check if the query is for one of the terms
* specified.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2008-09-04 19:19:32 +00:00
*
* @since 2.5.0
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2015-05-27 18:15:25 +00:00
*
* @param string|array $taxonomy Optional. Taxonomy slug or slugs.
* @param int|string|array $term Optional. Term ID, name, slug or array of Term IDs, names, and slugs.
2016-04-21 17:47:28 +00:00
* @return bool True for custom taxonomy archive pages, false for built-in taxonomies (category and tag archives).
2008-09-04 19:19:32 +00:00
*/
2010-02-28 05:59:39 +00:00
function is_tax ( $taxonomy = '' , $term = '' ) {
2010-12-15 12:21:27 +00:00
global $wp_query ;
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2008-08-09 05:36:14 +00:00
2010-08-25 18:05:33 +00:00
return $wp_query -> is_tax ( $taxonomy , $term );
2008-03-23 17:02:11 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing date archive.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_date () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_date ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing day archive.
2008-09-04 19:19:32 +00:00
*
2017-12-03 20:42:47 +00:00
* A conditional check to test whether the page is a date-based archive page displaying posts for the current day.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_day () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_day ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for a feed.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2010-11-18 03:19:08 +00:00
* @param string|array $feeds Optional feed types to check.
2008-09-04 19:19:32 +00:00
* @return bool
*/
2010-11-18 03:19:08 +00:00
function is_feed ( $feeds = '' ) {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-11-18 03:19:08 +00:00
return $wp_query -> is_feed ( $feeds );
2006-03-13 01:44:32 +00:00
}
2009-12-22 14:04:14 +00:00
/**
2010-08-25 18:05:33 +00:00
* Is the query for a comments feed?
2009-12-22 14:04:14 +00:00
*
* @since 3.0.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2009-12-22 14:04:14 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_comment_feed () {
2009-12-22 14:04:14 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_comment_feed ();
2009-12-22 14:04:14 +00:00
}
2008-02-02 00:13:34 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for the front page of the site.
2010-08-25 18:05:33 +00:00
*
* This is for what is displayed at your site's main URL.
*
* Depends on the site's "Front page displays" Reading Settings 'show_on_front' and 'page_on_front'.
2008-02-02 00:13:34 +00:00
*
2010-08-25 18:05:33 +00:00
* If you set a static page for the front page of your site, this function will return
* true when viewing that page.
*
* Otherwise the same as @see is_home()
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 2.5.0
2008-02-02 00:13:34 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2015-05-27 18:15:25 +00:00
*
2008-09-04 19:19:32 +00:00
* @return bool True, if front of site.
2008-02-02 00:13:34 +00:00
*/
2010-03-21 02:52:00 +00:00
function is_front_page () {
2010-08-25 18:05:33 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_front_page ();
2008-02-05 06:47:27 +00:00
}
2008-02-02 00:13:34 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for the blog homepage.
2010-08-25 18:05:33 +00:00
*
2016-06-26 14:26:29 +00:00
* The blog homepage is the page that shows the time-based blog content of the site.
2010-08-25 18:05:33 +00:00
*
2016-06-26 14:26:29 +00:00
* is_home() is dependent on the site's "Front page displays" Reading Settings 'show_on_front'
* and 'page_for_posts'.
2010-01-15 22:11:12 +00:00
*
2016-06-26 14:26:29 +00:00
* If a static page is set for the front page of the site, this function will return true only
* on the page you set as the "Posts page".
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2016-06-26 14:26:29 +00:00
* @see is_front_page()
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-02-02 00:13:34 +00:00
*
2016-06-26 14:26:29 +00:00
* @return bool True if blog view homepage, otherwise false.
2008-02-02 00:13:34 +00:00
*/
2010-03-21 02:52:00 +00:00
function is_home () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_home ();
2006-03-13 01:44:32 +00:00
}
2019-03-21 19:48:50 +00:00
/**
* Determines whether the query is for the Privacy Policy page.
*
* The Privacy Policy page is the page that shows the Privacy Policy content of the site.
*
* is_privacy_policy() is dependent on the site's "Change your Privacy Policy page" Privacy Settings 'wp_page_for_privacy_policy'.
*
* This function will return true only on the page you set as the "Privacy Policy page".
*
* For more information on this and similar theme functions, check out
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
* Conditional Tags} article in the Theme Developer Handbook.
*
* @since 5.2.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_privacy_policy () {
global $wp_query ;
if ( ! isset ( $wp_query ) ) {
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
return false ;
}
return $wp_query -> is_privacy_policy ();
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing month archive.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_month () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_month ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing single page.
2008-09-04 19:19:32 +00:00
*
2010-08-25 18:05:33 +00:00
* If the $page parameter is specified, this function will additionally
2010-12-09 05:27:37 +00:00
* check if the query is for one of the pages specified.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2010-08-25 18:05:33 +00:00
* @see is_single()
* @see is_singular()
2008-09-04 19:19:32 +00:00
*
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2015-09-24 16:18:24 +00:00
* @param int|string|array $page Optional. Page ID, title, slug, or array of such. Default empty.
* @return bool Whether the query is for an existing single page.
2008-09-04 19:19:32 +00:00
*/
2010-08-25 18:05:33 +00:00
function is_page ( $page = '' ) {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_page ( $page );
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for paged results and not for the first page.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_paged () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_paged ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for a post or page preview.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 2.0.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2006-03-13 01:44:32 +00:00
function is_preview () {
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_preview ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2010-08-25 18:05:33 +00:00
* Is the query for the robots file?
2008-09-04 19:19:32 +00:00
*
* @since 2.1.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2006-05-22 22:06:06 +00:00
function is_robots () {
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_robots ();
2006-05-22 22:06:06 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for a search.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_search () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_search ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing single post.
2010-08-25 18:05:33 +00:00
*
2010-12-09 05:27:37 +00:00
* Works for any post type, except attachments and pages
*
2010-08-25 18:05:33 +00:00
* If the $post parameter is specified, this function will additionally
* check if the query is for one of the Posts specified.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2010-08-25 18:05:33 +00:00
* @see is_page()
* @see is_singular()
2008-09-04 19:19:32 +00:00
*
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2015-09-24 16:18:24 +00:00
* @param int|string|array $post Optional. Post ID, title, slug, or array of such. Default empty.
* @return bool Whether the query is for an existing single post.
2008-09-04 19:19:32 +00:00
*/
2010-08-25 18:05:33 +00:00
function is_single ( $post = '' ) {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_single ( $post );
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing single post of any post type
* (post, attachment, page, custom post types).
2008-09-04 19:19:32 +00:00
*
2010-08-25 18:05:33 +00:00
* If the $post_types parameter is specified, this function will additionally
* check if the query is for one of the Posts Types specified.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2010-08-25 18:05:33 +00:00
* @see is_page()
* @see is_single()
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2015-09-24 16:18:24 +00:00
* @param string|array $post_types Optional. Post type or array of post types. Default empty.
* @return bool Whether the query is for an existing single post of any of the given post types.
2008-09-04 19:19:32 +00:00
*/
2010-08-25 18:05:33 +00:00
function is_singular ( $post_types = '' ) {
2006-08-30 03:33:39 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_singular ( $post_types );
2006-08-30 03:33:39 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for a specific time.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2008-09-04 19:19:32 +00:00
*
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_time () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_time ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for a trackback endpoint call.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2008-09-04 19:19:32 +00:00
*
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_trackback () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_trackback ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is for an existing year archive.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2008-09-04 19:19:32 +00:00
*
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2010-03-21 02:52:00 +00:00
function is_year () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_year ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query has resulted in a 404 (returns no results).
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2008-09-04 19:19:32 +00:00
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
2010-08-25 18:05:33 +00:00
* @return bool
2008-09-04 19:19:32 +00:00
*/
2010-03-21 02:52:00 +00:00
function is_404 () {
2006-03-13 01:44:32 +00:00
global $wp_query ;
2010-12-15 12:21:27 +00:00
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2010-12-19 21:17:52 +00:00
return false ;
2010-12-15 12:21:27 +00:00
}
2010-08-25 18:05:33 +00:00
return $wp_query -> is_404 ();
2006-03-13 01:44:32 +00:00
}
2015-10-07 10:36:25 +00:00
/**
* Is the query for an embedded post?
*
* @since 4.4.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool Whether we're in an embedded post or not.
*/
function is_embed () {
global $wp_query ;
if ( ! isset ( $wp_query ) ) {
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , __ ( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
2015-10-07 10:36:25 +00:00
return false ;
}
return $wp_query -> is_embed ();
}
2011-09-17 20:46:35 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the query is the main query.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2018-03-18 14:23:33 +00:00
*
2011-09-17 20:46:35 +00:00
* @since 3.3.0
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2015-05-27 18:15:25 +00:00
*
2011-09-17 20:46:35 +00:00
* @return bool
*/
function is_main_query () {
2013-09-24 17:10:09 +00:00
if ( 'pre_get_posts' === current_filter () ) {
2015-09-20 03:04:24 +00:00
$message = sprintf (
2015-09-21 15:31:26 +00:00
/* translators: 1: pre_get_posts 2: WP_Query->is_main_query() 3: is_main_query() 4: link to codex is_main_query() page. */
2015-09-20 03:04:24 +00:00
__ ( 'In %1$s, use the %2$s method, not the %3$s function. See %4$s.' ),
'<code>pre_get_posts</code>' ,
2015-09-21 15:31:26 +00:00
'<code>WP_Query->is_main_query()</code>' ,
2015-09-20 03:04:24 +00:00
'<code>is_main_query()</code>' ,
__ ( 'https://codex.wordpress.org/Function_Reference/is_main_query' )
);
2016-07-06 12:40:29 +00:00
_doing_it_wrong ( __FUNCTION__ , $message , '3.7.0' );
2013-09-24 17:10:09 +00:00
}
2011-09-17 20:46:35 +00:00
global $wp_query ;
return $wp_query -> is_main_query ();
}
2006-03-13 01:44:32 +00:00
/*
2011-12-13 23:45:31 +00:00
* The Loop. Post loop control.
2006-03-13 01:44:32 +00:00
*/
2006-11-19 07:56:05 +00:00
2008-09-04 19:19:32 +00:00
/**
* Whether current WordPress query has results to loop over.
*
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2006-03-13 01:44:32 +00:00
function have_posts () {
global $wp_query ;
return $wp_query -> have_posts ();
}
2008-09-04 19:19:32 +00:00
/**
2018-02-13 16:54:31 +00:00
* Determines whether the caller is in the Loop.
2018-03-18 14:23:33 +00:00
*
2018-02-13 16:54:31 +00:00
* For more information on this and similar theme functions, check out
2018-03-18 14:23:33 +00:00
* the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
2018-02-13 16:54:31 +00:00
* Conditional Tags} article in the Theme Developer Handbook.
2008-09-04 19:19:32 +00:00
*
* @since 2.0.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool True if caller is within loop, false if loop hasn't started or ended.
*/
2006-03-13 01:44:32 +00:00
function in_the_loop () {
global $wp_query ;
return $wp_query -> in_the_loop ;
}
2008-09-04 19:19:32 +00:00
/**
* Rewind the loop posts.
*
* @since 1.5.0
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*/
2006-03-13 01:44:32 +00:00
function rewind_posts () {
global $wp_query ;
2015-05-27 18:15:25 +00:00
$wp_query -> rewind_posts ();
2006-03-13 01:44:32 +00:00
}
2008-09-04 19:19:32 +00:00
/**
* Iterate the post index in the loop.
*
* @since 1.5.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*/
2006-03-13 01:44:32 +00:00
function the_post () {
global $wp_query ;
$wp_query -> the_post ();
}
2007-02-24 07:33:29 +00:00
/*
2007-09-03 23:32:58 +00:00
* Comments loop.
*/
2007-02-24 07:33:29 +00:00
2008-09-04 19:19:32 +00:00
/**
* Whether there are comments to loop over.
*
* @since 2.2.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return bool
*/
2007-09-03 23:32:58 +00:00
function have_comments () {
global $wp_query ;
return $wp_query -> have_comments ();
}
2007-02-24 07:33:29 +00:00
2008-09-04 19:19:32 +00:00
/**
* Iterate comment index in the comment loop.
*
* @since 2.2.0
2015-05-27 18:15:25 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2008-09-04 19:19:32 +00:00
*
* @return object
*/
2007-09-03 23:32:58 +00:00
function the_comment () {
global $wp_query ;
return $wp_query -> the_comment ();
}
2007-02-24 07:33:29 +00:00
2008-09-04 19:19:32 +00:00
/**
* Redirect old slugs to the correct permalink.
*
* Attempts to find the current slug from the past slugs.
*
* @since 2.1.0
*/
2010-03-21 02:52:00 +00:00
function wp_old_slug_redirect () {
2016-08-31 06:21:41 +00:00
if ( is_404 () && '' !== get_query_var ( 'name' ) ) {
2010-10-19 10:27:34 +00:00
// Guess the current post_type based on the query vars.
2015-09-29 04:58:25 +00:00
if ( get_query_var ( 'post_type' ) ) {
$post_type = get_query_var ( 'post_type' );
} elseif ( get_query_var ( 'attachment' ) ) {
$post_type = 'attachment' ;
2016-08-31 06:21:41 +00:00
} elseif ( get_query_var ( 'pagename' ) ) {
2010-10-19 10:27:34 +00:00
$post_type = 'page' ;
2015-09-29 04:58:25 +00:00
} else {
2010-10-19 10:27:34 +00:00
$post_type = 'post' ;
2015-09-29 04:58:25 +00:00
}
2010-10-19 10:27:34 +00:00
2011-06-23 16:35:34 +00:00
if ( is_array ( $post_type ) ) {
2016-08-31 06:21:41 +00:00
if ( count ( $post_type ) > 1 ) {
2011-06-23 16:35:34 +00:00
return ;
2016-08-31 06:21:41 +00:00
}
2015-03-19 03:56:27 +00:00
$post_type = reset ( $post_type );
2011-06-23 16:35:34 +00:00
}
2010-12-08 21:10:38 +00:00
// Do not attempt redirect for hierarchical post types
2016-08-31 06:21:41 +00:00
if ( is_post_type_hierarchical ( $post_type ) ) {
2010-12-08 21:10:38 +00:00
return ;
2016-08-31 06:21:41 +00:00
}
2010-12-08 21:10:38 +00:00
2017-12-15 08:31:47 +00:00
$id = _find_post_by_old_slug ( $post_type );
2006-11-30 08:48:56 +00:00
2017-12-15 08:31:47 +00:00
if ( ! $id ) {
$id = _find_post_by_old_date ( $post_type );
2016-08-31 06:21:41 +00:00
}
2006-11-30 08:48:56 +00:00
2017-12-15 08:31:47 +00:00
/**
* Filters the old slug redirect post ID.
*
2018-01-24 06:48:31 +00:00
* @since 4.9.3
2017-12-15 08:31:47 +00:00
*
2018-02-21 09:35:33 +00:00
* @param int $id The redirect post ID.
2017-12-15 08:31:47 +00:00
*/
$id = apply_filters ( 'old_slug_redirect_post_id' , $id );
2006-11-30 08:48:56 +00:00
2016-08-31 06:21:41 +00:00
if ( ! $id ) {
2006-11-30 08:48:56 +00:00
return ;
2016-08-31 06:21:41 +00:00
}
2006-11-30 08:48:56 +00:00
2015-09-28 06:57:26 +00:00
$link = get_permalink ( $id );
2016-08-31 06:21:41 +00:00
if ( get_query_var ( 'paged' ) > 1 ) {
$link = user_trailingslashit ( trailingslashit ( $link ) . 'page/' . get_query_var ( 'paged' ) );
2017-11-30 23:11:00 +00:00
} elseif ( is_embed () ) {
2015-10-07 10:36:25 +00:00
$link = user_trailingslashit ( trailingslashit ( $link ) . 'embed' );
2015-09-28 06:57:26 +00:00
}
/**
2016-05-22 18:35:54 +00:00
* Filters the old slug redirect URL.
2015-09-28 06:57:26 +00:00
*
* @since 4.4.0
*
* @param string $link The redirect URL.
*/
$link = apply_filters ( 'old_slug_redirect_url' , $link );
2006-11-30 08:48:56 +00:00
2015-09-28 06:57:26 +00:00
if ( ! $link ) {
2006-11-30 08:48:56 +00:00
return ;
2015-09-28 06:57:26 +00:00
}
2006-11-30 08:48:56 +00:00
2011-05-05 17:33:19 +00:00
wp_redirect ( $link , 301 ); // Permanent redirect
2006-11-30 08:48:56 +00:00
exit ;
2016-08-31 06:21:41 +00:00
}
2006-11-30 08:48:56 +00:00
}
2017-12-15 08:31:47 +00:00
/**
* Find the post ID for redirecting an old slug.
*
* @see wp_old_slug_redirect()
*
2018-01-24 06:48:31 +00:00
* @since 4.9.3
2017-12-15 08:31:47 +00:00
* @access private
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $post_type The current post type based on the query vars.
* @return int $id The Post ID.
*/
function _find_post_by_old_slug ( $post_type ) {
global $wpdb ;
$query = $wpdb -> prepare ( "SELECT post_id FROM $wpdb->postmeta , $wpdb->posts WHERE ID = post_id AND post_type = %s AND meta_key = '_wp_old_slug' AND meta_value = %s" , $post_type , get_query_var ( 'name' ) );
// if year, monthnum, or day have been specified, make our query more precise
// just in case there are multiple identical _wp_old_slug values
if ( get_query_var ( 'year' ) ) {
2018-08-17 01:51:36 +00:00
$query .= $wpdb -> prepare ( ' AND YEAR(post_date) = %d' , get_query_var ( 'year' ) );
2017-12-15 08:31:47 +00:00
}
if ( get_query_var ( 'monthnum' ) ) {
2018-08-17 01:51:36 +00:00
$query .= $wpdb -> prepare ( ' AND MONTH(post_date) = %d' , get_query_var ( 'monthnum' ) );
2017-12-15 08:31:47 +00:00
}
if ( get_query_var ( 'day' ) ) {
2018-08-17 01:51:36 +00:00
$query .= $wpdb -> prepare ( ' AND DAYOFMONTH(post_date) = %d' , get_query_var ( 'day' ) );
2017-12-15 08:31:47 +00:00
}
$id = ( int ) $wpdb -> get_var ( $query );
return $id ;
}
/**
* Find the post ID for redirecting an old date.
*
* @see wp_old_slug_redirect()
*
2018-01-24 06:48:31 +00:00
* @since 4.9.3
2017-12-15 08:31:47 +00:00
* @access private
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $post_type The current post type based on the query vars.
* @return int $id The Post ID.
*/
function _find_post_by_old_date ( $post_type ) {
global $wpdb ;
$date_query = '' ;
if ( get_query_var ( 'year' ) ) {
2018-08-17 01:51:36 +00:00
$date_query .= $wpdb -> prepare ( ' AND YEAR(pm_date.meta_value) = %d' , get_query_var ( 'year' ) );
2017-12-15 08:31:47 +00:00
}
if ( get_query_var ( 'monthnum' ) ) {
2018-08-17 01:51:36 +00:00
$date_query .= $wpdb -> prepare ( ' AND MONTH(pm_date.meta_value) = %d' , get_query_var ( 'monthnum' ) );
2017-12-15 08:31:47 +00:00
}
if ( get_query_var ( 'day' ) ) {
2018-08-17 01:51:36 +00:00
$date_query .= $wpdb -> prepare ( ' AND DAYOFMONTH(pm_date.meta_value) = %d' , get_query_var ( 'day' ) );
2017-12-15 08:31:47 +00:00
}
$id = 0 ;
if ( $date_query ) {
$id = ( int ) $wpdb -> get_var ( $wpdb -> prepare ( "SELECT post_id FROM $wpdb->postmeta AS pm_date, $wpdb->posts WHERE ID = post_id AND post_type = %s AND meta_key = '_wp_old_date' AND post_name = %s" . $date_query , $post_type , get_query_var ( 'name' ) ) );
if ( ! $id ) {
// Check to see if an old slug matches the old date
$id = ( int ) $wpdb -> get_var ( $wpdb -> prepare ( "SELECT ID FROM $wpdb->posts , $wpdb->postmeta AS pm_slug, $wpdb->postmeta AS pm_date WHERE ID = pm_slug.post_id AND ID = pm_date.post_id AND post_type = %s AND pm_slug.meta_key = '_wp_old_slug' AND pm_slug.meta_value = %s AND pm_date.meta_key = '_wp_old_date'" . $date_query , $post_type , get_query_var ( 'name' ) ) );
}
}
return $id ;
}
2008-09-04 19:19:32 +00:00
/**
2010-03-17 04:39:50 +00:00
* Set up global post data.
2008-09-04 19:19:32 +00:00
*
* @since 1.5.0
2015-09-12 20:58:23 +00:00
* @since 4.4.0 Added the ability to pass a post ID to `$post`.
2008-09-04 19:19:32 +00:00
*
2015-09-20 00:05:26 +00:00
* @global WP_Query $wp_query Global WP_Query instance.
2015-05-27 18:15:25 +00:00
*
2015-09-12 20:58:23 +00:00
* @param WP_Post|object|int $post WP_Post instance or Post ID/object.
2008-09-04 19:19:32 +00:00
* @return bool True when finished.
*/
2013-05-20 11:05:50 +00:00
function setup_postdata ( $post ) {
2014-10-29 02:32:24 +00:00
global $wp_query ;
2006-06-08 02:22:16 +00:00
2014-10-29 02:32:24 +00:00
if ( ! empty ( $wp_query ) && $wp_query instanceof WP_Query ) {
return $wp_query -> setup_postdata ( $post );
2013-07-09 05:22:50 +00:00
}
2009-05-26 23:57:01 +00:00
2014-10-29 02:32:24 +00:00
return false ;
2006-06-08 02:22:16 +00:00
}
2019-03-20 15:49:49 +00:00
/**
* Generates post data.
*
* @since 5.2.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @param WP_Post|object|int $post WP_Post instance or Post ID/object.
* @return array|bool Elements of post, or false on failure.
*/
function generate_postdata ( $post ) {
global $wp_query ;
if ( ! empty ( $wp_query ) && $wp_query instanceof WP_Query ) {
return $wp_query -> generate_postdata ( $post );
}
return false ;
}