get_page_children

Definition:
function &get_page_children($page_id, $pages) {}

Retrieve child pages from list of pages matching page ID.
Matches against the pages parameter against the page ID. Also matches all children for the same to retrieve all children of a page. Does not make any SQL queries to get the children.

Parameters

  • int $page_id: Page ID.
  • array $pages: List of pages’ objects.

Source code

function &get_page_children($page_id, $pages) {

	$page_list = array();

	foreach ( (array) $pages as $page ) {

		if ( $page->post_parent == $page_id ) {

			$page_list[] = $page;

			if ( $children = get_page_children($page->ID, $pages) )

				$page_list = array_merge($page_list, $children);

		}

	}

	return $page_list;

}

1534

get_page_by_title

Definition:
function get_page_by_title($page_title, $output = OBJECT, $post_type = 'page' ) {}

Retrieve a page given its title.

Parameters

  • string $page_title: Page title
  • string $output: Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A. Default OBJECT.
  • string $post_type: Optional. Post type. Default page.

Source code

function get_page_by_title($page_title, $output = OBJECT, $post_type = 'page' ) {

	global $wpdb;

	$page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $page_title, $post_type ) );

	if ( $page )

		return get_page($page, $output);



	return null;

}

1532

get_page_by_path

Definition:
function get_page_by_path($page_path, $output = OBJECT, $post_type = 'page') {}

Retrieves a page given its path.

Parameters

  • string $page_path: Page path
  • string $output: Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A. Default OBJECT.
  • string $post_type: Optional. Post type. Default page.

Return values

returns:Null when complete.

Source code

function get_page_by_path($page_path, $output = OBJECT, $post_type = 'page') {

	global $wpdb;



	$page_path = rawurlencode(urldecode($page_path));

	$page_path = str_replace('%2F', '/', $page_path);

	$page_path = str_replace('%20', ' ', $page_path);

	$parts = explode( '/', trim( $page_path, '/' ) );

	$parts = array_map( 'esc_sql', $parts );

	$parts = array_map( 'sanitize_title_for_query', $parts );



	$in_string = "'". implode( "','", $parts ) . "'";

	$post_type_sql = $post_type;

	$wpdb->escape_by_ref( $post_type_sql );

	$pages = $wpdb->get_results( "SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name IN ($in_string) AND (post_type = '$post_type_sql' OR post_type = 'attachment')", OBJECT_K );



	$revparts = array_reverse( $parts );



	$foundid = 0;

	foreach ( (array) $pages as $page ) {

		if ( $page->post_name == $revparts[0] ) {

			$count = 0;

			$p = $page;

			while ( $p->post_parent != 0 && isset( $pages[ $p->post_parent ] ) ) {

				$count++;

				$parent = $pages[ $p->post_parent ];

				if ( ! isset( $revparts[ $count ] ) || $parent->post_name != $revparts[ $count ] )

					break;

				$p = $parent;

			}



			if ( $p->post_parent == 0 && $count+1 == count( $revparts ) && $p->post_name == $revparts[ $count ] ) {

				$foundid = $page->ID;

				break;

			}

		}

	}



	if ( $foundid )

		return get_page( $foundid, $output );



	return null;

}

1530

get_pages

Definition:
function &get_pages($args = '') {}

Retrieve a list of pages.
The defaults that can be overridden are the following: ‘child_of’, ‘sort_order’, ‘sort_column’, ‘post_title’, ‘hierarchical’, ‘exclude’, ‘include’, ‘meta_key’, ‘meta_value’,’authors’, ‘number’, and ‘offset’.

Parameters

  • mixed $args: Optional. Array or string of options that overrides defaults.

Return values

returns:List of pages matching defaults or $args

Defined filters

  • get_pages
    apply_filters('get_pages', $cache[ $key ], $r )
  • get_pages
    apply_filters('get_pages', array()
  • get_pages
    apply_filters('get_pages', $pages, $r)

Source code

function &get_pages($args = '') {

	global $wpdb;



	$defaults = array(

		'child_of' => 0, 'sort_order' => 'ASC',

		'sort_column' => 'post_title', 'hierarchical' => 1,

		'exclude' => array(), 'include' => array(),

		'meta_key' => '', 'meta_value' => '',

		'authors' => '', 'parent' => -1, 'exclude_tree' => '',

		'number' => '', 'offset' => 0,

		'post_type' => 'page', 'post_status' => 'publish',

	);



	$r = wp_parse_args( $args, $defaults );

	extract( $r, EXTR_SKIP );

	$number = (int) $number;

	$offset = (int) $offset;



	// Make sure the post type is hierarchical

	$hierarchical_post_types = get_post_types( array( 'hierarchical' => true ) );

	if ( !in_array( $post_type, $hierarchical_post_types ) )

		return false;



	// Make sure we have a valid post status

	if ( !is_array( $post_status ) )

		$post_status = explode( ',', $post_status );

	if ( array_diff( $post_status, get_post_stati() ) )

		return false;



	$cache = array();

	$key = md5( serialize( compact(array_keys($defaults)) ) );

	if ( $cache = wp_cache_get( 'get_pages', 'posts' ) ) {

		if ( is_array($cache) && isset( $cache[ $key ] ) ) {

			$pages = apply_filters('get_pages', $cache[ $key ], $r );

			return $pages;

		}

	}



	if ( !is_array($cache) )

		$cache = array();



	$inclusions = '';

	if ( !empty($include) ) {

		$child_of = 0; //ignore child_of, parent, exclude, meta_key, and meta_value params if using include

		$parent = -1;

		$exclude = '';

		$meta_key = '';

		$meta_value = '';

		$hierarchical = false;

		$incpages = wp_parse_id_list( $include );

		if ( ! empty( $incpages ) ) {

			foreach ( $incpages as $incpage ) {

				if (empty($inclusions))

					$inclusions = $wpdb->prepare(' AND ( ID = %d ', $incpage);

				else

					$inclusions .= $wpdb->prepare(' OR ID = %d ', $incpage);

			}

		}

	}

	if (!empty($inclusions))

		$inclusions .= ')';



	$exclusions = '';

	if ( !empty($exclude) ) {

		$expages = wp_parse_id_list( $exclude );

		if ( ! empty( $expages ) ) {

			foreach ( $expages as $expage ) {

				if (empty($exclusions))

					$exclusions = $wpdb->prepare(' AND ( ID <> %d ', $expage);

				else

					$exclusions .= $wpdb->prepare(' AND ID <> %d ', $expage);

			}

		}

	}

	if (!empty($exclusions))

		$exclusions .= ')';



	$author_query = '';

	if (!empty($authors)) {

		$post_authors = preg_split('/[\s,]+/',$authors);



		if ( ! empty( $post_authors ) ) {

			foreach ( $post_authors as $post_author ) {

				//Do we have an author id or an author login?

				if ( 0 == intval($post_author) ) {

					$post_author = get_user_by('login', $post_author);

					if ( empty($post_author) )

						continue;

					if ( empty($post_author->ID) )

						continue;

					$post_author = $post_author->ID;

				}



				if ( '' == $author_query )

					$author_query = $wpdb->prepare(' post_author = %d ', $post_author);

				else

					$author_query .= $wpdb->prepare(' OR post_author = %d ', $post_author);

			}

			if ( '' != $author_query )

				$author_query = " AND ($author_query)";

		}

	}



	$join = '';

	$where = "$exclusions $inclusions ";

	if ( ! empty( $meta_key ) || ! empty( $meta_value ) ) {

		$join = " LEFT JOIN $wpdb->postmeta ON ( $wpdb->posts.ID = $wpdb->postmeta.post_id )";



		// meta_key and meta_value might be slashed

		$meta_key = stripslashes($meta_key);

		$meta_value = stripslashes($meta_value);

		if ( ! empty( $meta_key ) )

			$where .= $wpdb->prepare(" AND $wpdb->postmeta.meta_key = %s", $meta_key);

		if ( ! empty( $meta_value ) )

			$where .= $wpdb->prepare(" AND $wpdb->postmeta.meta_value = %s", $meta_value);



	}



	if ( $parent >= 0 )

		$where .= $wpdb->prepare(' AND post_parent = %d ', $parent);



	if ( 1 == count( $post_status ) ) {

		$where_post_type = $wpdb->prepare( "post_type = %s AND post_status = %s", $post_type, array_shift( $post_status ) );

	} else {

		$post_status = implode( "', '", $post_status );

		$where_post_type = $wpdb->prepare( "post_type = %s AND post_status IN ('$post_status')", $post_type );

	}



	$orderby_array = array();

	$allowed_keys = array('author', 'post_author', 'date', 'post_date', 'title', 'post_title', 'name', 'post_name', 'modified',

						  'post_modified', 'modified_gmt', 'post_modified_gmt', 'menu_order', 'parent', 'post_parent',

						  'ID', 'rand', 'comment_count');

	foreach ( explode( ',', $sort_column ) as $orderby ) {

		$orderby = trim( $orderby );

		if ( !in_array( $orderby, $allowed_keys ) )

			continue;



		switch ( $orderby ) {

			case 'menu_order':

				break;

			case 'ID':

				$orderby = "$wpdb->posts.ID";

				break;

			case 'rand':

				$orderby = 'RAND()';

				break;

			case 'comment_count':

				$orderby = "$wpdb->posts.comment_count";

				break;

			default:

				if ( 0 === strpos( $orderby, 'post_' ) )

					$orderby = "$wpdb->posts." . $orderby;

				else

					$orderby = "$wpdb->posts.post_" . $orderby;

		}



		$orderby_array[] = $orderby;



	}

	$sort_column = ! empty( $orderby_array ) ? implode( ',', $orderby_array ) : "$wpdb->posts.post_title";



	$sort_order = strtoupper( $sort_order );

	if ( '' !== $sort_order && !in_array( $sort_order, array( 'ASC', 'DESC' ) ) )

		$sort_order = 'ASC';



	$query = "SELECT * FROM $wpdb->posts $join WHERE ($where_post_type) $where ";

	$query .= $author_query;

	$query .= " ORDER BY " . $sort_column . " " . $sort_order ;



	if ( !empty($number) )

		$query .= ' LIMIT ' . $offset . ',' . $number;



	$pages = $wpdb->get_results($query);



	if ( empty($pages) ) {

		$pages = apply_filters('get_pages', array(), $r);

		return $pages;

	}



	// Sanitize before caching so it'll only get done once

	$num_pages = count($pages);

	for ($i = 0; $i < $num_pages; $i++) {

		$pages[$i] = sanitize_post($pages[$i], 'raw');

	}



	// Update cache.

	update_page_cache($pages);



	if ( $child_of || $hierarchical )

		$pages = & get_page_children($child_of, $pages);



	if ( !empty($exclude_tree) ) {

		$exclude = (int) $exclude_tree;

		$children = get_page_children($exclude, $pages);

		$excludes = array();

		foreach ( $children as $child )

			$excludes[] = $child->ID;

		$excludes[] = $exclude;

		$num_pages = count($pages);

		for ( $i = 0; $i < $num_pages; $i++ ) {

			if ( in_array($pages[$i]->ID, $excludes) )

				unset($pages[$i]);

		}

	}



	$cache[ $key ] = $pages;

	wp_cache_set( 'get_pages', $cache, 'posts' );



	$pages = apply_filters('get_pages', $pages, $r);



	return $pages;

}

1528

get_pagenum_link

Definition:
function get_pagenum_link($pagenum = 1) {}

Retrieve links for page numbers.

Parameters

  • int $pagenum: Optional. Page ID.

Defined filters

  • get_pagenum_link
    apply_filters('get_pagenum_link', $result)

Source code

function get_pagenum_link($pagenum = 1) {

	global $wp_rewrite;



	$pagenum = (int) $pagenum;



	$request = remove_query_arg( 'paged' );



	$home_root = parse_url(home_url());

	$home_root = ( isset($home_root['path']) ) ? $home_root['path'] : '';

	$home_root = preg_quote( trailingslashit( $home_root ), '|' );



	$request = preg_replace('|^'. $home_root . '|', '', $request);

	$request = preg_replace('|^/+|', '', $request);



	if ( !$wp_rewrite->using_permalinks() || is_admin() ) {

		$base = trailingslashit( get_bloginfo( 'url' ) );



		if ( $pagenum > 1 ) {

			$result = add_query_arg( 'paged', $pagenum, $base . $request );

		} else {

			$result = $base . $request;

		}

	} else {

		$qs_regex = '|\?.*?$|';

		preg_match( $qs_regex, $request, $qs_match );



		if ( !empty( $qs_match[0] ) ) {

			$query_string = $qs_match[0];

			$request = preg_replace( $qs_regex, '', $request );

		} else {

			$query_string = '';

		}



		$request = preg_replace( "|$wp_rewrite->pagination_base/\d+/?$|", '', $request);

		$request = preg_replace( '|^index\.php|', '', $request);

		$request = ltrim($request, '/');



		$base = trailingslashit( get_bloginfo( 'url' ) );



		if ( $wp_rewrite->using_index_permalinks() && ( $pagenum > 1 || '' != $request ) )

			$base .= 'index.php/';



		if ( $pagenum > 1 ) {

			$request = ( ( !empty( $request ) ) ? trailingslashit( $request ) : $request ) . user_trailingslashit( $wp_rewrite->pagination_base . "/" . $pagenum, 'paged' );

		}



		$result = $base . $request . $query_string;

	}



	$result = apply_filters('get_pagenum_link', $result);



	return $result;

}

1526