lly
* check if the query is for one of the pages specified.
*
* @see is_single()
* @see is_singular()
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @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.
*/
function is_page( $page = '' ) {
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_page( $page );
}
/**
* Is the query for paged result and not for the first page?
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_paged() {
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_paged();
}
/**
* Is the query for a post or page preview?
*
* @since 2.0.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_preview() {
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_preview();
}
/**
* Is the query for the robots file?
*
* @since 2.1.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_robots() {
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_robots();
}
/**
* Is the query for a search?
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_search() {
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_search();
}
/**
* Is the query for an existing single post?
*
* Works for any post type, except attachments and pages
*
* If the $post parameter is specified, this function will additionally
* check if the query is for one of the Posts specified.
*
* @see is_page()
* @see is_singular()
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @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.
*/
function is_single( $post = '' ) {
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_single( $post );
}
/**
* Is the query for an existing single post of any post type (post, attachment, page,
* custom post types)?
*
* If the $post_types parameter is specified, this function will additionally
* check if the query is for one of the Posts Types specified.
*
* @see is_page()
* @see is_single()
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @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.
*/
function is_singular( $post_types = '' ) {
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_singular( $post_types );
}
/**
* Is the query for a specific time?
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_time() {
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_time();
}
/**
* Is the query for a trackback endpoint call?
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_trackback() {
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_trackback();
}
/**
* Is the query for an existing year archive?
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_year() {
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_year();
}
/**
* Is the query a 404 (returns no results)?
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_404() {
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_404();
}
/**
* 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 ) ) {
_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_embed();
}
/**
* Is the query the main query?
*
* @since 3.3.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function is_main_query() {
if ( 'pre_get_posts' === current_filter() ) {
$message = sprintf(
/* translators: 1: pre_get_posts 2: WP_Query->is_main_query() 3: is_main_query() 4: link to codex is_main_query() page. */
__( 'In %1$s, use the %2$s method, not the %3$s function. See %4$s.' ),
'pre_get_posts
',
'WP_Query->is_main_query()
',
'is_main_query()
',
__( 'https://codex.wordpress.org/Function_Reference/is_main_query' )
);
_doing_it_wrong( __FUNCTION__, $message, '3.7.0' );
}
global $wp_query;
return $wp_query->is_main_query();
}
/*
* The Loop. Post loop control.
*/
/**
* Whether current WordPress query has results to loop over.
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function have_posts() {
global $wp_query;
return $wp_query->have_posts();
}
/**
* Whether the caller is in the Loop.
*
* @since 2.0.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool True if caller is within loop, false if loop hasn't started or ended.
*/
function in_the_loop() {
global $wp_query;
return $wp_query->in_the_loop;
}
/**
* Rewind the loop posts.
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*/
function rewind_posts() {
global $wp_query;
$wp_query->rewind_posts();
}
/**
* Iterate the post index in the loop.
*
* @since 1.5.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*/
function the_post() {
global $wp_query;
$wp_query->the_post();
}
/*
* Comments loop.
*/
/**
* Whether there are comments to loop over.
*
* @since 2.2.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return bool
*/
function have_comments() {
global $wp_query;
return $wp_query->have_comments();
}
/**
* Iterate comment index in the comment loop.
*
* @since 2.2.0
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @return object
*/
function the_comment() {
global $wp_query;
return $wp_query->the_comment();
}
/**
* Redirect old slugs to the correct permalink.
*
* Attempts to find the current slug from the past slugs.
*
* @since 2.1.0
*/
function wp_old_slug_redirect() {
if ( is_404() && '' !== get_query_var( 'name' ) ) {
// Guess the current post_type based on the query vars.
if ( get_query_var( 'post_type' ) ) {
$post_type = get_query_var( 'post_type' );
} elseif ( get_query_var( 'attachment' ) ) {
$post_type = 'attachment';
} elseif ( get_query_var( 'pagename' ) ) {
$post_type = 'page';
} else {
$post_type = 'post';
}
if ( is_array( $post_type ) ) {
if ( count( $post_type ) > 1 ) {
return;
}
$post_type = reset( $post_type );
}
// Do not attempt redirect for hierarchical post types
if ( is_post_type_hierarchical( $post_type ) ) {
return;
}
$id = _find_post_by_old_slug( $post_type );
if ( ! $id ) {
$id = _find_post_by_old_date( $post_type );
}
/**
* Filters the old slug redirect post ID.
*
* @since 4.9.3
*
* @param int $id The redirect post ID.
*/
$id = apply_filters( 'old_slug_redirect_post_id', $id );
if ( ! $id ) {
return;
}
$link = get_permalink( $id );
if ( get_query_var( 'paged' ) > 1 ) {
$link = user_trailingslashit( trailingslashit( $link ) . 'page/' . get_query_var( 'paged' ) );
} elseif( is_embed() ) {
$link = user_trailingslashit( trailingslashit( $link ) . 'embed' );
}
/**
* Filters the old slug redirect URL.
*
* @since 4.4.0
*
* @param string $link The redirect URL.
*/
$link = apply_filters( 'old_slug_redirect_url', $link );
if ( ! $link ) {
return;
}
wp_redirect( $link, 301 ); // Permanent redirect
exit;
}
}
/**
* Find the post ID for redirecting an old slug.
*
* @see wp_old_slug_redirect()
*
* @since 4.9.3
* @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' ) ) {
$query .= $wpdb->prepare( " AND YEAR(post_date) = %d", get_query_var( 'year' ) );
}
if ( get_query_var( 'monthnum' ) ) {
$query .= $wpdb->prepare( " AND MONTH(post_date) = %d", get_query_var( 'monthnum' ) );
}
if ( get_query_var( 'day' ) ) {
$query .= $wpdb->prepare( " AND DAYOFMONTH(post_date) = %d", get_query_var( 'day' ) );
}
$id = (int) $wpdb->get_var( $query );
return $id;
}
/**
* Find the post ID for redirecting an old date.
*
* @see wp_old_slug_redirect()
*
* @since 4.9.3
* @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' ) ) {
$date_query .= $wpdb->prepare( " AND YEAR(pm_date.meta_value) = %d", get_query_var( 'year' ) );
}
if ( get_query_var( 'monthnum' ) ) {
$date_query .= $wpdb->prepare( " AND MONTH(pm_date.meta_value) = %d", get_query_var( 'monthnum' ) );
}
if ( get_query_var( 'day' ) ) {
$date_query .= $wpdb->prepare( " AND DAYOFMONTH(pm_date.meta_value) = %d", get_query_var( 'day' ) );
}
$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;
}
/**
* Set up global post data.
*
* @since 1.5.0
* @since 4.4.0 Added the ability to pass a post ID to `$post`.
*
* @global WP_Query $wp_query Global WP_Query instance.
*
* @param WP_Post|object|int $post WP_Post instance or Post ID/object.
* @return bool True when finished.
*/
function setup_postdata( $post ) {
global $wp_query;
if ( ! empty( $wp_query ) && $wp_query instanceof WP_Query ) {
return $wp_query->setup_postdata( $post );
}
return false;
}