2004-01-27 04:58:01 -05:00
< ? php
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* WordPress Post Template Functions .
2008-09-04 19:12:08 -04:00
*
* Gets content for the current post in the loop .
*
* @ package WordPress
* @ subpackage Template
*/
2004-01-27 04:58:01 -05:00
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Display the ID of the current item in the WordPress Loop .
2008-09-04 19:12:08 -04:00
*
* @ since 0.71
*/
2004-01-27 04:58:01 -05:00
function the_ID () {
2010-08-28 07:57:28 -04:00
echo get_the_ID ();
2004-01-27 04:58:01 -05:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Retrieve the ID of the current item in the WordPress Loop .
2008-09-04 19:12:08 -04:00
*
* @ since 2.1 . 0
2010-08-28 07:57:28 -04:00
* @ uses $post
2008-09-04 19:12:08 -04:00
*
2010-08-28 07:57:28 -04:00
* @ return int
2008-09-04 19:12:08 -04:00
*/
2006-03-16 20:16:22 -05:00
function get_the_ID () {
2012-09-04 12:29:28 -04:00
return get_post () -> ID ;
2006-03-16 20:16:22 -05:00
}
2005-10-18 18:42:02 -04:00
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Display or retrieve the current post title with optional content .
2008-09-04 19:12:08 -04:00
*
* @ since 0.71
*
2008-10-13 18:28:34 -04:00
* @ param string $before Optional . Content to prepend to the title .
* @ param string $after Optional . Content to append to the title .
* @ param bool $echo Optional , default to true . Whether to display or return .
* @ return null | string Null on no title . String if $echo parameter is false .
2008-09-04 19:12:08 -04:00
*/
2004-01-27 04:58:01 -05:00
function the_title ( $before = '' , $after = '' , $echo = true ) {
2004-02-16 23:56:29 -05:00
$title = get_the_title ();
2007-06-25 13:48:35 -04:00
2007-09-18 18:50:59 -04:00
if ( strlen ( $title ) == 0 )
2007-06-25 13:48:35 -04:00
return ;
$title = $before . $title . $after ;
if ( $echo )
echo $title ;
else
return $title ;
2004-01-27 04:58:01 -05:00
}
2004-02-16 23:56:29 -05:00
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Sanitize the current title when retrieving or displaying .
2008-09-04 19:12:08 -04:00
*
2008-10-13 18:28:34 -04:00
* Works like { @ link the_title ()}, except the parameters can be in a string or
* an array . See the function for what can be override in the $args parameter .
*
* The title before it is displayed will have the tags stripped and { @ link
2009-05-05 15:43:53 -04:00
* esc_attr ()} before it is passed to the user or displayed . The default
2008-10-13 18:28:34 -04:00
* as with { @ link the_title ()}, is to display the title .
2008-09-04 19:12:08 -04:00
*
* @ since 2.3 . 0
*
2008-10-13 18:28:34 -04:00
* @ param string | array $args Optional . Override the defaults .
* @ return string | null Null on failure or display . String when echo is false .
2008-09-04 19:12:08 -04:00
*/
2007-09-18 18:50:59 -04:00
function the_title_attribute ( $args = '' ) {
2014-05-13 00:48:15 -04:00
$defaults = array ( 'before' => '' , 'after' => '' , 'echo' => true , 'post' => get_post () );
$r = wp_parse_args ( $args , $defaults );
2013-07-23 12:05:40 -04:00
2014-05-13 00:48:15 -04:00
$title = get_the_title ( $r [ 'post' ] );
2007-09-18 18:50:59 -04:00
2014-05-13 00:48:15 -04:00
if ( strlen ( $title ) == 0 ) {
2007-09-18 18:50:59 -04:00
return ;
2014-05-13 00:48:15 -04:00
}
2007-09-18 18:50:59 -04:00
2014-05-13 00:48:15 -04:00
$title = $r [ 'before' ] . $title . $r [ 'after' ];
$title = esc_attr ( strip_tags ( $title ) );
2007-09-18 18:50:59 -04:00
2014-05-13 00:48:15 -04:00
if ( $r [ 'echo' ] ) {
2007-09-18 18:50:59 -04:00
echo $title ;
2014-05-13 00:48:15 -04:00
} else {
2007-09-18 18:50:59 -04:00
return $title ;
2014-05-13 00:48:15 -04:00
}
2007-09-18 18:50:59 -04:00
}
2005-10-18 18:42:02 -04:00
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Retrieve post title .
2008-09-04 19:12:08 -04:00
*
2008-10-21 23:06:53 -04:00
* If the post is protected and the visitor is not an admin , then " Protected "
* will be displayed before the post title . If the post is private , then
* " Private " will be located before the post title .
2008-09-04 19:12:08 -04:00
*
* @ since 0.71
*
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $post Optional . Post ID or post object .
2008-10-21 23:06:53 -04:00
* @ return string
2008-09-04 19:12:08 -04:00
*/
2012-09-04 12:29:28 -04:00
function get_the_title ( $post = 0 ) {
$post = get_post ( $post );
$title = isset ( $post -> post_title ) ? $post -> post_title : '' ;
$id = isset ( $post -> ID ) ? $post -> ID : 0 ;
if ( ! is_admin () ) {
if ( ! empty ( $post -> post_password ) ) {
2014-03-23 23:37:16 -04:00
/**
* Filter the text prepended to the post title for protected posts .
*
* The filter is only applied on the front end .
*
* @ since 2.8 . 0
*
* @ param string $prepend Text displayed before the post title .
* Default 'Protected: %s' .
*/
2012-09-04 12:29:28 -04:00
$protected_title_format = apply_filters ( 'protected_title_format' , __ ( 'Protected: %s' ) );
$title = sprintf ( $protected_title_format , $title );
} else if ( isset ( $post -> post_status ) && 'private' == $post -> post_status ) {
2014-03-23 23:37:16 -04:00
/**
* Filter the text prepended to the post title of private posts .
*
* The filter is only applied on the front end .
*
* @ since 2.8 . 0
*
* @ param string $prepend Text displayed before the post title .
* Default 'Private: %s' .
*/
2012-09-04 12:29:28 -04:00
$private_title_format = apply_filters ( 'private_title_format' , __ ( 'Private: %s' ) );
$title = sprintf ( $private_title_format , $title );
2009-04-28 13:36:10 -04:00
}
2008-03-19 17:33:47 -04:00
}
2012-09-04 12:29:28 -04:00
2014-03-23 23:37:16 -04:00
/**
* Filter the post title .
*
* @ since 0.71
*
* @ param string $title The post title .
* @ param int $id The post ID .
*/
2009-12-27 03:57:33 -05:00
return apply_filters ( 'the_title' , $title , $id );
2004-01-27 04:58:01 -05:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Display the Post Global Unique Identifier ( guid ) .
2008-09-04 19:12:08 -04:00
*
2008-10-21 23:06:53 -04:00
* The guid will appear to be a link , but should not be used as an link to the
* post . The reason you should not use it as a link , is because of moving the
* blog across domains .
2010-06-02 16:04:07 -04:00
*
2010-05-26 13:27:18 -04:00
* Url is escaped to make it xml safe
2008-09-04 19:12:08 -04:00
*
* @ since 1.5 . 0
*
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2008-09-04 19:12:08 -04:00
*/
2006-06-07 19:17:59 -04:00
function the_guid ( $id = 0 ) {
2010-06-15 16:31:44 -04:00
echo esc_url ( get_the_guid ( $id ) );
2006-06-07 19:17:59 -04:00
}
2005-10-18 18:42:02 -04:00
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Retrieve the Post Global Unique Identifier ( guid ) .
2008-09-04 19:12:08 -04:00
*
2008-10-21 23:06:53 -04:00
* The guid will appear to be a link , but should not be used as an link to the
* post . The reason you should not use it as a link , is because of moving the
* blog across domains .
2008-09-04 19:12:08 -04:00
*
* @ since 1.5 . 0
*
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2008-10-21 23:06:53 -04:00
* @ return string
2008-09-04 19:12:08 -04:00
*/
2005-01-07 17:01:59 -05:00
function get_the_guid ( $id = 0 ) {
2012-08-23 16:01:10 -04:00
$post = get_post ( $id );
2005-10-18 18:42:02 -04:00
2014-03-23 23:37:16 -04:00
/**
* Filter the Global Unique Identifier ( guid ) of the post .
*
* @ since 1.5 . 0
*
* @ param string $post_guid Global Unique Identifier ( guid ) of the post .
*/
return apply_filters ( 'get_the_guid' , $post -> guid );
2005-01-07 17:01:59 -05:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Display the post content .
2008-09-04 19:12:08 -04:00
*
* @ since 0.71
*
2008-10-21 23:06:53 -04:00
* @ param string $more_link_text Optional . Content for when there is more text .
2013-03-27 14:34:59 -04:00
* @ param bool $strip_teaser Optional . Strip teaser content before the more text . Default is false .
2008-09-04 19:12:08 -04:00
*/
Remove wp_parse_post_content(), get_paged_content(), paginate_content() from 3.6, and remove the new $id parameters for get_the_content() and the_content().
The content parsing functions are good abstractions, but are no longer needed by core and are too closely tied to legacy globals, rather than paving a new path.
For get_the_content() and the_content(), this only worsens the function prototype. It muddies theme-specific display (more links, etc) with filtered content. `apply_filters( 'the_content', $post->post_content )` is sufficient practice for now.
see #24330, [24301]. see #23625, [23804].
git-svn-id: http://core.svn.wordpress.org/trunk@24598 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-07-09 01:22:50 -04:00
function the_content ( $more_link_text = null , $strip_teaser = false ) {
$content = get_the_content ( $more_link_text , $strip_teaser );
2014-03-23 23:37:16 -04:00
/**
* Filter the post content .
*
* @ since 0.71
*
* @ param string $content Content of the current post .
*/
Remove wp_parse_post_content(), get_paged_content(), paginate_content() from 3.6, and remove the new $id parameters for get_the_content() and the_content().
The content parsing functions are good abstractions, but are no longer needed by core and are too closely tied to legacy globals, rather than paving a new path.
For get_the_content() and the_content(), this only worsens the function prototype. It muddies theme-specific display (more links, etc) with filtered content. `apply_filters( 'the_content', $post->post_content )` is sufficient practice for now.
see #24330, [24301]. see #23625, [23804].
git-svn-id: http://core.svn.wordpress.org/trunk@24598 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-07-09 01:22:50 -04:00
$content = apply_filters ( 'the_content' , $content );
$content = str_replace ( ']]>' , ']]>' , $content );
echo $content ;
2004-01-27 04:58:01 -05:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Retrieve the post content .
2008-09-04 19:12:08 -04:00
*
* @ since 0.71
*
2008-10-21 23:06:53 -04:00
* @ param string $more_link_text Optional . Content for when there is more text .
2011-10-26 06:15:29 -04:00
* @ param bool $stripteaser Optional . Strip teaser content before the more text . Default is false .
2008-10-21 23:06:53 -04:00
* @ return string
2008-09-04 19:12:08 -04:00
*/
Remove wp_parse_post_content(), get_paged_content(), paginate_content() from 3.6, and remove the new $id parameters for get_the_content() and the_content().
The content parsing functions are good abstractions, but are no longer needed by core and are too closely tied to legacy globals, rather than paving a new path.
For get_the_content() and the_content(), this only worsens the function prototype. It muddies theme-specific display (more links, etc) with filtered content. `apply_filters( 'the_content', $post->post_content )` is sufficient practice for now.
see #24330, [24301]. see #23625, [23804].
git-svn-id: http://core.svn.wordpress.org/trunk@24598 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-07-09 01:22:50 -04:00
function get_the_content ( $more_link_text = null , $strip_teaser = false ) {
global $page , $more , $preview , $pages , $multipage ;
$post = get_post ();
2007-12-06 14:49:33 -05:00
2008-11-20 13:20:25 -05:00
if ( null === $more_link_text )
2013-05-08 17:27:31 -04:00
$more_link_text = __ ( '(more…)' );
2008-08-05 02:40:44 -04:00
2005-10-18 18:42:02 -04:00
$output = '' ;
2013-03-27 14:34:59 -04:00
$has_teaser = false ;
2005-10-18 18:42:02 -04:00
2008-10-21 23:06:53 -04:00
// If post password required and it doesn't match the cookie.
2013-05-20 07:05:50 -04:00
if ( post_password_required ( $post ) )
return get_the_password_form ( $post );
2005-10-18 18:42:02 -04:00
2013-03-27 14:34:59 -04:00
if ( $page > count ( $pages ) ) // if the requested page doesn't exist
$page = count ( $pages ); // give them the highest numbered page that DOES exist
2006-08-18 04:36:11 -04:00
2013-03-27 14:34:59 -04:00
$content = $pages [ $page - 1 ];
if ( preg_match ( '/<!--more(.*?)?-->/' , $content , $matches ) ) {
$content = explode ( $matches [ 0 ], $content , 2 );
if ( ! empty ( $matches [ 1 ] ) && ! empty ( $more_link_text ) )
$more_link_text = strip_tags ( wp_kses_no_null ( trim ( $matches [ 1 ] ) ) );
2009-04-16 15:43:01 -04:00
2013-03-27 14:34:59 -04:00
$has_teaser = true ;
2006-08-01 09:53:04 -04:00
} else {
2013-03-27 14:34:59 -04:00
$content = array ( $content );
2006-08-01 00:54:23 -04:00
}
2013-03-27 14:34:59 -04:00
if ( false !== strpos ( $post -> post_content , '<!--noteaser-->' ) && ( ! $multipage || $page == 1 ) )
$strip_teaser = true ;
2005-10-18 18:42:02 -04:00
$teaser = $content [ 0 ];
2013-03-27 14:34:59 -04:00
if ( $more && $strip_teaser && $has_teaser )
2005-10-18 18:42:02 -04:00
$teaser = '' ;
2013-03-27 14:34:59 -04:00
2005-10-18 18:42:02 -04:00
$output .= $teaser ;
2013-03-27 14:34:59 -04:00
if ( count ( $content ) > 1 ) {
2006-09-11 19:59:00 -04:00
if ( $more ) {
2010-08-28 07:57:28 -04:00
$output .= '<span id="more-' . $post -> ID . '"></span>' . $content [ 1 ];
2006-09-11 19:59:00 -04:00
} else {
2013-03-27 14:34:59 -04:00
if ( ! empty ( $more_link_text ) )
2014-03-23 23:37:16 -04:00
/**
* Filter the Read More link text .
*
* @ since 2.8 . 0
*
* @ param string $more_link_element Read More link element .
* @ param string $more_link_text Read More text .
*/
2010-08-28 07:57:28 -04:00
$output .= apply_filters ( 'the_content_more_link' , ' <a href="' . get_permalink () . " #more- { $post -> ID } \" class= \" more-link \" > $more_link_text </a> " , $more_link_text );
2013-03-27 14:34:59 -04:00
$output = force_balance_tags ( $output );
2006-09-11 19:59:00 -04:00
}
2005-10-18 18:42:02 -04:00
}
2013-03-27 14:34:59 -04:00
2005-10-18 18:42:02 -04:00
if ( $preview ) // preview fix for javascript bug with foreign languages
2013-03-27 14:34:59 -04:00
$output = preg_replace_callback ( '/\%u([0-9A-F]{4})/' , '_convert_urlencoded_to_entities' , $output );
2005-10-18 18:42:02 -04:00
return $output ;
2004-01-27 04:58:01 -05:00
}
2010-10-28 03:25:30 -04:00
/**
* Preview fix for javascript bug with foreign languages
2010-11-17 13:47:34 -05:00
*
2010-10-28 03:25:30 -04:00
* @ since 3.1 . 0
* @ access private
* @ param array $match Match array from preg_replace_callback
2012-09-10 16:04:33 -04:00
* @ return string
2010-10-28 03:25:30 -04:00
*/
2010-11-11 17:50:36 -05:00
function _convert_urlencoded_to_entities ( $match ) {
2010-11-17 13:47:34 -05:00
return '&#' . base_convert ( $match [ 1 ], 16 , 10 ) . ';' ;
2010-10-28 03:25:30 -04:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Display the post excerpt .
2008-09-04 19:12:08 -04:00
*
* @ since 0.71
*/
2004-01-27 04:58:01 -05:00
function the_excerpt () {
2014-03-23 23:37:16 -04:00
/**
* Filter the displayed post excerpt .
*
* @ since 0.71
*
* @ see get_the_excerpt ()
*
* @ param string $post_excerpt The post excerpt .
*/
echo apply_filters ( 'the_excerpt' , get_the_excerpt () );
2004-01-27 04:58:01 -05:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Retrieve the post excerpt .
2008-09-04 19:12:08 -04:00
*
* @ since 0.71
*
2008-10-21 23:06:53 -04:00
* @ param mixed $deprecated Not used .
* @ return string
2008-09-04 19:12:08 -04:00
*/
2009-12-30 11:23:39 -05:00
function get_the_excerpt ( $deprecated = '' ) {
2009-12-24 06:12:04 -05:00
if ( ! empty ( $deprecated ) )
2009-12-30 11:23:39 -05:00
_deprecated_argument ( __FUNCTION__ , '2.3' );
2009-12-24 06:12:04 -05:00
2012-09-05 15:54:08 -04:00
$post = get_post ();
2012-09-04 12:29:28 -04:00
if ( post_password_required () ) {
2012-06-28 15:26:06 -04:00
return __ ( 'There is no excerpt because this is a protected post.' );
2005-02-14 19:21:21 -05:00
}
2004-02-22 09:39:04 -05:00
2014-03-23 23:37:16 -04:00
/**
* Filter the retrieved post excerpt .
*
* @ since 1.2 . 0
*
* @ param string $post_excerpt The post excerpt .
*/
2012-06-28 15:26:06 -04:00
return apply_filters ( 'get_the_excerpt' , $post -> post_excerpt );
2004-01-27 04:58:01 -05:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Whether post has excerpt .
2008-09-04 19:12:08 -04:00
*
* @ since 2.3 . 0
*
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2008-10-21 23:06:53 -04:00
* @ return bool
2008-09-04 19:12:08 -04:00
*/
2007-04-22 00:25:47 -04:00
function has_excerpt ( $id = 0 ) {
2012-08-23 16:01:10 -04:00
$post = get_post ( $id );
2007-04-22 00:25:47 -04:00
return ( ! empty ( $post -> post_excerpt ) );
}
2005-10-18 18:42:02 -04:00
2008-08-13 15:09:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Display the classes for the post div .
2008-08-13 15:09:08 -04:00
*
2008-10-13 18:28:34 -04:00
* @ since 2.7 . 0
2008-08-13 15:09:08 -04:00
*
2008-10-21 23:06:53 -04:00
* @ param string | array $class One or more classes to add to the class list .
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $post_id Optional . Post ID or post object .
2008-08-13 15:09:08 -04:00
*/
function post_class ( $class = '' , $post_id = null ) {
2008-08-13 19:26:14 -04:00
// Separates classes with a single space, collates classes for post DIV
echo 'class="' . join ( ' ' , get_post_class ( $class , $post_id ) ) . '"' ;
}
/**
2008-10-13 18:28:34 -04:00
* Retrieve the classes for the post div as an array .
2008-08-13 19:26:14 -04:00
*
2014-03-06 01:06:14 -05:00
* The class names are many . If the post is a sticky , then the 'sticky'
* class name . The class ' hentry ' is always added to each post . If the post has a
* post thumbnail , 'has-post-thumbnail' is added as a class . For each
2008-10-21 23:06:53 -04:00
* category , the class will be added with 'category-' with category slug is
* added . The tags are the same way as the categories with 'tag-' before the tag
* slug . All classes are passed through the filter , 'post_class' with the list
* of classes , followed by $class parameter value , with the post ID as the last
* parameter .
2008-08-13 19:26:14 -04:00
*
2008-10-13 18:28:34 -04:00
* @ since 2.7 . 0
2008-08-13 19:26:14 -04:00
*
2008-10-21 23:06:53 -04:00
* @ param string | array $class One or more classes to add to the class list .
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $post_id Optional . Post ID or post object .
2008-10-21 23:06:53 -04:00
* @ return array Array of classes .
2008-08-13 19:26:14 -04:00
*/
function get_post_class ( $class = '' , $post_id = null ) {
2008-08-13 17:58:06 -04:00
$post = get_post ( $post_id );
2008-08-13 15:09:08 -04:00
2008-08-13 17:59:52 -04:00
$classes = array ();
2009-05-24 19:47:49 -04:00
2009-11-18 16:04:09 -05:00
if ( empty ( $post ) )
return $classes ;
2009-05-12 13:11:57 -04:00
$classes [] = 'post-' . $post -> ID ;
2012-09-14 14:57:11 -04:00
if ( ! is_admin () )
$classes [] = $post -> post_type ;
2010-02-23 18:32:17 -05:00
$classes [] = 'type-' . $post -> post_type ;
2010-11-01 14:07:31 -04:00
$classes [] = 'status-' . $post -> post_status ;
2010-11-17 13:47:34 -05:00
2010-11-11 23:10:56 -05:00
// Post Format
2011-01-13 18:02:24 -05:00
if ( post_type_supports ( $post -> post_type , 'post-formats' ) ) {
2011-09-07 16:10:42 -04:00
$post_format = get_post_format ( $post -> ID );
2011-01-13 18:02:24 -05:00
if ( $post_format && ! is_wp_error ( $post_format ) )
$classes [] = 'format-' . sanitize_html_class ( $post_format );
else
$classes [] = 'format-standard' ;
}
2008-08-13 15:09:08 -04:00
2014-03-06 01:06:14 -05:00
// Post requires password
if ( post_password_required ( $post -> ID ) ) {
2010-11-01 14:05:33 -04:00
$classes [] = 'post-password-required' ;
2014-03-06 01:06:14 -05:00
// Post thumbnails
2014-03-19 15:00:14 -04:00
} elseif ( ! is_attachment ( $post ) && current_theme_supports ( 'post-thumbnails' ) && has_post_thumbnail ( $post -> ID ) ) {
2014-03-06 01:06:14 -05:00
$classes [] = 'has-post-thumbnail' ;
}
2010-11-17 13:47:34 -05:00
2008-08-13 17:59:52 -04:00
// sticky for Sticky Posts
2010-06-01 11:03:49 -04:00
if ( is_sticky ( $post -> ID ) && is_home () && ! is_paged () )
2008-08-13 17:58:06 -04:00
$classes [] = 'sticky' ;
2008-08-13 15:09:08 -04:00
2010-11-01 14:05:33 -04:00
// hentry for hAtom compliance
2008-08-13 17:58:06 -04:00
$classes [] = 'hentry' ;
2008-08-13 15:09:08 -04:00
2008-08-13 17:58:06 -04:00
// Categories
2010-11-05 08:47:19 -04:00
if ( is_object_in_taxonomy ( $post -> post_type , 'category' ) ) {
2010-11-12 16:53:15 -05:00
foreach ( ( array ) get_the_category ( $post -> ID ) as $cat ) {
2010-11-05 08:47:19 -04:00
if ( empty ( $cat -> slug ) )
continue ;
2010-11-12 13:40:51 -05:00
$classes [] = 'category-' . sanitize_html_class ( $cat -> slug , $cat -> term_id );
2010-11-05 08:47:19 -04:00
}
2008-08-13 17:58:06 -04:00
}
// Tags
2010-11-05 08:47:19 -04:00
if ( is_object_in_taxonomy ( $post -> post_type , 'post_tag' ) ) {
foreach ( ( array ) get_the_tags ( $post -> ID ) as $tag ) {
if ( empty ( $tag -> slug ) )
continue ;
$classes [] = 'tag-' . sanitize_html_class ( $tag -> slug , $tag -> term_id );
}
2008-08-13 17:58:06 -04:00
}
if ( ! empty ( $class ) ) {
2008-08-13 19:26:14 -04:00
if ( ! is_array ( $class ) )
$class = preg_split ( '#\s+#' , $class );
2008-08-13 17:58:06 -04:00
$classes = array_merge ( $classes , $class );
}
2009-08-18 12:05:07 -04:00
$classes = array_map ( 'esc_attr' , $classes );
2014-03-23 23:37:16 -04:00
/**
* Filter the list of CSS classes for the current post .
*
* @ since 2.7 . 0
*
* @ param array $classes An array of post classes .
* @ param string $class A comma - separated list of additional classes added to the post .
* @ param int $post_id The post ID .
*/
return apply_filters ( 'post_class' , $classes , $class , $post -> ID );
2008-08-13 15:09:08 -04:00
}
2009-02-02 14:21:38 -05:00
/**
* Display the classes for the body element .
*
* @ since 2.8 . 0
*
* @ param string | array $class One or more classes to add to the class list .
*/
function body_class ( $class = '' ) {
// Separates classes with a single space, collates classes for body element
echo 'class="' . join ( ' ' , get_body_class ( $class ) ) . '"' ;
}
/**
* Retrieve the classes for the body element as an array .
*
* @ since 2.8 . 0
*
* @ param string | array $class One or more classes to add to the class list .
* @ return array Array of classes .
*/
function get_body_class ( $class = '' ) {
2010-02-19 21:01:46 -05:00
global $wp_query , $wpdb ;
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
$classes = array ();
2009-03-17 22:43:45 -04:00
2010-05-03 01:49:19 -04:00
if ( is_rtl () )
2009-02-02 14:21:38 -05:00
$classes [] = 'rtl' ;
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
if ( is_front_page () )
$classes [] = 'home' ;
if ( is_home () )
$classes [] = 'blog' ;
if ( is_archive () )
$classes [] = 'archive' ;
if ( is_date () )
$classes [] = 'date' ;
2012-04-25 16:38:40 -04:00
if ( is_search () ) {
2009-02-02 14:21:38 -05:00
$classes [] = 'search' ;
2012-04-25 16:38:40 -04:00
$classes [] = $wp_query -> posts ? 'search-results' : 'search-no-results' ;
}
2009-02-02 14:21:38 -05:00
if ( is_paged () )
$classes [] = 'paged' ;
if ( is_attachment () )
$classes [] = 'attachment' ;
if ( is_404 () )
$classes [] = 'error404' ;
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
if ( is_single () ) {
2010-02-08 17:05:05 -05:00
$post_id = $wp_query -> get_queried_object_id ();
$post = $wp_query -> get_queried_object ();
2010-02-08 13:02:23 -05:00
2010-02-08 17:05:05 -05:00
$classes [] = 'single' ;
2012-11-07 17:12:44 -05:00
if ( isset ( $post -> post_type ) ) {
$classes [] = 'single-' . sanitize_html_class ( $post -> post_type , $post_id );
$classes [] = 'postid-' . $post_id ;
// Post Format
if ( post_type_supports ( $post -> post_type , 'post-formats' ) ) {
$post_format = get_post_format ( $post -> ID );
if ( $post_format && ! is_wp_error ( $post_format ) )
$classes [] = 'single-format-' . sanitize_html_class ( $post_format );
else
$classes [] = 'single-format-standard' ;
2012-11-17 10:11:29 -05:00
}
2011-09-07 16:10:42 -04:00
}
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
if ( is_attachment () ) {
2010-02-08 17:05:05 -05:00
$mime_type = get_post_mime_type ( $post_id );
2009-02-02 14:21:38 -05:00
$mime_prefix = array ( 'application/' , 'image/' , 'text/' , 'audio/' , 'video/' , 'music/' );
2010-02-08 17:05:05 -05:00
$classes [] = 'attachmentid-' . $post_id ;
2010-02-27 15:06:35 -05:00
$classes [] = 'attachment-' . str_replace ( $mime_prefix , '' , $mime_type );
2009-02-02 14:21:38 -05:00
}
} elseif ( is_archive () ) {
2010-10-15 15:44:57 -04:00
if ( is_post_type_archive () ) {
$classes [] = 'post-type-archive' ;
2013-10-09 15:14:09 -04:00
$post_type = get_query_var ( 'post_type' );
if ( is_array ( $post_type ) )
$post_type = reset ( $post_type );
$classes [] = 'post-type-archive-' . sanitize_html_class ( $post_type );
2010-10-15 15:44:57 -04:00
} else if ( is_author () ) {
2009-02-02 14:21:38 -05:00
$author = $wp_query -> get_queried_object ();
$classes [] = 'author' ;
2012-11-07 17:12:44 -05:00
if ( isset ( $author -> user_nicename ) ) {
$classes [] = 'author-' . sanitize_html_class ( $author -> user_nicename , $author -> ID );
2012-11-17 10:11:29 -05:00
$classes [] = 'author-' . $author -> ID ;
2012-11-07 17:12:44 -05:00
}
2009-02-02 14:21:38 -05:00
} elseif ( is_category () ) {
$cat = $wp_query -> get_queried_object ();
$classes [] = 'category' ;
2012-11-07 17:12:44 -05:00
if ( isset ( $cat -> term_id ) ) {
$classes [] = 'category-' . sanitize_html_class ( $cat -> slug , $cat -> term_id );
2012-11-17 10:11:29 -05:00
$classes [] = 'category-' . $cat -> term_id ;
2012-11-07 17:12:44 -05:00
}
2009-02-02 14:21:38 -05:00
} elseif ( is_tag () ) {
$tags = $wp_query -> get_queried_object ();
$classes [] = 'tag' ;
2012-11-07 17:12:44 -05:00
if ( isset ( $tags -> term_id ) ) {
$classes [] = 'tag-' . sanitize_html_class ( $tags -> slug , $tags -> term_id );
2012-11-17 10:11:29 -05:00
$classes [] = 'tag-' . $tags -> term_id ;
2012-11-07 17:12:44 -05:00
}
2010-10-20 05:32:16 -04:00
} elseif ( is_tax () ) {
$term = $wp_query -> get_queried_object ();
2012-11-07 17:12:44 -05:00
if ( isset ( $term -> term_id ) ) {
$classes [] = 'tax-' . sanitize_html_class ( $term -> taxonomy );
$classes [] = 'term-' . sanitize_html_class ( $term -> slug , $term -> term_id );
$classes [] = 'term-' . $term -> term_id ;
}
2009-02-02 14:21:38 -05:00
}
} elseif ( is_page () ) {
2009-04-16 14:22:27 -04:00
$classes [] = 'page' ;
2009-04-20 14:18:39 -04:00
2010-02-08 17:05:05 -05:00
$page_id = $wp_query -> get_queried_object_id ();
2009-04-16 13:37:58 -04:00
2012-08-23 16:01:10 -04:00
$post = get_post ( $page_id );
2009-04-22 13:46:51 -04:00
2010-02-08 17:05:05 -05:00
$classes [] = 'page-id-' . $page_id ;
2009-04-22 13:46:51 -04:00
2010-02-08 17:05:05 -05:00
if ( $wpdb -> get_var ( $wpdb -> prepare ( " SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'page' AND post_status = 'publish' LIMIT 1 " , $page_id ) ) )
2009-02-02 14:21:38 -05:00
$classes [] = 'page-parent' ;
2009-03-17 22:43:45 -04:00
2010-01-27 12:45:49 -05:00
if ( $post -> post_parent ) {
2009-05-12 13:11:57 -04:00
$classes [] = 'page-child' ;
2010-01-27 12:45:49 -05:00
$classes [] = 'parent-pageid-' . $post -> post_parent ;
2009-06-14 20:28:52 -04:00
}
if ( is_page_template () ) {
2009-05-12 13:11:57 -04:00
$classes [] = 'page-template' ;
2012-03-02 13:56:54 -05:00
$classes [] = 'page-template-' . sanitize_html_class ( str_replace ( '.' , '-' , get_page_template_slug ( $page_id ) ) );
2011-07-11 01:31:57 -04:00
} else {
2011-07-11 01:34:15 -04:00
$classes [] = 'page-template-default' ;
2009-06-14 20:28:52 -04:00
}
2009-02-02 14:21:38 -05:00
}
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
if ( is_user_logged_in () )
$classes [] = 'logged-in' ;
2009-03-17 22:43:45 -04:00
2012-10-03 16:54:54 -04:00
if ( is_admin_bar_showing () ) {
2010-11-17 12:21:45 -05:00
$classes [] = 'admin-bar' ;
2012-10-03 16:54:54 -04:00
$classes [] = 'no-customize-support' ;
}
2010-11-17 12:21:45 -05:00
2012-06-11 17:25:05 -04:00
if ( get_theme_mod ( 'background_color' ) || get_background_image () )
2011-10-05 13:20:43 -04:00
$classes [] = 'custom-background' ;
2010-02-27 15:06:35 -05:00
$page = $wp_query -> get ( 'page' );
2009-03-17 22:43:45 -04:00
2014-05-04 09:17:15 -04:00
if ( ! $page || $page < 2 )
2010-02-27 15:06:35 -05:00
$page = $wp_query -> get ( 'paged' );
2009-03-17 22:43:45 -04:00
2014-05-04 09:17:15 -04:00
if ( $page && $page > 1 && ! is_404 () ) {
2009-02-02 14:21:38 -05:00
$classes [] = 'paged-' . $page ;
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
if ( is_single () )
$classes [] = 'single-paged-' . $page ;
elseif ( is_page () )
$classes [] = 'page-paged-' . $page ;
elseif ( is_category () )
$classes [] = 'category-paged-' . $page ;
elseif ( is_tag () )
$classes [] = 'tag-paged-' . $page ;
elseif ( is_date () )
$classes [] = 'date-paged-' . $page ;
elseif ( is_author () )
$classes [] = 'author-paged-' . $page ;
elseif ( is_search () )
$classes [] = 'search-paged-' . $page ;
2010-10-15 15:44:57 -04:00
elseif ( is_post_type_archive () )
$classes [] = 'post-type-paged-' . $page ;
2009-02-02 14:21:38 -05:00
}
2009-03-17 22:43:45 -04:00
2011-06-07 04:55:25 -04:00
if ( ! empty ( $class ) ) {
2009-02-02 14:21:38 -05:00
if ( ! is_array ( $class ) )
2010-02-27 15:06:35 -05:00
$class = preg_split ( '#\s+#' , $class );
$classes = array_merge ( $classes , $class );
2011-06-07 04:55:25 -04:00
} else {
// Ensure that we always coerce class to being an array.
$class = array ();
2009-02-02 14:21:38 -05:00
}
2009-03-17 22:43:45 -04:00
2010-02-27 15:06:35 -05:00
$classes = array_map ( 'esc_attr' , $classes );
2009-08-18 12:05:07 -04:00
2014-03-23 23:37:16 -04:00
/**
* Filter the list of CSS body classes for the current post or page .
*
* @ since 2.8 . 0
*
* @ param array $classes An array of body classes .
* @ param string $class A comma - separated list of additional classes added to the body .
*/
2010-02-27 15:06:35 -05:00
return apply_filters ( 'body_class' , $classes , $class );
2009-02-02 14:21:38 -05:00
}
2008-09-03 15:54:14 -04:00
/**
2008-10-21 23:06:53 -04:00
* Whether post requires password and correct password has been provided .
2008-09-03 15:54:14 -04:00
*
2008-10-13 18:28:34 -04:00
* @ since 2.7 . 0
2008-09-03 15:54:14 -04:00
*
2013-05-20 07:05:50 -04:00
* @ param int | WP_Post $post An optional post . Global $post used if not provided .
2008-10-21 23:06:53 -04:00
* @ return bool false if a password is not required or the correct password cookie is present , true otherwise .
2008-09-03 15:54:14 -04:00
*/
function post_password_required ( $post = null ) {
$post = get_post ( $post );
2012-01-11 11:42:42 -05:00
if ( empty ( $post -> post_password ) )
2008-09-03 15:54:14 -04:00
return false ;
2012-01-11 11:42:42 -05:00
if ( ! isset ( $_COOKIE [ 'wp-postpass_' . COOKIEHASH ] ) )
2008-09-03 15:54:14 -04:00
return true ;
2013-06-20 23:00:26 -04:00
require_once ABSPATH . 'wp-includes/class-phpass.php' ;
$hasher = new PasswordHash ( 8 , true );
2012-01-11 11:42:42 -05:00
2013-03-03 16:11:40 -05:00
$hash = wp_unslash ( $_COOKIE [ 'wp-postpass_' . COOKIEHASH ] );
2013-06-20 23:00:26 -04:00
if ( 0 !== strpos ( $hash , '$P$B' ) )
return true ;
2008-09-03 15:54:14 -04:00
2013-06-20 23:00:26 -04:00
return ! $hasher -> CheckPassword ( $post -> post_password , $hash );
2008-09-03 15:54:14 -04:00
}
2014-02-25 12:14:14 -05:00
//
// Page Template Functions for usage in Themes
//
2008-10-16 15:13:30 -04:00
/**
2008-10-21 23:06:53 -04:00
* The formatted output of a list of pages .
2008-10-16 15:13:30 -04:00
*
2008-10-21 23:06:53 -04:00
* Displays page links for paginated posts ( i . e . includes the <!-- nextpage -->.
2008-11-10 12:45:38 -05:00
* Quicktag one or more times ) . This tag must be within The Loop .
2008-10-16 15:13:30 -04:00
*
* The defaults for overwriting are :
2008-10-21 23:06:53 -04:00
* 'before' - Default is '<p> Pages:' ( string ) . The html or text to prepend to
* each bookmarks .
2008-10-16 15:13:30 -04:00
* 'after' - Default is '</p>' ( string ) . The html or text to append to each
2008-10-21 23:06:53 -04:00
* bookmarks .
2008-10-16 15:13:30 -04:00
* 'link_before' - Default is '' ( string ) . The html or text to prepend to each
2010-05-16 02:11:43 -04:00
* Pages link inside the < a > tag . Also prepended to the current item , which
* is not linked .
2008-10-16 15:13:30 -04:00
* 'link_after' - Default is '' ( string ) . The html or text to append to each
2010-05-16 02:11:43 -04:00
* Pages link inside the < a > tag . Also appended to the current item , which
* is not linked .
2013-03-08 13:33:52 -05:00
* 'next_or_number' - Default is 'number' ( string ) . Indicates whether page
* numbers should be used . Valid values are number and next .
* 'separator' - Default is ' ' ( string ) . Text used between pagination links .
* 'nextpagelink' - Default is 'Next Page' ( string ) . Text for link to next page .
* of the bookmark .
* 'previouspagelink' - Default is 'Previous Page' ( string ) . Text for link to
* previous page , if available .
* 'pagelink' - Default is '%' ( String ) . Format string for page numbers . The % in
* the parameter string will be replaced with the page number , so Page %
* generates " Page 1 " , " Page 2 " , etc . Defaults to % , just the page number .
* 'echo' - Default is 1 ( integer ) . When not 0 , this triggers the HTML to be
* echoed and then returned .
2008-09-04 19:12:08 -04:00
*
* @ since 1.2 . 0
*
2008-10-16 15:13:30 -04:00
* @ param string | array $args Optional . Overwrite the defaults .
2008-10-21 23:06:53 -04:00
* @ return string Formatted output in HTML .
2008-09-04 19:12:08 -04:00
*/
2013-03-08 13:33:52 -05:00
function wp_link_pages ( $args = '' ) {
2007-05-10 23:10:05 -04:00
$defaults = array (
2013-03-08 13:33:52 -05:00
'before' => '<p>' . __ ( 'Pages:' ),
'after' => '</p>' ,
'link_before' => '' ,
'link_after' => '' ,
'next_or_number' => 'number' ,
'separator' => ' ' ,
'nextpagelink' => __ ( 'Next page' ),
'previouspagelink' => __ ( 'Previous page' ),
'pagelink' => '%' ,
'echo' => 1
2007-05-10 23:10:05 -04:00
);
2007-06-13 22:25:30 -04:00
2014-05-14 20:44:14 -04:00
$params = wp_parse_args ( $args , $defaults );
2014-03-23 23:37:16 -04:00
/**
* Filter the arguments used in retrieving page links for paginated posts .
*
* @ since 3.0 . 0
*
2014-05-14 20:44:14 -04:00
* @ param array $params An array of arguments for page links for paginated posts .
2014-03-23 23:37:16 -04:00
*/
2014-05-14 20:44:14 -04:00
$r = apply_filters ( 'wp_link_pages_args' , $params );
2007-05-10 23:10:05 -04:00
2013-08-02 00:42:08 -04:00
global $page , $numpages , $multipage , $more ;
2006-08-30 17:00:37 -04:00
$output = '' ;
2005-10-18 18:42:02 -04:00
if ( $multipage ) {
2014-05-14 20:44:14 -04:00
if ( 'number' == $r [ 'next_or_number' ] ) {
$output .= $r [ 'before' ];
2013-03-08 13:33:52 -05:00
for ( $i = 1 ; $i <= $numpages ; $i ++ ) {
2014-05-14 20:44:14 -04:00
$link = $r [ 'link_before' ] . str_replace ( '%' , $i , $r [ 'pagelink' ] ) . $r [ 'link_after' ];
if ( $i != $page || ! $more && 1 == $page ) {
2013-03-08 13:33:52 -05:00
$link = _wp_link_page ( $i ) . $link . '</a>' ;
2014-05-14 20:44:14 -04:00
}
2014-03-23 23:37:16 -04:00
/**
* Filter the HTML output of individual page number links .
*
* @ since 3.6 . 0
*
* @ param string $link The page number HTML output .
* @ param int $i Page number for paginated posts ' page links .
*/
2013-03-08 13:33:52 -05:00
$link = apply_filters ( 'wp_link_pages_link' , $link , $i );
2014-05-14 20:44:14 -04:00
$output .= $r [ 'separator' ] . $link ;
2005-10-18 18:42:02 -04:00
}
2014-05-14 20:44:14 -04:00
$output .= $r [ 'after' ];
2013-03-08 13:33:52 -05:00
} elseif ( $more ) {
2014-05-14 20:44:14 -04:00
$output .= $r [ 'before' ];
$prev = $page - 1 ;
if ( $prev ) {
$link = _wp_link_page ( $prev ) . $r [ 'link_before' ] . $r [ 'previouspagelink' ] . $r [ 'link_after' ] . '</a>' ;
2014-03-23 23:37:16 -04:00
/** This filter is documented in wp-includes/post-template.php */
2014-05-14 20:44:14 -04:00
$link = apply_filters ( 'wp_link_pages_link' , $link , $prev );
$output .= $r [ 'separator' ] . $link ;
2005-10-18 18:42:02 -04:00
}
2014-05-14 20:44:14 -04:00
$next = $page + 1 ;
if ( $next <= $numpages ) {
$link = _wp_link_page ( $next ) . $r [ 'link_before' ] . $r [ 'nextpagelink' ] . $r [ 'link_after' ] . '</a>' ;
2014-03-23 23:37:16 -04:00
/** This filter is documented in wp-includes/post-template.php */
2014-05-14 20:44:14 -04:00
$link = apply_filters ( 'wp_link_pages_link' , $link , $next );
$output .= $r [ 'separator' ] . $link ;
2013-03-08 13:33:52 -05:00
}
2014-05-14 20:44:14 -04:00
$output .= $r [ 'after' ];
2005-10-18 18:42:02 -04:00
}
}
2006-08-30 17:00:37 -04:00
2014-03-23 23:37:16 -04:00
/**
* Filter the HTML output of page links for paginated posts .
*
* @ since 3.6 . 0
*
2014-05-14 20:44:14 -04:00
* @ param string $html HTML output of paginated posts ' page links .
2014-03-23 23:37:16 -04:00
* @ param array $args An array of arguments .
*/
2014-05-14 20:44:14 -04:00
$html = apply_filters ( 'wp_link_pages' , $output , $args );
2013-03-08 13:33:52 -05:00
2014-05-14 20:44:14 -04:00
if ( $r [ 'echo' ] ) {
echo $html ;
}
return $html ;
2004-01-27 04:58:01 -05:00
}
2010-09-14 12:48:38 -04:00
/**
* Helper function for wp_link_pages () .
*
* @ since 3.1 . 0
* @ access private
*
2010-11-18 14:12:48 -05:00
* @ param int $i Page number .
2010-09-14 12:48:38 -04:00
* @ return string Link .
*/
2010-09-06 21:18:42 -04:00
function _wp_link_page ( $i ) {
2012-09-04 12:29:28 -04:00
global $wp_rewrite ;
$post = get_post ();
2010-09-06 21:18:42 -04:00
if ( 1 == $i ) {
2010-09-14 12:48:38 -04:00
$url = get_permalink ();
2010-09-06 21:18:42 -04:00
} else {
if ( '' == get_option ( 'permalink_structure' ) || in_array ( $post -> post_status , array ( 'draft' , 'pending' )) )
$url = add_query_arg ( 'page' , $i , get_permalink () );
elseif ( 'page' == get_option ( 'show_on_front' ) && get_option ( 'page_on_front' ) == $post -> ID )
$url = trailingslashit ( get_permalink ()) . user_trailingslashit ( " $wp_rewrite->pagination_base / " . $i , 'single_paged' );
else
2010-09-14 12:48:38 -04:00
$url = trailingslashit ( get_permalink ()) . user_trailingslashit ( $i , 'single_paged' );
2010-09-06 21:18:42 -04:00
}
2014-02-28 18:08:13 -05:00
if ( is_preview () ) {
$url = add_query_arg ( array (
'preview' => 'true'
), $url );
2014-02-28 18:29:14 -05:00
if ( ( 'draft' !== $post -> post_status ) && isset ( $_GET [ 'preview_id' ], $_GET [ 'preview_nonce' ] ) ) {
2014-02-28 18:08:13 -05:00
$url = add_query_arg ( array (
2014-02-28 18:29:14 -05:00
'preview_id' => wp_unslash ( $_GET [ 'preview_id' ] ),
'preview_nonce' => wp_unslash ( $_GET [ 'preview_nonce' ] )
2014-02-28 18:08:13 -05:00
), $url );
}
}
2010-11-22 18:54:30 -05:00
return '<a href="' . esc_url ( $url ) . '">' ;
2010-09-06 21:18:42 -04:00
}
2005-10-18 18:42:02 -04:00
2006-06-07 19:17:59 -04:00
//
// Post-meta: Custom per-post fields.
//
2004-02-26 16:42:47 -05:00
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Retrieve post custom meta data field .
2008-09-04 19:12:08 -04:00
*
* @ since 1.5 . 0
*
2008-10-13 18:28:34 -04:00
* @ param string $key Meta data key name .
2010-03-28 00:19:44 -04:00
* @ return bool | string | array Array of values or single value , if only one element exists . False will be returned if key does not exist .
2008-09-04 19:12:08 -04:00
*/
2005-02-02 17:52:47 -05:00
function post_custom ( $key = '' ) {
2006-01-25 02:38:43 -05:00
$custom = get_post_custom ();
2005-10-18 18:42:02 -04:00
2010-03-28 00:19:44 -04:00
if ( ! isset ( $custom [ $key ] ) )
return false ;
elseif ( 1 == count ( $custom [ $key ]) )
2006-01-25 02:38:43 -05:00
return $custom [ $key ][ 0 ];
2005-10-18 18:42:02 -04:00
else
2006-01-25 02:38:43 -05:00
return $custom [ $key ];
2005-02-02 17:52:47 -05:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Display list of post custom fields .
2008-09-04 19:12:08 -04:00
*
2008-10-13 18:28:34 -04:00
* @ internal This will probably change at some point ...
2008-09-04 19:12:08 -04:00
* @ since 1.2 . 0
2008-10-13 18:28:34 -04:00
* @ uses apply_filters () Calls 'the_meta_key' on list item HTML content , with key and value as separate parameters .
2008-09-04 19:12:08 -04:00
*/
2004-02-26 16:42:47 -05:00
function the_meta () {
2005-10-18 18:42:02 -04:00
if ( $keys = get_post_custom_keys () ) {
2004-03-29 13:46:33 -05:00
echo " <ul class='post-meta'> \n " ;
2008-08-06 16:31:54 -04:00
foreach ( ( array ) $keys as $key ) {
2006-02-20 12:13:06 -05:00
$keyt = trim ( $key );
2011-07-20 18:04:35 -04:00
if ( is_protected_meta ( $keyt , 'post' ) )
2006-02-20 12:13:06 -05:00
continue ;
2006-01-25 02:38:43 -05:00
$values = array_map ( 'trim' , get_post_custom_values ( $key ));
2004-02-26 17:22:54 -05:00
$value = implode ( $values , ', ' );
2014-03-23 23:37:16 -04:00
/**
* Filter the HTML output of the li element in the post custom fields list .
*
* @ since 2.2 . 0
*
* @ param string $html The HTML output for the li element .
* @ param string $key Meta key .
* @ param string $value Meta value .
*/
echo apply_filters ( 'the_meta_key' , " <li><span class='post-meta-key'> $key :</span> $value </li> \n " , $key , $value );
2004-02-26 16:42:47 -05:00
}
echo " </ul> \n " ;
}
}
2006-06-07 19:17:59 -04:00
//
// Pages
//
2004-12-30 14:41:14 -05:00
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Retrieve or display list of pages as a dropdown ( select list ) .
2008-09-04 19:12:08 -04:00
*
* @ since 2.1 . 0
*
2008-10-21 23:06:53 -04:00
* @ param array | string $args Optional . Override default arguments .
* @ return string HTML content , if not displaying .
2008-09-04 19:12:08 -04:00
*/
2014-05-14 21:12:13 -04:00
function wp_dropdown_pages ( $args = '' ) {
2007-05-10 23:10:05 -04:00
$defaults = array (
2007-09-03 19:32:58 -04:00
'depth' => 0 , 'child_of' => 0 ,
'selected' => 0 , 'echo' => 1 ,
2010-01-27 16:29:07 -05:00
'name' => 'page_id' , 'id' => '' ,
'show_option_none' => '' , 'show_option_no_change' => '' ,
2008-12-05 13:03:24 -05:00
'option_none_value' => ''
2007-05-10 23:10:05 -04:00
);
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
$r = wp_parse_args ( $args , $defaults );
2006-02-27 22:57:08 -05:00
2014-05-14 21:12:13 -04:00
$pages = get_pages ( $r );
2006-02-27 22:57:08 -05:00
$output = '' ;
2010-01-27 16:29:07 -05:00
// Back-compat with old system where both id and name were based on $name argument
2014-05-14 21:12:13 -04:00
if ( empty ( $r [ 'id' ] ) ) {
$r [ 'id' ] = $r [ 'name' ];
}
if ( ! empty ( $pages ) ) {
$output = " <select name=' " . esc_attr ( $r [ 'name' ] ) . " ' id=' " . esc_attr ( $r [ 'id' ] ) . " '> \n " ;
if ( $r [ 'show_option_no_change' ] ) {
$output .= " \t <option value= \" -1 \" > " . $r [ 'show_option_no_change' ] . " </option> \n " ;
}
if ( $r [ 'show_option_none' ] ) {
$output .= " \t <option value= \" " . esc_attr ( $r [ 'option_none_value' ] ) . '">' . $r [ 'show_option_none' ] . " </option> \n " ;
}
$output .= walk_page_dropdown_tree ( $pages , $r [ 'depth' ], $r );
2006-02-27 22:57:08 -05:00
$output .= " </select> \n " ;
}
2014-03-23 23:37:16 -04:00
/**
* Filter the HTML output of a list of pages as a drop down .
*
* @ since 2.1 . 0
*
2014-05-14 21:12:13 -04:00
* @ param string $html HTML output for drop down list of pages .
2014-03-23 23:37:16 -04:00
*/
2014-05-14 21:12:13 -04:00
$html = apply_filters ( 'wp_dropdown_pages' , $output );
2006-02-27 22:57:08 -05:00
2014-05-14 21:12:13 -04:00
if ( $r [ 'echo' ] ) {
echo $html ;
}
return $html ;
2006-02-27 22:57:08 -05:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Retrieve or display list of pages in list ( li ) format .
2008-09-04 19:12:08 -04:00
*
* @ since 1.5 . 0
*
2014-05-10 04:02:14 -04:00
* @ see get_pages ()
*
* @ param array | string $args {
* Array or string of arguments . Optional .
*
* @ type int $child_of Display only the sub - pages of a single page by ID . Default 0 ( all pages ) .
* @ type string $authors Comma - separated list of author IDs . Default empty ( all authors ) .
* @ type string $date_format PHP date format to use for the listed pages . Relies on the 'show_date' parameter .
* Default is the value of 'date_format' option .
* @ type int $depth Number of levels in the hierarchy of pages to include in the generated list .
* Accepts - 1 ( any depth ), 0 ( all pages ), 1 ( top - level pages only ), and n ( pages to
* the given n depth ) . Default 0.
* @ type bool $echo Whether or not to echo the list of pages . Default true .
* @ type string $exclude Comma - separated list of page IDs to exclude . Default empty .
* @ type array $include Comma - separated list of page IDs to include . Default empty .
* @ type string $link_after Text or HTML to follow the page link label . Default null .
* @ type string $link_before Text or HTML to precede the page link label . Default null .
* @ type string $post_type Post type to query for . Default 'page' .
* @ type string $post_status Comma - separated list of post statuses to include . Default 'publish' .
* @ type string $show_date Whether to display the page publish or modified date for each page . Accepts
* 'modified' or any other value . An empty value hides the date . Default empty .
* @ type string $sort_column Comma - separated list of column names to sort the pages by . Accepts 'post_author' ,
* 'post_date' , 'post_title' , 'post_name' , 'post_modified' , 'post_modified_gmt' ,
* 'menu_order' , 'post_parent' , 'ID' , 'rand' , or 'comment_count' . Default 'post_title' .
* @ type string $title_li List heading . Passing a null or empty value will result in no heading , and the list
* will not be wrapped with unordered list `<ul>` tags . Default 'Pages' .
* @ type Walker $walker Walker instance to use for listing pages . Default empty ( Walker_Page ) .
* }
* @ return string HTML list of pages .
2008-09-04 19:12:08 -04:00
*/
2014-05-10 04:02:14 -04:00
function wp_list_pages ( $args = '' ) {
2007-05-10 23:10:05 -04:00
$defaults = array (
2007-09-03 19:32:58 -04:00
'depth' => 0 , 'show_date' => '' ,
2014-05-14 21:22:15 -04:00
'date_format' => get_option ( 'date_format' ),
2007-09-03 19:32:58 -04:00
'child_of' => 0 , 'exclude' => '' ,
2014-05-14 21:22:15 -04:00
'title_li' => __ ( 'Pages' ), 'echo' => 1 ,
2008-11-03 01:07:39 -05:00
'authors' => '' , 'sort_column' => 'menu_order, post_title' ,
2009-11-05 17:01:53 -05:00
'link_before' => '' , 'link_after' => '' , 'walker' => '' ,
2007-05-10 23:10:05 -04:00
);
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
$r = wp_parse_args ( $args , $defaults );
2005-10-18 18:42:02 -04:00
2005-04-20 20:49:15 -04:00
$output = '' ;
2007-02-02 11:38:26 -05:00
$current_page = 0 ;
2004-12-30 14:41:14 -05:00
2006-12-03 04:23:17 -05:00
// sanitize, mostly to keep spaces out
2014-05-14 21:22:15 -04:00
$r [ 'exclude' ] = preg_replace ( '/[^0-9,]/' , '' , $r [ 'exclude' ] );
2006-12-03 04:23:17 -05:00
2009-12-06 13:01:01 -05:00
// Allow plugins to filter an array of excluded pages (but don't put a nullstring into the array)
2014-05-14 21:22:15 -04:00
$exclude_array = ( $r [ 'exclude' ] ) ? explode ( ',' , $r [ 'exclude' ] ) : array ();
2014-03-23 23:37:16 -04:00
/**
* Filter the array of pages to exclude from the pages list .
*
* @ since 2.1 . 0
*
* @ param array $exclude_array An array of page IDs to exclude .
*/
$r [ 'exclude' ] = implode ( ',' , apply_filters ( 'wp_list_pages_excludes' , $exclude_array ) );
2006-12-03 04:23:17 -05:00
2004-12-30 14:41:14 -05:00
// Query pages.
2007-12-17 01:53:59 -05:00
$r [ 'hierarchical' ] = 0 ;
2014-05-14 21:22:15 -04:00
$pages = get_pages ( $r );
2005-10-18 18:42:02 -04:00
2014-05-14 21:22:15 -04:00
if ( ! empty ( $pages ) ) {
if ( $r [ 'title_li' ] ) {
2005-10-18 18:42:02 -04:00
$output .= '<li class="pagenav">' . $r [ 'title_li' ] . '<ul>' ;
2014-05-14 21:22:15 -04:00
}
2006-02-27 22:57:08 -05:00
global $wp_query ;
2014-03-26 18:47:14 -04:00
if ( is_page () || is_attachment () || $wp_query -> is_posts_page ) {
$current_page = get_queried_object_id ();
} elseif ( is_singular () ) {
$queried_object = get_queried_object ();
if ( is_post_type_hierarchical ( $queried_object -> post_type ) ) {
$current_page = $queried_object -> ID ;
}
}
2014-05-14 21:22:15 -04:00
$output .= walk_page_tree ( $pages , $r [ 'depth' ], $current_page , $r );
2004-12-30 14:41:14 -05:00
2014-05-14 21:22:15 -04:00
if ( $r [ 'title_li' ] ) {
2005-10-18 18:42:02 -04:00
$output .= '</ul></li>' ;
2014-05-14 21:22:15 -04:00
}
2004-12-16 03:02:53 -05:00
}
2005-10-18 18:42:02 -04:00
2014-03-23 23:37:16 -04:00
/**
* Filter the HTML output of the pages to list .
*
* @ since 1.5 . 1
*
* @ see wp_list_pages ()
*
2014-05-14 21:22:15 -04:00
* @ param string $html HTML output of the pages list .
2014-03-23 23:37:16 -04:00
* @ param array $r An array of page - listing arguments .
*/
2014-05-14 21:22:15 -04:00
$html = apply_filters ( 'wp_list_pages' , $output , $r );
2005-10-18 18:42:02 -04:00
2014-05-14 21:22:15 -04:00
if ( $r [ 'echo' ] ) {
echo $html ;
} else {
return $html ;
}
2004-12-16 03:02:53 -05:00
}
2008-09-08 14:56:54 -04:00
/**
2008-11-22 05:39:58 -05:00
* Display or retrieve list of pages with optional home link .
*
* The arguments are listed below and part of the arguments are for { @ link
* wp_list_pages ()} function . Check that function for more info on those
* arguments .
*
* < ul >
* < li >< strong > sort_column </ strong > - How to sort the list of pages . Defaults
2013-08-15 12:25:12 -04:00
* to 'menu_order, post_title' . Use column for posts table .</ li >
2008-11-22 05:39:58 -05:00
* < li >< strong > menu_class </ strong > - Class to use for the div ID which contains
* the page list . Defaults to 'menu' .</ li >
* < li >< strong > echo </ strong > - Whether to echo list or return it . Defaults to
* echo .</ li >
* < li >< strong > link_before </ strong > - Text before show_home argument text .</ li >
* < li >< strong > link_after </ strong > - Text after show_home argument text .</ li >
* < li >< strong > show_home </ strong > - If you set this argument , then it will
* display the link to the home page . The show_home argument really just needs
* to be set to the value of the text of the link .</ li >
* </ ul >
2008-09-08 14:56:54 -04:00
*
* @ since 2.7 . 0
*
* @ param array | string $args
2012-09-10 16:04:33 -04:00
* @ return string html menu
2008-09-08 14:56:54 -04:00
*/
function wp_page_menu ( $args = array () ) {
2009-06-26 01:24:02 -04:00
$defaults = array ( 'sort_column' => 'menu_order, post_title' , 'menu_class' => 'menu' , 'echo' => true , 'link_before' => '' , 'link_after' => '' );
2008-09-08 14:56:54 -04:00
$args = wp_parse_args ( $args , $defaults );
2014-03-23 23:37:16 -04:00
/**
* Filter the arguments used to generate a page - based menu .
*
* @ since 2.7 . 0
*
* @ see wp_page_menu ()
*
* @ param array $args An array of page menu arguments .
*/
2008-09-08 14:56:54 -04:00
$args = apply_filters ( 'wp_page_menu_args' , $args );
$menu = '' ;
2008-12-07 07:14:14 -05:00
$list_args = $args ;
2008-09-08 14:56:54 -04:00
// Show Home in the menu
2010-03-19 17:29:21 -04:00
if ( ! empty ( $args [ 'show_home' ]) ) {
2008-09-08 14:56:54 -04:00
if ( true === $args [ 'show_home' ] || '1' === $args [ 'show_home' ] || 1 === $args [ 'show_home' ] )
$text = __ ( 'Home' );
else
$text = $args [ 'show_home' ];
$class = '' ;
2008-12-07 07:14:14 -05:00
if ( is_front_page () && ! is_paged () )
2008-09-08 14:56:54 -04:00
$class = 'class="current_page_item"' ;
2013-09-23 10:51:10 -04:00
$menu .= '<li ' . $class . '><a href="' . home_url ( '/' ) . '">' . $args [ 'link_before' ] . $text . $args [ 'link_after' ] . '</a></li>' ;
2008-12-07 07:14:14 -05:00
// If the front page is a page, add it to the exclude list
if ( get_option ( 'show_on_front' ) == 'page' ) {
if ( ! empty ( $list_args [ 'exclude' ] ) ) {
$list_args [ 'exclude' ] .= ',' ;
} else {
$list_args [ 'exclude' ] = '' ;
}
2008-12-07 17:13:00 -05:00
$list_args [ 'exclude' ] .= get_option ( 'page_on_front' );
2008-12-07 07:14:14 -05:00
}
2008-09-08 14:56:54 -04:00
}
2008-10-18 17:15:20 -04:00
$list_args [ 'echo' ] = false ;
$list_args [ 'title_li' ] = '' ;
$menu .= str_replace ( array ( " \r " , " \n " , " \t " ), '' , wp_list_pages ( $list_args ) );
2008-09-08 14:56:54 -04:00
if ( $menu )
$menu = '<ul>' . $menu . '</ul>' ;
2009-08-18 12:05:07 -04:00
$menu = '<div class="' . esc_attr ( $args [ 'menu_class' ]) . '">' . $menu . " </div> \n " ;
2014-03-23 23:37:16 -04:00
/**
* Filter the HTML output of a page - based menu .
*
* @ since 2.7 . 0
*
* @ see wp_page_menu ()
*
* @ param string $menu The HTML output .
* @ param array $args An array of arguments .
*/
2008-12-09 13:03:31 -05:00
$menu = apply_filters ( 'wp_page_menu' , $menu , $args );
2008-10-18 17:06:28 -04:00
if ( $args [ 'echo' ] )
echo $menu ;
else
return $menu ;
2008-09-08 14:56:54 -04:00
}
2006-06-07 19:17:59 -04:00
//
// Page helpers
//
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Retrieve HTML list content for page list .
2008-09-04 19:12:08 -04:00
*
2008-10-13 18:28:34 -04:00
* @ uses Walker_Page to create HTML list content .
2008-09-04 19:12:08 -04:00
* @ since 2.1 . 0
2008-10-13 18:28:34 -04:00
* @ see Walker_Page :: walk () for parameters and return description .
2008-09-04 19:12:08 -04:00
*/
2008-11-21 12:17:18 -05:00
function walk_page_tree ( $pages , $depth , $current_page , $r ) {
2009-03-17 22:43:45 -04:00
if ( empty ( $r [ 'walker' ]) )
2008-12-19 15:27:11 -05:00
$walker = new Walker_Page ;
else
$walker = $r [ 'walker' ];
2013-09-24 12:01:09 -04:00
foreach ( ( array ) $pages as $page ) {
if ( $page -> post_parent )
$r [ 'pages_with_children' ][ $page -> post_parent ] = true ;
}
2008-11-21 12:17:18 -05:00
$args = array ( $pages , $depth , $r , $current_page );
2012-10-04 16:00:16 -04:00
return call_user_func_array ( array ( $walker , 'walk' ), $args );
2006-06-07 19:17:59 -04:00
}
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Retrieve HTML dropdown ( select ) content for page list .
2008-09-04 19:12:08 -04:00
*
2008-10-13 18:28:34 -04:00
* @ uses Walker_PageDropdown to create HTML dropdown content .
2008-09-04 19:12:08 -04:00
* @ since 2.1 . 0
2008-10-13 18:28:34 -04:00
* @ see Walker_PageDropdown :: walk () for parameters and return description .
2008-09-04 19:12:08 -04:00
*/
2006-06-07 19:17:59 -04:00
function walk_page_dropdown_tree () {
$args = func_get_args ();
2008-12-19 15:27:11 -05:00
if ( empty ( $args [ 2 ][ 'walker' ]) ) // the user's options are the third parameter
$walker = new Walker_PageDropdown ;
else
$walker = $args [ 2 ][ 'walker' ];
2012-10-04 16:00:16 -04:00
return call_user_func_array ( array ( $walker , 'walk' ), $args );
2006-06-07 19:17:59 -04:00
}
2010-10-30 10:06:08 -04:00
/**
* Create HTML list of pages .
*
* @ since 2.1 . 0
* @ uses Walker
*/
class Walker_Page extends Walker {
/**
* @ see Walker :: $tree_type
* @ since 2.1 . 0
* @ var string
*/
var $tree_type = 'page' ;
/**
* @ see Walker :: $db_fields
* @ since 2.1 . 0
* @ todo Decouple this .
* @ var array
*/
var $db_fields = array ( 'parent' => 'post_parent' , 'id' => 'ID' );
/**
* @ see Walker :: start_lvl ()
* @ since 2.1 . 0
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param int $depth Depth of page . Used for padding .
2012-09-10 16:04:33 -04:00
* @ param array $args
2010-10-30 10:06:08 -04:00
*/
2012-01-04 18:03:46 -05:00
function start_lvl ( & $output , $depth = 0 , $args = array () ) {
2010-10-30 10:06:08 -04:00
$indent = str_repeat ( " \t " , $depth );
$output .= " \n $indent <ul class='children'> \n " ;
}
/**
* @ see Walker :: end_lvl ()
* @ since 2.1 . 0
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param int $depth Depth of page . Used for padding .
2012-09-10 16:04:33 -04:00
* @ param array $args
2010-10-30 10:06:08 -04:00
*/
2012-01-04 18:03:46 -05:00
function end_lvl ( & $output , $depth = 0 , $args = array () ) {
2010-10-30 10:06:08 -04:00
$indent = str_repeat ( " \t " , $depth );
$output .= " $indent </ul> \n " ;
}
/**
* @ see Walker :: start_el ()
* @ since 2.1 . 0
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param object $page Page data object .
* @ param int $depth Depth of page . Used for padding .
* @ param int $current_page Page ID .
* @ param array $args
*/
2013-05-27 23:29:15 -04:00
function start_el ( & $output , $page , $depth = 0 , $args = array (), $current_page = 0 ) {
2010-10-30 10:06:08 -04:00
if ( $depth )
$indent = str_repeat ( " \t " , $depth );
else
$indent = '' ;
extract ( $args , EXTR_SKIP );
$css_class = array ( 'page_item' , 'page-item-' . $page -> ID );
2013-09-24 12:01:09 -04:00
if ( isset ( $args [ 'pages_with_children' ][ $page -> ID ] ) )
$css_class [] = 'page_item_has_children' ;
2010-10-30 10:06:08 -04:00
if ( ! empty ( $current_page ) ) {
2012-08-23 16:01:10 -04:00
$_current_page = get_post ( $current_page );
2012-08-20 15:47:52 -04:00
if ( in_array ( $page -> ID , $_current_page -> ancestors ) )
2010-10-30 10:06:08 -04:00
$css_class [] = 'current_page_ancestor' ;
if ( $page -> ID == $current_page )
$css_class [] = 'current_page_item' ;
elseif ( $_current_page && $page -> ID == $_current_page -> post_parent )
$css_class [] = 'current_page_parent' ;
} elseif ( $page -> ID == get_option ( 'page_for_posts' ) ) {
$css_class [] = 'current_page_parent' ;
}
2014-03-23 23:37:16 -04:00
/**
* Filter the list of CSS classes to include with each page item in the list .
*
* @ since 2.8 . 0
*
* @ see wp_list_pages ()
*
* @ param array $css_class An array of CSS classes to be applied
* to each list item .
* @ param WP_Post $page Page data object .
* @ param int $depth Depth of page , used for padding .
* @ param array $args An array of arguments .
* @ param int $current_page ID of the current page .
*/
2011-11-10 13:35:25 -05:00
$css_class = implode ( ' ' , apply_filters ( 'page_css_class' , $css_class , $page , $depth , $args , $current_page ) );
2010-10-30 10:06:08 -04:00
2013-07-05 11:41:46 -04:00
if ( '' === $page -> post_title )
$page -> post_title = sprintf ( __ ( '#%d (no title)' ), $page -> ID );
2013-10-24 18:59:20 -04:00
/** This filter is documented in wp-includes/post-template.php */
2011-09-21 16:04:14 -04:00
$output .= $indent . '<li class="' . $css_class . '"><a href="' . get_permalink ( $page -> ID ) . '">' . $link_before . apply_filters ( 'the_title' , $page -> post_title , $page -> ID ) . $link_after . '</a>' ;
2010-10-30 10:06:08 -04:00
if ( ! empty ( $show_date ) ) {
if ( 'modified' == $show_date )
$time = $page -> post_modified ;
else
$time = $page -> post_date ;
$output .= " " . mysql2date ( $date_format , $time );
}
}
/**
* @ see Walker :: end_el ()
* @ since 2.1 . 0
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param object $page Page data object . Not used .
* @ param int $depth Depth of page . Not Used .
2012-09-10 16:04:33 -04:00
* @ param array $args
2010-10-30 10:06:08 -04:00
*/
2012-01-04 18:03:46 -05:00
function end_el ( & $output , $page , $depth = 0 , $args = array () ) {
2010-10-30 10:06:08 -04:00
$output .= " </li> \n " ;
}
}
/**
* Create HTML dropdown list of pages .
*
* @ since 2.1 . 0
* @ uses Walker
*/
class Walker_PageDropdown extends Walker {
/**
* @ see Walker :: $tree_type
* @ since 2.1 . 0
* @ var string
*/
var $tree_type = 'page' ;
/**
* @ see Walker :: $db_fields
* @ since 2.1 . 0
* @ todo Decouple this
* @ var array
*/
var $db_fields = array ( 'parent' => 'post_parent' , 'id' => 'ID' );
/**
* @ see Walker :: start_el ()
* @ since 2.1 . 0
*
* @ param string $output Passed by reference . Used to append additional content .
* @ param object $page Page data object .
* @ param int $depth Depth of page in reference to parent pages . Used for padding .
* @ param array $args Uses 'selected' argument for selected page to set selected HTML attribute for option element .
2012-09-10 16:04:33 -04:00
* @ param int $id
2010-10-30 10:06:08 -04:00
*/
2013-05-27 23:29:15 -04:00
function start_el ( & $output , $page , $depth = 0 , $args = array (), $id = 0 ) {
2010-10-30 10:06:08 -04:00
$pad = str_repeat ( ' ' , $depth * 3 );
$output .= " \t <option class= \" level- $depth\ " value = \ " $page->ID\ " " ;
if ( $page -> ID == $args [ 'selected' ] )
$output .= ' selected="selected"' ;
$output .= '>' ;
2014-03-02 17:34:13 -05:00
$title = $page -> post_title ;
if ( '' === $title ) {
$title = sprintf ( __ ( '#%d (no title)' ), $page -> ID );
}
2014-03-23 23:37:16 -04:00
/**
* Filter the page title when creating an HTML drop - down list of pages .
*
* @ since 3.1 . 0
*
* @ param string $title Page title .
* @ param object $page Page data object .
*/
2014-03-02 17:34:13 -05:00
$title = apply_filters ( 'list_pages' , $title , $page );
2011-04-22 14:24:57 -04:00
$output .= $pad . esc_html ( $title );
2010-10-30 10:06:08 -04:00
$output .= " </option> \n " ;
}
}
2006-06-07 19:17:59 -04:00
//
// Attachments
//
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Display an attachment page link using an image or icon .
2008-09-04 19:12:08 -04:00
*
* @ since 2.0 . 0
*
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2008-10-21 23:06:53 -04:00
* @ param bool $fullsize Optional , default is false . Whether to use full size .
* @ param bool $deprecated Deprecated . Not used .
* @ param bool $permalink Optional , default is false . Whether to include permalink .
2008-09-04 19:12:08 -04:00
*/
2009-12-30 11:23:39 -05:00
function the_attachment_link ( $id = 0 , $fullsize = false , $deprecated = false , $permalink = false ) {
if ( ! empty ( $deprecated ) )
2010-01-09 05:03:55 -05:00
_deprecated_argument ( __FUNCTION__ , '2.5' );
2009-12-30 11:23:39 -05:00
2008-03-03 23:21:37 -05:00
if ( $fullsize )
echo wp_get_attachment_link ( $id , 'full' , $permalink );
else
echo wp_get_attachment_link ( $id , 'thumbnail' , $permalink );
}
2008-10-13 18:28:34 -04:00
/**
* Retrieve an attachment page link using an image or icon , if possible .
*
2008-10-21 23:06:53 -04:00
* @ since 2.5 . 0
* @ uses apply_filters () Calls 'wp_get_attachment_link' filter on HTML content with same parameters as function .
2008-10-13 18:28:34 -04:00
*
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2009-02-04 10:12:24 -05:00
* @ param string $size Optional , default is 'thumbnail' . Size of image , either array or string .
2008-10-21 23:06:53 -04:00
* @ param bool $permalink Optional , default is false . Whether to add permalink to image .
* @ param bool $icon Optional , default is false . Whether to include icon .
2012-09-10 16:04:33 -04:00
* @ param string | bool $text Optional , default is false . If string , then will be link text .
2008-10-21 23:06:53 -04:00
* @ return string HTML content .
2008-10-13 18:28:34 -04:00
*/
2011-11-08 09:08:25 -05:00
function wp_get_attachment_link ( $id = 0 , $size = 'thumbnail' , $permalink = false , $icon = false , $text = false ) {
$id = intval ( $id );
2012-08-23 16:01:10 -04:00
$_post = get_post ( $id );
2008-03-03 23:21:37 -05:00
2011-11-08 09:08:25 -05:00
if ( empty ( $_post ) || ( 'attachment' != $_post -> post_type ) || ! $url = wp_get_attachment_url ( $_post -> ID ) )
return __ ( 'Missing Attachment' );
2008-03-03 23:21:37 -05:00
if ( $permalink )
2011-11-08 09:08:25 -05:00
$url = get_attachment_link ( $_post -> ID );
2008-03-03 23:21:37 -05:00
2011-11-08 09:08:25 -05:00
if ( $text )
2012-04-30 17:22:58 -04:00
$link_text = $text ;
2011-11-08 09:22:42 -05:00
elseif ( $size && 'none' != $size )
2011-11-08 09:08:25 -05:00
$link_text = wp_get_attachment_image ( $id , $size , $icon );
else
2010-02-13 06:12:47 -05:00
$link_text = '' ;
2009-02-06 21:58:21 -05:00
2011-11-08 09:08:25 -05:00
if ( trim ( $link_text ) == '' )
2009-02-06 21:58:21 -05:00
$link_text = $_post -> post_title ;
2009-03-17 22:43:45 -04:00
2014-03-23 23:37:16 -04:00
/**
* Filter a retrieved attachment page link .
*
* @ since 2.7 . 0
*
* @ param string $link_html The page link HTML output .
* @ param int $id Post ID .
* @ param string $size Image size . Default 'thumbnail' .
* @ param bool $permalink Whether to add permalink to image . Default false .
* @ param bool $icon Whether to include an icon . Default false .
* @ param string | bool $text If string , will be link text . Default false .
*/
2013-09-23 10:51:10 -04:00
return apply_filters ( 'wp_get_attachment_link' , " <a href=' $url '> $link_text </a> " , $id , $size , $permalink , $icon , $text );
2005-12-13 14:19:56 -05:00
}
2005-10-20 16:48:32 -04:00
2008-09-04 19:12:08 -04:00
/**
2008-10-21 23:06:53 -04:00
* Wrap attachment in << p >> element before content .
2008-09-04 19:12:08 -04:00
*
* @ since 2.0 . 0
*
2008-10-21 23:06:53 -04:00
* @ param string $content
* @ return string
2008-09-04 19:12:08 -04:00
*/
2005-12-13 14:19:56 -05:00
function prepend_attachment ( $content ) {
2012-09-04 12:29:28 -04:00
$post = get_post ();
2008-03-23 13:02:11 -04:00
if ( empty ( $post -> post_type ) || $post -> post_type != 'attachment' )
2008-03-23 14:19:03 -04:00
return $content ;
2008-03-23 13:02:11 -04:00
2014-04-02 13:14:15 -04:00
if ( 0 === strpos ( $post -> post_mime_type , 'video' ) ) {
2014-03-19 15:00:14 -04:00
$meta = wp_get_attachment_metadata ( get_the_ID () );
$atts = array ( 'src' => wp_get_attachment_url () );
if ( ! empty ( $meta [ 'width' ] ) && ! empty ( $meta [ 'height' ] ) ) {
$atts [ 'width' ] = ( int ) $meta [ 'width' ];
$atts [ 'height' ] = ( int ) $meta [ 'height' ];
}
$p = wp_video_shortcode ( $atts );
2014-03-24 10:39:14 -04:00
} elseif ( 0 === strpos ( $post -> post_mime_type , 'audio' ) ) {
2014-03-19 15:00:14 -04:00
$p = wp_audio_shortcode ( array ( 'src' => wp_get_attachment_url () ) );
2014-04-02 13:14:15 -04:00
} else {
$p = '<p class="attachment">' ;
// show the medium sized image representation of the attachment if available, and link to the raw file
$p .= wp_get_attachment_link ( 0 , 'medium' , false );
$p .= '</p>' ;
2014-03-24 10:39:14 -04:00
}
2014-03-19 15:00:14 -04:00
2014-03-23 23:37:16 -04:00
/**
* Filter the attachment markup to be prepended to the post content .
*
* @ since 2.0 . 0
*
* @ see prepend_attachment ()
*
* @ param string $p The attachment HTML output .
*/
$p = apply_filters ( 'prepend_attachment' , $p );
2005-10-20 16:48:32 -04:00
return " $p\n $content " ;
}
2005-12-13 14:19:56 -05:00
2006-06-07 19:17:59 -04:00
//
// Misc
//
2008-09-04 19:12:08 -04:00
/**
2008-10-13 18:28:34 -04:00
* Retrieve protected post password form content .
2008-09-04 19:12:08 -04:00
*
* @ since 1.0 . 0
2008-10-13 18:28:34 -04:00
* @ uses apply_filters () Calls 'the_password_form' filter on output .
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $post Optional . A post ID or post object .
2008-10-13 18:28:34 -04:00
* @ return string HTML content for password form for password protected post .
2008-09-04 19:12:08 -04:00
*/
2013-05-20 07:05:50 -04:00
function get_the_password_form ( $post = 0 ) {
$post = get_post ( $post );
2013-08-07 09:44:32 -04:00
$label = 'pwbox-' . ( empty ( $post -> ID ) ? rand () : $post -> ID );
2013-08-07 09:43:50 -04:00
$output = '<form action="' . esc_url ( site_url ( 'wp-login.php?action=postpass' , 'login_post' ) ) . ' " class= " post - password - form " method= " post " >
2013-09-23 16:29:09 -04:00
< p > ' . __( ' This content is password protected . To view it please enter your password below : ' ) . ' </ p >
2014-02-08 08:23:13 -05:00
< p >< label for = " ' . $label . ' " > ' . __( ' Password : ' ) . ' < input name = " post_password " id = " ' . $label . ' " type = " password " size = " 20 " /></ label > < input type = " submit " name = " Submit " value = " ' . esc_attr__( 'Submit' ) . ' " /></ p ></ form >
2006-06-07 19:17:59 -04:00
' ;
2014-03-23 23:37:16 -04:00
/**
* Filter the HTML output for the protected post password form .
*
* If modifying the password field , please note that the core database schema
* limits the password field to 20 characters regardless of the value of the
* size attribute in the form input .
*
* @ since 2.7 . 0
*
* @ param string $output The password form HTML output .
*/
2013-08-07 09:43:50 -04:00
return apply_filters ( 'the_password_form' , $output );
2006-06-07 19:17:59 -04:00
}
2007-10-12 16:01:16 -04:00
/**
2008-10-13 18:28:34 -04:00
* Whether currently in a page template .
2007-10-12 16:01:16 -04:00
*
2010-02-24 15:13:23 -05:00
* This template tag allows you to determine if you are in a page template .
2010-02-26 00:46:08 -05:00
* You can optionally provide a template name and then the check will be
2008-10-13 18:28:34 -04:00
* specific to that template .
2007-10-12 16:01:16 -04:00
*
2008-09-04 19:12:08 -04:00
* @ since 2.5 . 0
* @ uses $wp_query
*
2008-10-13 18:28:34 -04:00
* @ param string $template The specific template name if specific matching is required .
2013-06-21 08:45:11 -04:00
* @ return bool True on success , false on failure .
2007-10-12 16:01:16 -04:00
*/
2012-03-02 13:56:54 -05:00
function is_page_template ( $template = '' ) {
if ( ! is_page () )
2007-10-12 16:01:16 -04:00
return false ;
2012-03-02 13:56:54 -05:00
$page_template = get_page_template_slug ( get_queried_object_id () );
2007-10-12 16:01:16 -04:00
2012-03-02 13:56:54 -05:00
if ( empty ( $template ) )
return ( bool ) $page_template ;
2007-10-12 16:01:16 -04:00
2012-03-02 13:56:54 -05:00
if ( $template == $page_template )
return true ;
if ( 'default' == $template && ! $page_template )
2007-10-12 16:01:16 -04:00
return true ;
return false ;
}
2012-03-02 13:56:54 -05:00
/**
* Get the specific template name for a page .
*
* @ since 3.4 . 0
*
2013-05-07 14:44:22 -04:00
* @ param int $post_id Optional . The page ID to check . Defaults to the current post , when used in the loop .
2012-03-02 13:56:54 -05:00
* @ return string | bool Page template filename . Returns an empty string when the default page template
* is in use . Returns false if the post is not a page .
*/
function get_page_template_slug ( $post_id = null ) {
$post = get_post ( $post_id );
2013-05-07 14:44:22 -04:00
if ( ! $post || 'page' != $post -> post_type )
2012-03-02 13:56:54 -05:00
return false ;
$template = get_post_meta ( $post -> ID , '_wp_page_template' , true );
if ( ! $template || 'default' == $template )
return '' ;
return $template ;
}
2008-04-18 19:38:21 -04:00
/**
2008-10-13 18:28:34 -04:00
* Retrieve formatted date timestamp of a revision ( linked to that revisions ' s page ) .
2008-04-18 19:38:21 -04:00
*
2008-10-13 18:28:34 -04:00
* @ since 2.6 . 0
2008-04-18 19:38:21 -04:00
*
* @ uses date_i18n ()
*
2008-10-13 18:28:34 -04:00
* @ param int | object $revision Revision ID or revision object .
* @ param bool $link Optional , default is true . Link to revisions ' s page ?
* @ return string i18n formatted datetimestamp or localized 'Current Revision' .
2008-04-18 19:38:21 -04:00
*/
2008-05-08 13:25:07 -04:00
function wp_post_revision_title ( $revision , $link = true ) {
if ( ! $revision = get_post ( $revision ) )
2008-04-18 19:38:21 -04:00
return $revision ;
2008-05-08 13:25:07 -04:00
if ( ! in_array ( $revision -> post_type , array ( 'post' , 'page' , 'revision' ) ) )
return false ;
2013-03-21 11:54:11 -04:00
/* translators: revision date format, see http://php.net/date */
$datef = _x ( 'j F, Y @ G:i' , 'revision date format' );
/* translators: 1: date */
2013-05-02 06:12:19 -04:00
$autosavef = _x ( '%1$s [Autosave]' , 'post revision title extra' );
2013-03-21 11:54:11 -04:00
/* translators: 1: date */
2013-05-02 06:12:19 -04:00
$currentf = _x ( '%1$s [Current Revision]' , 'post revision title extra' );
2013-03-21 11:54:11 -04:00
$date = date_i18n ( $datef , strtotime ( $revision -> post_modified ) );
if ( $link && current_user_can ( 'edit_post' , $revision -> ID ) && $link = get_edit_post_link ( $revision -> ID ) )
$date = " <a href=' $link '> $date </a> " ;
if ( ! wp_is_post_revision ( $revision ) )
$date = sprintf ( $currentf , $date );
elseif ( wp_is_post_autosave ( $revision ) )
$date = sprintf ( $autosavef , $date );
return $date ;
}
/**
* Retrieve formatted date timestamp of a revision ( linked to that revisions ' s page ) .
*
* @ since 3.6 . 0
*
* @ uses date_i18n ()
*
* @ param int | object $revision Revision ID or revision object .
* @ param bool $link Optional , default is true . Link to revisions ' s page ?
* @ return string gravatar , user , i18n formatted datetimestamp or localized 'Current Revision' .
*/
function wp_post_revision_title_expanded ( $revision , $link = true ) {
if ( ! $revision = get_post ( $revision ) )
return $revision ;
if ( ! in_array ( $revision -> post_type , array ( 'post' , 'page' , 'revision' ) ) )
return false ;
2013-02-28 10:14:34 -05:00
$author = get_the_author_meta ( 'display_name' , $revision -> post_author );
2009-03-12 23:53:39 -04:00
/* translators: revision date format, see http://php.net/date */
2013-02-28 10:14:34 -05:00
$datef = _x ( 'j F, Y @ G:i:s' , 'revision date format' );
2013-03-21 11:54:11 -04:00
$gravatar = get_avatar ( $revision -> post_author , 24 );
2008-05-08 13:25:07 -04:00
2010-01-05 10:50:30 -05:00
$date = date_i18n ( $datef , strtotime ( $revision -> post_modified ) );
2008-05-08 13:25:07 -04:00
if ( $link && current_user_can ( 'edit_post' , $revision -> ID ) && $link = get_edit_post_link ( $revision -> ID ) )
$date = " <a href=' $link '> $date </a> " ;
2013-03-16 01:57:54 -04:00
2013-02-28 10:14:34 -05:00
$revision_date_author = sprintf (
2013-03-18 13:58:30 -04:00
/* translators: post revision title: 1: author avatar, 2: author name, 3: time ago, 4: date */
_x ( '%1$s %2$s, %3$s ago (%4$s)' , 'post revision title' ),
2013-02-28 10:14:34 -05:00
$gravatar ,
$author ,
human_time_diff ( strtotime ( $revision -> post_modified ), current_time ( 'timestamp' ) ),
$date
);
$autosavef = __ ( '%1$s [Autosave]' );
$currentf = __ ( '%1$s [Current Revision]' );
2008-05-08 13:25:07 -04:00
2008-05-29 18:21:36 -04:00
if ( ! wp_is_post_revision ( $revision ) )
2013-02-28 10:14:34 -05:00
$revision_date_author = sprintf ( $currentf , $revision_date_author );
2008-05-29 18:21:36 -04:00
elseif ( wp_is_post_autosave ( $revision ) )
2013-02-28 10:14:34 -05:00
$revision_date_author = sprintf ( $autosavef , $revision_date_author );
2008-05-08 13:25:07 -04:00
2013-02-28 10:14:34 -05:00
return $revision_date_author ;
2008-04-18 19:38:21 -04:00
}
/**
2008-10-13 18:28:34 -04:00
* Display list of a post ' s revisions .
2008-04-18 19:38:21 -04:00
*
2008-10-13 18:28:34 -04:00
* Can output either a UL with edit links or a TABLE with diff interface , and
* restore action links .
2008-04-18 19:38:21 -04:00
*
2008-10-13 18:28:34 -04:00
* @ since 2.6 . 0
2008-04-18 19:38:21 -04:00
*
* @ uses wp_get_post_revisions ()
2013-04-30 23:11:44 -04:00
* @ uses wp_post_revision_title_expanded ()
2008-04-18 19:38:21 -04:00
* @ uses get_edit_post_link ()
2009-05-16 18:32:48 -04:00
* @ uses get_the_author_meta ()
2008-04-18 19:38:21 -04:00
*
2014-03-08 14:32:16 -05:00
* @ param int | WP_Post $post_id Optional . Post ID or post object .
2013-05-04 08:54:00 -04:00
* @ param string $type 'all' ( default ), 'revision' or 'autosave'
2008-10-13 18:28:34 -04:00
* @ return null
2008-04-18 19:38:21 -04:00
*/
2013-05-04 08:54:00 -04:00
function wp_list_post_revisions ( $post_id = 0 , $type = 'all' ) {
if ( ! $post = get_post ( $post_id ) )
2008-04-18 19:38:21 -04:00
return ;
2013-05-04 08:54:00 -04:00
// $args array with (parent, format, right, left, type) deprecated since 3.6
if ( is_array ( $type ) ) {
$type = ! empty ( $type [ 'type' ] ) ? $type [ 'type' ] : $type ;
_deprecated_argument ( __FUNCTION__ , '3.6' );
}
2008-04-18 19:38:21 -04:00
2013-05-04 08:54:00 -04:00
if ( ! $revisions = wp_get_post_revisions ( $post -> ID ) )
2013-03-27 20:56:44 -04:00
return ;
2008-05-29 18:21:36 -04:00
2013-04-30 23:11:44 -04:00
$rows = '' ;
2008-04-18 19:38:21 -04:00
foreach ( $revisions as $revision ) {
2013-05-04 08:54:00 -04:00
if ( ! current_user_can ( 'read_post' , $revision -> ID ) )
2008-05-09 11:59:17 -04:00
continue ;
2013-03-29 16:50:09 -04:00
2013-03-27 20:56:44 -04:00
$is_autosave = wp_is_post_autosave ( $revision );
if ( ( 'revision' === $type && $is_autosave ) || ( 'autosave' === $type && ! $is_autosave ) )
2008-05-29 18:21:36 -04:00
continue ;
2008-05-09 11:59:17 -04:00
2013-04-30 23:11:44 -04:00
$rows .= " \t <li> " . wp_post_revision_title_expanded ( $revision ) . " </li> \n " ;
2008-04-18 19:38:21 -04:00
}
2013-07-05 11:04:24 -04:00
echo " <div class='hide-if-js'><p> " . __ ( 'JavaScript must be enabled to use this feature.' ) . " </p></div> \n " ;
echo " <ul class='post-revisions hide-if-no-js'> \n " ;
2013-05-04 08:54:00 -04:00
echo $rows ;
2013-08-30 21:33:09 -04:00
echo " </ul> " ;
2008-04-18 19:38:21 -04:00
}