2004-01-27 10:58:01 +01:00
< ? php
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* WordPress Post Template Functions .
2008-09-05 01:12:08 +02:00
*
* Gets content for the current post in the loop .
*
* @ package WordPress
* @ subpackage Template
*/
2004-01-27 10:58:01 +01:00
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Display the ID of the current item in the WordPress Loop .
2008-09-05 01:12:08 +02:00
*
* @ since 0.71
*/
2004-01-27 10:58:01 +01:00
function the_ID () {
2010-08-28 13:57:28 +02:00
echo get_the_ID ();
2004-01-27 10:58:01 +01:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Retrieve the ID of the current item in the WordPress Loop .
2008-09-05 01:12:08 +02:00
*
* @ since 2.1 . 0
2010-08-28 13:57:28 +02:00
* @ uses $post
2008-09-05 01:12:08 +02:00
*
2010-08-28 13:57:28 +02:00
* @ return int
2008-09-05 01:12:08 +02:00
*/
2006-03-17 02:16:22 +01:00
function get_the_ID () {
2012-09-04 18:29:28 +02:00
return get_post () -> ID ;
2006-03-17 02:16:22 +01:00
}
2005-10-19 00:42:02 +02:00
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Display or retrieve the current post title with optional content .
2008-09-05 01:12:08 +02:00
*
* @ since 0.71
*
2008-10-14 00:28:34 +02: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-05 01:12:08 +02:00
*/
2004-01-27 10:58:01 +01:00
function the_title ( $before = '' , $after = '' , $echo = true ) {
2004-02-17 05:56:29 +01:00
$title = get_the_title ();
2007-06-25 19:48:35 +02:00
2007-09-19 00:50:59 +02:00
if ( strlen ( $title ) == 0 )
2007-06-25 19:48:35 +02:00
return ;
$title = $before . $title . $after ;
if ( $echo )
echo $title ;
else
return $title ;
2004-01-27 10:58:01 +01:00
}
2004-02-17 05:56:29 +01:00
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Sanitize the current title when retrieving or displaying .
2008-09-05 01:12:08 +02:00
*
2008-10-14 00:28:34 +02: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 21:43:53 +02:00
* esc_attr ()} before it is passed to the user or displayed . The default
2008-10-14 00:28:34 +02:00
* as with { @ link the_title ()}, is to display the title .
2008-09-05 01:12:08 +02:00
*
* @ since 2.3 . 0
*
2014-05-19 04:28:14 +02:00
* @ param string | array $args {
* Title attribute arguments . Optional .
*
* @ type string $before Markup to prepend to the title . Default empty .
* @ type string $after Markup to append to the title . Default empty .
* @ type bool $echo Whether to echo or return the title . Default true for echo .
* @ type WP_Post $post Current post object to retrieve the title for .
* }
2008-10-14 00:28:34 +02:00
* @ return string | null Null on failure or display . String when echo is false .
2008-09-05 01:12:08 +02:00
*/
2007-09-19 00:50:59 +02:00
function the_title_attribute ( $args = '' ) {
2014-05-13 06:48:15 +02:00
$defaults = array ( 'before' => '' , 'after' => '' , 'echo' => true , 'post' => get_post () );
$r = wp_parse_args ( $args , $defaults );
2013-07-23 18:05:40 +02:00
2014-05-13 06:48:15 +02:00
$title = get_the_title ( $r [ 'post' ] );
2007-09-19 00:50:59 +02:00
2014-05-13 06:48:15 +02:00
if ( strlen ( $title ) == 0 ) {
2007-09-19 00:50:59 +02:00
return ;
2014-05-13 06:48:15 +02:00
}
2007-09-19 00:50:59 +02:00
2014-05-13 06:48:15 +02:00
$title = $r [ 'before' ] . $title . $r [ 'after' ];
$title = esc_attr ( strip_tags ( $title ) );
2007-09-19 00:50:59 +02:00
2014-05-13 06:48:15 +02:00
if ( $r [ 'echo' ] ) {
2007-09-19 00:50:59 +02:00
echo $title ;
2014-05-13 06:48:15 +02:00
} else {
2007-09-19 00:50:59 +02:00
return $title ;
2014-05-13 06:48:15 +02:00
}
2007-09-19 00:50:59 +02:00
}
2005-10-19 00:42:02 +02:00
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Retrieve post title .
2008-09-05 01:12:08 +02:00
*
2008-10-22 05:06:53 +02: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-05 01:12:08 +02:00
*
* @ since 0.71
*
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $post Optional . Post ID or post object .
2008-10-22 05:06:53 +02:00
* @ return string
2008-09-05 01:12:08 +02:00
*/
2012-09-04 18:29:28 +02: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-24 04:37:16 +01: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 18:29:28 +02: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-24 04:37:16 +01: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 18:29:28 +02:00
$private_title_format = apply_filters ( 'private_title_format' , __ ( 'Private: %s' ) );
$title = sprintf ( $private_title_format , $title );
2009-04-28 19:36:10 +02:00
}
2008-03-19 22:33:47 +01:00
}
2012-09-04 18:29:28 +02:00
2014-03-24 04:37:16 +01:00
/**
* Filter the post title .
*
* @ since 0.71
*
* @ param string $title The post title .
* @ param int $id The post ID .
*/
2009-12-27 09:57:33 +01:00
return apply_filters ( 'the_title' , $title , $id );
2004-01-27 10:58:01 +01:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Display the Post Global Unique Identifier ( guid ) .
2008-09-05 01:12:08 +02:00
*
2008-10-22 05:06:53 +02: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 22:04:07 +02:00
*
2010-05-26 19:27:18 +02:00
* Url is escaped to make it xml safe
2008-09-05 01:12:08 +02:00
*
* @ since 1.5 . 0
*
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2008-09-05 01:12:08 +02:00
*/
2006-06-08 01:17:59 +02:00
function the_guid ( $id = 0 ) {
2010-06-15 22:31:44 +02:00
echo esc_url ( get_the_guid ( $id ) );
2006-06-08 01:17:59 +02:00
}
2005-10-19 00:42:02 +02:00
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Retrieve the Post Global Unique Identifier ( guid ) .
2008-09-05 01:12:08 +02:00
*
2008-10-22 05:06:53 +02: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-05 01:12:08 +02:00
*
* @ since 1.5 . 0
*
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2008-10-22 05:06:53 +02:00
* @ return string
2008-09-05 01:12:08 +02:00
*/
2005-01-07 23:01:59 +01:00
function get_the_guid ( $id = 0 ) {
2012-08-23 22:01:10 +02:00
$post = get_post ( $id );
2005-10-19 00:42:02 +02:00
2014-03-24 04:37:16 +01: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 23:01:59 +01:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Display the post content .
2008-09-05 01:12:08 +02:00
*
* @ since 0.71
*
2008-10-22 05:06:53 +02:00
* @ param string $more_link_text Optional . Content for when there is more text .
2013-03-27 19:34:59 +01:00
* @ param bool $strip_teaser Optional . Strip teaser content before the more text . Default is false .
2008-09-05 01:12:08 +02: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 07:22:50 +02:00
function the_content ( $more_link_text = null , $strip_teaser = false ) {
$content = get_the_content ( $more_link_text , $strip_teaser );
2014-03-24 04:37:16 +01: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 07:22:50 +02:00
$content = apply_filters ( 'the_content' , $content );
$content = str_replace ( ']]>' , ']]>' , $content );
echo $content ;
2004-01-27 10:58:01 +01:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Retrieve the post content .
2008-09-05 01:12:08 +02:00
*
* @ since 0.71
*
2008-10-22 05:06:53 +02:00
* @ param string $more_link_text Optional . Content for when there is more text .
2011-10-26 12:15:29 +02:00
* @ param bool $stripteaser Optional . Strip teaser content before the more text . Default is false .
2008-10-22 05:06:53 +02:00
* @ return string
2008-09-05 01:12:08 +02: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 07:22:50 +02:00
function get_the_content ( $more_link_text = null , $strip_teaser = false ) {
global $page , $more , $preview , $pages , $multipage ;
$post = get_post ();
2007-12-06 20:49:33 +01:00
2008-11-20 19:20:25 +01:00
if ( null === $more_link_text )
2013-05-08 23:27:31 +02:00
$more_link_text = __ ( '(more…)' );
2008-08-05 08:40:44 +02:00
2005-10-19 00:42:02 +02:00
$output = '' ;
2013-03-27 19:34:59 +01:00
$has_teaser = false ;
2005-10-19 00:42:02 +02:00
2008-10-22 05:06:53 +02:00
// If post password required and it doesn't match the cookie.
2013-05-20 13:05:50 +02:00
if ( post_password_required ( $post ) )
return get_the_password_form ( $post );
2005-10-19 00:42:02 +02:00
2013-03-27 19:34:59 +01: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 10:36:11 +02:00
2013-03-27 19:34:59 +01: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 21:43:01 +02:00
2013-03-27 19:34:59 +01:00
$has_teaser = true ;
2006-08-01 15:53:04 +02:00
} else {
2013-03-27 19:34:59 +01:00
$content = array ( $content );
2006-08-01 06:54:23 +02:00
}
2013-03-27 19:34:59 +01:00
if ( false !== strpos ( $post -> post_content , '<!--noteaser-->' ) && ( ! $multipage || $page == 1 ) )
$strip_teaser = true ;
2005-10-19 00:42:02 +02:00
$teaser = $content [ 0 ];
2013-03-27 19:34:59 +01:00
if ( $more && $strip_teaser && $has_teaser )
2005-10-19 00:42:02 +02:00
$teaser = '' ;
2013-03-27 19:34:59 +01:00
2005-10-19 00:42:02 +02:00
$output .= $teaser ;
2013-03-27 19:34:59 +01:00
if ( count ( $content ) > 1 ) {
2006-09-12 01:59:00 +02:00
if ( $more ) {
2010-08-28 13:57:28 +02:00
$output .= '<span id="more-' . $post -> ID . '"></span>' . $content [ 1 ];
2006-09-12 01:59:00 +02:00
} else {
2013-03-27 19:34:59 +01:00
if ( ! empty ( $more_link_text ) )
2014-03-24 04:37:16 +01: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 13:57:28 +02: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 19:34:59 +01:00
$output = force_balance_tags ( $output );
2006-09-12 01:59:00 +02:00
}
2005-10-19 00:42:02 +02:00
}
2013-03-27 19:34:59 +01:00
2005-10-19 00:42:02 +02:00
if ( $preview ) // preview fix for javascript bug with foreign languages
2013-03-27 19:34:59 +01:00
$output = preg_replace_callback ( '/\%u([0-9A-F]{4})/' , '_convert_urlencoded_to_entities' , $output );
2005-10-19 00:42:02 +02:00
return $output ;
2004-01-27 10:58:01 +01:00
}
2010-10-28 09:25:30 +02:00
/**
* Preview fix for javascript bug with foreign languages
2010-11-17 19:47:34 +01:00
*
2010-10-28 09:25:30 +02:00
* @ since 3.1 . 0
* @ access private
* @ param array $match Match array from preg_replace_callback
2012-09-10 22:04:33 +02:00
* @ return string
2010-10-28 09:25:30 +02:00
*/
2010-11-11 23:50:36 +01:00
function _convert_urlencoded_to_entities ( $match ) {
2010-11-17 19:47:34 +01:00
return '&#' . base_convert ( $match [ 1 ], 16 , 10 ) . ';' ;
2010-10-28 09:25:30 +02:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Display the post excerpt .
2008-09-05 01:12:08 +02:00
*
* @ since 0.71
*/
2004-01-27 10:58:01 +01:00
function the_excerpt () {
2014-03-24 04:37:16 +01: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 10:58:01 +01:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Retrieve the post excerpt .
2008-09-05 01:12:08 +02:00
*
* @ since 0.71
*
2008-10-22 05:06:53 +02:00
* @ param mixed $deprecated Not used .
* @ return string
2008-09-05 01:12:08 +02:00
*/
2009-12-30 17:23:39 +01:00
function get_the_excerpt ( $deprecated = '' ) {
2009-12-24 12:12:04 +01:00
if ( ! empty ( $deprecated ) )
2009-12-30 17:23:39 +01:00
_deprecated_argument ( __FUNCTION__ , '2.3' );
2009-12-24 12:12:04 +01:00
2012-09-05 21:54:08 +02:00
$post = get_post ();
2012-09-04 18:29:28 +02:00
if ( post_password_required () ) {
2012-06-28 21:26:06 +02:00
return __ ( 'There is no excerpt because this is a protected post.' );
2005-02-15 01:21:21 +01:00
}
2004-02-22 15:39:04 +01:00
2014-03-24 04:37:16 +01:00
/**
* Filter the retrieved post excerpt .
*
* @ since 1.2 . 0
*
* @ param string $post_excerpt The post excerpt .
*/
2012-06-28 21:26:06 +02:00
return apply_filters ( 'get_the_excerpt' , $post -> post_excerpt );
2004-01-27 10:58:01 +01:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Whether post has excerpt .
2008-09-05 01:12:08 +02:00
*
* @ since 2.3 . 0
*
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2008-10-22 05:06:53 +02:00
* @ return bool
2008-09-05 01:12:08 +02:00
*/
2007-04-22 06:25:47 +02:00
function has_excerpt ( $id = 0 ) {
2012-08-23 22:01:10 +02:00
$post = get_post ( $id );
2007-04-22 06:25:47 +02:00
return ( ! empty ( $post -> post_excerpt ) );
}
2005-10-19 00:42:02 +02:00
2008-08-13 21:09:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Display the classes for the post div .
2008-08-13 21:09:08 +02:00
*
2008-10-14 00:28:34 +02:00
* @ since 2.7 . 0
2008-08-13 21:09:08 +02:00
*
2008-10-22 05:06:53 +02:00
* @ param string | array $class One or more classes to add to the class list .
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $post_id Optional . Post ID or post object .
2008-08-13 21:09:08 +02:00
*/
function post_class ( $class = '' , $post_id = null ) {
2008-08-14 01:26:14 +02:00
// Separates classes with a single space, collates classes for post DIV
echo 'class="' . join ( ' ' , get_post_class ( $class , $post_id ) ) . '"' ;
}
/**
2008-10-14 00:28:34 +02:00
* Retrieve the classes for the post div as an array .
2008-08-14 01:26:14 +02:00
*
2014-03-06 07:06:14 +01: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-22 05:06:53 +02: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-14 01:26:14 +02:00
*
2008-10-14 00:28:34 +02:00
* @ since 2.7 . 0
2008-08-14 01:26:14 +02:00
*
2008-10-22 05:06:53 +02:00
* @ param string | array $class One or more classes to add to the class list .
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $post_id Optional . Post ID or post object .
2008-10-22 05:06:53 +02:00
* @ return array Array of classes .
2008-08-14 01:26:14 +02:00
*/
function get_post_class ( $class = '' , $post_id = null ) {
2008-08-13 23:58:06 +02:00
$post = get_post ( $post_id );
2008-08-13 21:09:08 +02:00
2008-08-13 23:59:52 +02:00
$classes = array ();
2009-05-25 01:47:49 +02:00
2009-11-18 22:04:09 +01:00
if ( empty ( $post ) )
return $classes ;
2009-05-12 19:11:57 +02:00
$classes [] = 'post-' . $post -> ID ;
2012-09-14 20:57:11 +02:00
if ( ! is_admin () )
$classes [] = $post -> post_type ;
2010-02-24 00:32:17 +01:00
$classes [] = 'type-' . $post -> post_type ;
2010-11-01 19:07:31 +01:00
$classes [] = 'status-' . $post -> post_status ;
2010-11-17 19:47:34 +01:00
2010-11-12 05:10:56 +01:00
// Post Format
2011-01-14 00:02:24 +01:00
if ( post_type_supports ( $post -> post_type , 'post-formats' ) ) {
2011-09-07 22:10:42 +02:00
$post_format = get_post_format ( $post -> ID );
2011-01-14 00:02:24 +01:00
if ( $post_format && ! is_wp_error ( $post_format ) )
$classes [] = 'format-' . sanitize_html_class ( $post_format );
else
$classes [] = 'format-standard' ;
}
2008-08-13 21:09:08 +02:00
2014-03-06 07:06:14 +01:00
// Post requires password
if ( post_password_required ( $post -> ID ) ) {
2010-11-01 19:05:33 +01:00
$classes [] = 'post-password-required' ;
2014-03-06 07:06:14 +01:00
// Post thumbnails
2014-03-19 20:00:14 +01:00
} elseif ( ! is_attachment ( $post ) && current_theme_supports ( 'post-thumbnails' ) && has_post_thumbnail ( $post -> ID ) ) {
2014-03-06 07:06:14 +01:00
$classes [] = 'has-post-thumbnail' ;
}
2010-11-17 19:47:34 +01:00
2008-08-13 23:59:52 +02:00
// sticky for Sticky Posts
2010-06-01 17:03:49 +02:00
if ( is_sticky ( $post -> ID ) && is_home () && ! is_paged () )
2008-08-13 23:58:06 +02:00
$classes [] = 'sticky' ;
2008-08-13 21:09:08 +02:00
2010-11-01 19:05:33 +01:00
// hentry for hAtom compliance
2008-08-13 23:58:06 +02:00
$classes [] = 'hentry' ;
2008-08-13 21:09:08 +02:00
2008-08-13 23:58:06 +02:00
// Categories
2010-11-05 13:47:19 +01:00
if ( is_object_in_taxonomy ( $post -> post_type , 'category' ) ) {
2010-11-12 22:53:15 +01:00
foreach ( ( array ) get_the_category ( $post -> ID ) as $cat ) {
2010-11-05 13:47:19 +01:00
if ( empty ( $cat -> slug ) )
continue ;
2010-11-12 19:40:51 +01:00
$classes [] = 'category-' . sanitize_html_class ( $cat -> slug , $cat -> term_id );
2010-11-05 13:47:19 +01:00
}
2008-08-13 23:58:06 +02:00
}
// Tags
2010-11-05 13:47:19 +01: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 23:58:06 +02:00
}
if ( ! empty ( $class ) ) {
2008-08-14 01:26:14 +02:00
if ( ! is_array ( $class ) )
$class = preg_split ( '#\s+#' , $class );
2008-08-13 23:58:06 +02:00
$classes = array_merge ( $classes , $class );
}
2009-08-18 18:05:07 +02:00
$classes = array_map ( 'esc_attr' , $classes );
2014-03-24 04:37:16 +01: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 21:09:08 +02:00
}
2009-02-02 20:21:38 +01: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-20 03:01:46 +01:00
global $wp_query , $wpdb ;
2009-03-18 03:43:45 +01:00
2009-02-02 20:21:38 +01:00
$classes = array ();
2009-03-18 03:43:45 +01:00
2010-05-03 07:49:19 +02:00
if ( is_rtl () )
2009-02-02 20:21:38 +01:00
$classes [] = 'rtl' ;
2009-03-18 03:43:45 +01:00
2009-02-02 20:21:38 +01: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 22:38:40 +02:00
if ( is_search () ) {
2009-02-02 20:21:38 +01:00
$classes [] = 'search' ;
2012-04-25 22:38:40 +02:00
$classes [] = $wp_query -> posts ? 'search-results' : 'search-no-results' ;
}
2009-02-02 20:21:38 +01:00
if ( is_paged () )
$classes [] = 'paged' ;
if ( is_attachment () )
$classes [] = 'attachment' ;
if ( is_404 () )
$classes [] = 'error404' ;
2009-03-18 03:43:45 +01:00
2009-02-02 20:21:38 +01:00
if ( is_single () ) {
2010-02-08 23:05:05 +01:00
$post_id = $wp_query -> get_queried_object_id ();
$post = $wp_query -> get_queried_object ();
2010-02-08 19:02:23 +01:00
2010-02-08 23:05:05 +01:00
$classes [] = 'single' ;
2012-11-07 23:12:44 +01: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 16:11:29 +01:00
}
2011-09-07 22:10:42 +02:00
}
2009-03-18 03:43:45 +01:00
2009-02-02 20:21:38 +01:00
if ( is_attachment () ) {
2010-02-08 23:05:05 +01:00
$mime_type = get_post_mime_type ( $post_id );
2009-02-02 20:21:38 +01:00
$mime_prefix = array ( 'application/' , 'image/' , 'text/' , 'audio/' , 'video/' , 'music/' );
2010-02-08 23:05:05 +01:00
$classes [] = 'attachmentid-' . $post_id ;
2010-02-27 21:06:35 +01:00
$classes [] = 'attachment-' . str_replace ( $mime_prefix , '' , $mime_type );
2009-02-02 20:21:38 +01:00
}
} elseif ( is_archive () ) {
2010-10-15 21:44:57 +02:00
if ( is_post_type_archive () ) {
$classes [] = 'post-type-archive' ;
2013-10-09 21:14:09 +02: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 21:44:57 +02:00
} else if ( is_author () ) {
2009-02-02 20:21:38 +01:00
$author = $wp_query -> get_queried_object ();
$classes [] = 'author' ;
2012-11-07 23:12:44 +01:00
if ( isset ( $author -> user_nicename ) ) {
$classes [] = 'author-' . sanitize_html_class ( $author -> user_nicename , $author -> ID );
2012-11-17 16:11:29 +01:00
$classes [] = 'author-' . $author -> ID ;
2012-11-07 23:12:44 +01:00
}
2009-02-02 20:21:38 +01:00
} elseif ( is_category () ) {
$cat = $wp_query -> get_queried_object ();
$classes [] = 'category' ;
2012-11-07 23:12:44 +01:00
if ( isset ( $cat -> term_id ) ) {
$classes [] = 'category-' . sanitize_html_class ( $cat -> slug , $cat -> term_id );
2012-11-17 16:11:29 +01:00
$classes [] = 'category-' . $cat -> term_id ;
2012-11-07 23:12:44 +01:00
}
2009-02-02 20:21:38 +01:00
} elseif ( is_tag () ) {
$tags = $wp_query -> get_queried_object ();
$classes [] = 'tag' ;
2012-11-07 23:12:44 +01:00
if ( isset ( $tags -> term_id ) ) {
$classes [] = 'tag-' . sanitize_html_class ( $tags -> slug , $tags -> term_id );
2012-11-17 16:11:29 +01:00
$classes [] = 'tag-' . $tags -> term_id ;
2012-11-07 23:12:44 +01:00
}
2010-10-20 11:32:16 +02:00
} elseif ( is_tax () ) {
$term = $wp_query -> get_queried_object ();
2012-11-07 23:12:44 +01: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 20:21:38 +01:00
}
} elseif ( is_page () ) {
2009-04-16 20:22:27 +02:00
$classes [] = 'page' ;
2009-04-20 20:18:39 +02:00
2010-02-08 23:05:05 +01:00
$page_id = $wp_query -> get_queried_object_id ();
2009-04-16 19:37:58 +02:00
2012-08-23 22:01:10 +02:00
$post = get_post ( $page_id );
2009-04-22 19:46:51 +02:00
2010-02-08 23:05:05 +01:00
$classes [] = 'page-id-' . $page_id ;
2009-04-22 19:46:51 +02:00
2010-02-08 23:05:05 +01: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 20:21:38 +01:00
$classes [] = 'page-parent' ;
2009-03-18 03:43:45 +01:00
2010-01-27 18:45:49 +01:00
if ( $post -> post_parent ) {
2009-05-12 19:11:57 +02:00
$classes [] = 'page-child' ;
2010-01-27 18:45:49 +01:00
$classes [] = 'parent-pageid-' . $post -> post_parent ;
2009-06-15 02:28:52 +02:00
}
if ( is_page_template () ) {
2009-05-12 19:11:57 +02:00
$classes [] = 'page-template' ;
2012-03-02 19:56:54 +01:00
$classes [] = 'page-template-' . sanitize_html_class ( str_replace ( '.' , '-' , get_page_template_slug ( $page_id ) ) );
2011-07-11 07:31:57 +02:00
} else {
2011-07-11 07:34:15 +02:00
$classes [] = 'page-template-default' ;
2009-06-15 02:28:52 +02:00
}
2009-02-02 20:21:38 +01:00
}
2009-03-18 03:43:45 +01:00
2009-02-02 20:21:38 +01:00
if ( is_user_logged_in () )
$classes [] = 'logged-in' ;
2009-03-18 03:43:45 +01:00
2012-10-03 22:54:54 +02:00
if ( is_admin_bar_showing () ) {
2010-11-17 18:21:45 +01:00
$classes [] = 'admin-bar' ;
2012-10-03 22:54:54 +02:00
$classes [] = 'no-customize-support' ;
}
2010-11-17 18:21:45 +01:00
2012-06-11 23:25:05 +02:00
if ( get_theme_mod ( 'background_color' ) || get_background_image () )
2011-10-05 19:20:43 +02:00
$classes [] = 'custom-background' ;
2010-02-27 21:06:35 +01:00
$page = $wp_query -> get ( 'page' );
2009-03-18 03:43:45 +01:00
2014-05-04 15:17:15 +02:00
if ( ! $page || $page < 2 )
2010-02-27 21:06:35 +01:00
$page = $wp_query -> get ( 'paged' );
2009-03-18 03:43:45 +01:00
2014-05-04 15:17:15 +02:00
if ( $page && $page > 1 && ! is_404 () ) {
2009-02-02 20:21:38 +01:00
$classes [] = 'paged-' . $page ;
2009-03-18 03:43:45 +01:00
2009-02-02 20:21:38 +01: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 21:44:57 +02:00
elseif ( is_post_type_archive () )
$classes [] = 'post-type-paged-' . $page ;
2009-02-02 20:21:38 +01:00
}
2009-03-18 03:43:45 +01:00
2011-06-07 10:55:25 +02:00
if ( ! empty ( $class ) ) {
2009-02-02 20:21:38 +01:00
if ( ! is_array ( $class ) )
2010-02-27 21:06:35 +01:00
$class = preg_split ( '#\s+#' , $class );
$classes = array_merge ( $classes , $class );
2011-06-07 10:55:25 +02:00
} else {
// Ensure that we always coerce class to being an array.
$class = array ();
2009-02-02 20:21:38 +01:00
}
2009-03-18 03:43:45 +01:00
2010-02-27 21:06:35 +01:00
$classes = array_map ( 'esc_attr' , $classes );
2009-08-18 18:05:07 +02:00
2014-03-24 04:37:16 +01: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 21:06:35 +01:00
return apply_filters ( 'body_class' , $classes , $class );
2009-02-02 20:21:38 +01:00
}
2008-09-03 21:54:14 +02:00
/**
2008-10-22 05:06:53 +02:00
* Whether post requires password and correct password has been provided .
2008-09-03 21:54:14 +02:00
*
2008-10-14 00:28:34 +02:00
* @ since 2.7 . 0
2008-09-03 21:54:14 +02:00
*
2013-05-20 13:05:50 +02:00
* @ param int | WP_Post $post An optional post . Global $post used if not provided .
2008-10-22 05:06:53 +02:00
* @ return bool false if a password is not required or the correct password cookie is present , true otherwise .
2008-09-03 21:54:14 +02:00
*/
function post_password_required ( $post = null ) {
$post = get_post ( $post );
2012-01-11 17:42:42 +01:00
if ( empty ( $post -> post_password ) )
2008-09-03 21:54:14 +02:00
return false ;
2012-01-11 17:42:42 +01:00
if ( ! isset ( $_COOKIE [ 'wp-postpass_' . COOKIEHASH ] ) )
2008-09-03 21:54:14 +02:00
return true ;
2013-06-21 05:00:26 +02:00
require_once ABSPATH . 'wp-includes/class-phpass.php' ;
$hasher = new PasswordHash ( 8 , true );
2012-01-11 17:42:42 +01:00
2013-03-03 22:11:40 +01:00
$hash = wp_unslash ( $_COOKIE [ 'wp-postpass_' . COOKIEHASH ] );
2013-06-21 05:00:26 +02:00
if ( 0 !== strpos ( $hash , '$P$B' ) )
return true ;
2008-09-03 21:54:14 +02:00
2013-06-21 05:00:26 +02:00
return ! $hasher -> CheckPassword ( $post -> post_password , $hash );
2008-09-03 21:54:14 +02:00
}
2014-02-25 18:14:14 +01:00
//
// Page Template Functions for usage in Themes
//
2008-10-16 21:13:30 +02:00
/**
2008-10-22 05:06:53 +02:00
* The formatted output of a list of pages .
2008-10-16 21:13:30 +02:00
*
2008-10-22 05:06:53 +02:00
* Displays page links for paginated posts ( i . e . includes the <!-- nextpage -->.
2008-11-10 18:45:38 +01:00
* Quicktag one or more times ) . This tag must be within The Loop .
2008-10-16 21:13:30 +02:00
*
* The defaults for overwriting are :
2008-10-22 05:06:53 +02:00
* 'before' - Default is '<p> Pages:' ( string ) . The html or text to prepend to
* each bookmarks .
2008-10-16 21:13:30 +02:00
* 'after' - Default is '</p>' ( string ) . The html or text to append to each
2008-10-22 05:06:53 +02:00
* bookmarks .
2008-10-16 21:13:30 +02:00
* 'link_before' - Default is '' ( string ) . The html or text to prepend to each
2010-05-16 08:11:43 +02:00
* Pages link inside the < a > tag . Also prepended to the current item , which
* is not linked .
2008-10-16 21:13:30 +02:00
* 'link_after' - Default is '' ( string ) . The html or text to append to each
2010-05-16 08:11:43 +02:00
* Pages link inside the < a > tag . Also appended to the current item , which
* is not linked .
2013-03-08 19:33:52 +01: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-05 01:12:08 +02:00
*
* @ since 1.2 . 0
*
2008-10-16 21:13:30 +02:00
* @ param string | array $args Optional . Overwrite the defaults .
2008-10-22 05:06:53 +02:00
* @ return string Formatted output in HTML .
2008-09-05 01:12:08 +02:00
*/
2013-03-08 19:33:52 +01:00
function wp_link_pages ( $args = '' ) {
2007-05-11 05:10:05 +02:00
$defaults = array (
2013-03-08 19:33:52 +01: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-11 05:10:05 +02:00
);
2007-06-14 04:25:30 +02:00
2014-05-15 02:44:14 +02:00
$params = wp_parse_args ( $args , $defaults );
2014-03-24 04:37:16 +01:00
/**
* Filter the arguments used in retrieving page links for paginated posts .
*
* @ since 3.0 . 0
*
2014-05-15 02:44:14 +02:00
* @ param array $params An array of arguments for page links for paginated posts .
2014-03-24 04:37:16 +01:00
*/
2014-05-15 02:44:14 +02:00
$r = apply_filters ( 'wp_link_pages_args' , $params );
2007-05-11 05:10:05 +02:00
2013-08-02 06:42:08 +02:00
global $page , $numpages , $multipage , $more ;
2006-08-30 23:00:37 +02:00
$output = '' ;
2005-10-19 00:42:02 +02:00
if ( $multipage ) {
2014-05-15 02:44:14 +02:00
if ( 'number' == $r [ 'next_or_number' ] ) {
$output .= $r [ 'before' ];
2013-03-08 19:33:52 +01:00
for ( $i = 1 ; $i <= $numpages ; $i ++ ) {
2014-05-15 02:44:14 +02:00
$link = $r [ 'link_before' ] . str_replace ( '%' , $i , $r [ 'pagelink' ] ) . $r [ 'link_after' ];
if ( $i != $page || ! $more && 1 == $page ) {
2013-03-08 19:33:52 +01:00
$link = _wp_link_page ( $i ) . $link . '</a>' ;
2014-05-15 02:44:14 +02:00
}
2014-03-24 04:37:16 +01: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 19:33:52 +01:00
$link = apply_filters ( 'wp_link_pages_link' , $link , $i );
2014-05-15 02:44:14 +02:00
$output .= $r [ 'separator' ] . $link ;
2005-10-19 00:42:02 +02:00
}
2014-05-15 02:44:14 +02:00
$output .= $r [ 'after' ];
2013-03-08 19:33:52 +01:00
} elseif ( $more ) {
2014-05-15 02:44:14 +02: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-24 04:37:16 +01:00
/** This filter is documented in wp-includes/post-template.php */
2014-05-15 02:44:14 +02:00
$link = apply_filters ( 'wp_link_pages_link' , $link , $prev );
$output .= $r [ 'separator' ] . $link ;
2005-10-19 00:42:02 +02:00
}
2014-05-15 02:44:14 +02:00
$next = $page + 1 ;
if ( $next <= $numpages ) {
$link = _wp_link_page ( $next ) . $r [ 'link_before' ] . $r [ 'nextpagelink' ] . $r [ 'link_after' ] . '</a>' ;
2014-03-24 04:37:16 +01:00
/** This filter is documented in wp-includes/post-template.php */
2014-05-15 02:44:14 +02:00
$link = apply_filters ( 'wp_link_pages_link' , $link , $next );
$output .= $r [ 'separator' ] . $link ;
2013-03-08 19:33:52 +01:00
}
2014-05-15 02:44:14 +02:00
$output .= $r [ 'after' ];
2005-10-19 00:42:02 +02:00
}
}
2006-08-30 23:00:37 +02:00
2014-03-24 04:37:16 +01:00
/**
* Filter the HTML output of page links for paginated posts .
*
* @ since 3.6 . 0
*
2014-05-15 07:08:14 +02:00
* @ param string $output HTML output of paginated posts ' page links .
2014-03-24 04:37:16 +01:00
* @ param array $args An array of arguments .
*/
2014-05-15 02:44:14 +02:00
$html = apply_filters ( 'wp_link_pages' , $output , $args );
2013-03-08 19:33:52 +01:00
2014-05-15 02:44:14 +02:00
if ( $r [ 'echo' ] ) {
echo $html ;
}
return $html ;
2004-01-27 10:58:01 +01:00
}
2010-09-14 18:48:38 +02:00
/**
* Helper function for wp_link_pages () .
*
* @ since 3.1 . 0
* @ access private
*
2010-11-18 20:12:48 +01:00
* @ param int $i Page number .
2010-09-14 18:48:38 +02:00
* @ return string Link .
*/
2010-09-07 03:18:42 +02:00
function _wp_link_page ( $i ) {
2012-09-04 18:29:28 +02:00
global $wp_rewrite ;
$post = get_post ();
2010-09-07 03:18:42 +02:00
if ( 1 == $i ) {
2010-09-14 18:48:38 +02:00
$url = get_permalink ();
2010-09-07 03:18:42 +02: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 18:48:38 +02:00
$url = trailingslashit ( get_permalink ()) . user_trailingslashit ( $i , 'single_paged' );
2010-09-07 03:18:42 +02:00
}
2014-03-01 00:08:13 +01:00
if ( is_preview () ) {
$url = add_query_arg ( array (
'preview' => 'true'
), $url );
2014-03-01 00:29:14 +01:00
if ( ( 'draft' !== $post -> post_status ) && isset ( $_GET [ 'preview_id' ], $_GET [ 'preview_nonce' ] ) ) {
2014-03-01 00:08:13 +01:00
$url = add_query_arg ( array (
2014-03-01 00:29:14 +01:00
'preview_id' => wp_unslash ( $_GET [ 'preview_id' ] ),
'preview_nonce' => wp_unslash ( $_GET [ 'preview_nonce' ] )
2014-03-01 00:08:13 +01:00
), $url );
}
}
2010-11-23 00:54:30 +01:00
return '<a href="' . esc_url ( $url ) . '">' ;
2010-09-07 03:18:42 +02:00
}
2005-10-19 00:42:02 +02:00
2006-06-08 01:17:59 +02:00
//
// Post-meta: Custom per-post fields.
//
2004-02-26 22:42:47 +01:00
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Retrieve post custom meta data field .
2008-09-05 01:12:08 +02:00
*
* @ since 1.5 . 0
*
2008-10-14 00:28:34 +02:00
* @ param string $key Meta data key name .
2010-03-28 06:19:44 +02: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-05 01:12:08 +02:00
*/
2005-02-02 23:52:47 +01:00
function post_custom ( $key = '' ) {
2006-01-25 08:38:43 +01:00
$custom = get_post_custom ();
2005-10-19 00:42:02 +02:00
2010-03-28 06:19:44 +02:00
if ( ! isset ( $custom [ $key ] ) )
return false ;
elseif ( 1 == count ( $custom [ $key ]) )
2006-01-25 08:38:43 +01:00
return $custom [ $key ][ 0 ];
2005-10-19 00:42:02 +02:00
else
2006-01-25 08:38:43 +01:00
return $custom [ $key ];
2005-02-02 23:52:47 +01:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Display list of post custom fields .
2008-09-05 01:12:08 +02:00
*
2008-10-14 00:28:34 +02:00
* @ internal This will probably change at some point ...
2008-09-05 01:12:08 +02:00
* @ since 1.2 . 0
2008-10-14 00:28:34 +02:00
* @ uses apply_filters () Calls 'the_meta_key' on list item HTML content , with key and value as separate parameters .
2008-09-05 01:12:08 +02:00
*/
2004-02-26 22:42:47 +01:00
function the_meta () {
2005-10-19 00:42:02 +02:00
if ( $keys = get_post_custom_keys () ) {
2004-03-29 20:46:33 +02:00
echo " <ul class='post-meta'> \n " ;
2008-08-06 22:31:54 +02:00
foreach ( ( array ) $keys as $key ) {
2006-02-20 18:13:06 +01:00
$keyt = trim ( $key );
2011-07-21 00:04:35 +02:00
if ( is_protected_meta ( $keyt , 'post' ) )
2006-02-20 18:13:06 +01:00
continue ;
2006-01-25 08:38:43 +01:00
$values = array_map ( 'trim' , get_post_custom_values ( $key ));
2004-02-26 23:22:54 +01:00
$value = implode ( $values , ', ' );
2014-03-24 04:37:16 +01: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 22:42:47 +01:00
}
echo " </ul> \n " ;
}
}
2006-06-08 01:17:59 +02:00
//
// Pages
//
2004-12-30 20:41:14 +01:00
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Retrieve or display list of pages as a dropdown ( select list ) .
2008-09-05 01:12:08 +02:00
*
* @ since 2.1 . 0
*
2008-10-22 05:06:53 +02:00
* @ param array | string $args Optional . Override default arguments .
* @ return string HTML content , if not displaying .
2008-09-05 01:12:08 +02:00
*/
2014-05-15 03:12:13 +02:00
function wp_dropdown_pages ( $args = '' ) {
2007-05-11 05:10:05 +02:00
$defaults = array (
2007-09-04 01:32:58 +02:00
'depth' => 0 , 'child_of' => 0 ,
'selected' => 0 , 'echo' => 1 ,
2010-01-27 22:29:07 +01:00
'name' => 'page_id' , 'id' => '' ,
'show_option_none' => '' , 'show_option_no_change' => '' ,
2008-12-05 19:03:24 +01:00
'option_none_value' => ''
2007-05-11 05:10:05 +02:00
);
2007-06-14 04:25:30 +02:00
2007-05-11 05:10:05 +02:00
$r = wp_parse_args ( $args , $defaults );
2006-02-28 04:57:08 +01:00
2014-05-15 03:12:13 +02:00
$pages = get_pages ( $r );
2006-02-28 04:57:08 +01:00
$output = '' ;
2010-01-27 22:29:07 +01:00
// Back-compat with old system where both id and name were based on $name argument
2014-05-15 03:12:13 +02: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-28 04:57:08 +01:00
$output .= " </select> \n " ;
}
2014-03-24 04:37:16 +01:00
/**
* Filter the HTML output of a list of pages as a drop down .
*
* @ since 2.1 . 0
*
2014-05-15 07:08:14 +02:00
* @ param string $output HTML output for drop down list of pages .
2014-03-24 04:37:16 +01:00
*/
2014-05-15 03:12:13 +02:00
$html = apply_filters ( 'wp_dropdown_pages' , $output );
2006-02-28 04:57:08 +01:00
2014-05-15 03:12:13 +02:00
if ( $r [ 'echo' ] ) {
echo $html ;
}
return $html ;
2006-02-28 04:57:08 +01:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Retrieve or display list of pages in list ( li ) format .
2008-09-05 01:12:08 +02:00
*
* @ since 1.5 . 0
*
2014-05-10 10:02:14 +02: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-05 01:12:08 +02:00
*/
2014-05-10 10:02:14 +02:00
function wp_list_pages ( $args = '' ) {
2007-05-11 05:10:05 +02:00
$defaults = array (
2007-09-04 01:32:58 +02:00
'depth' => 0 , 'show_date' => '' ,
2014-05-15 03:22:15 +02:00
'date_format' => get_option ( 'date_format' ),
2007-09-04 01:32:58 +02:00
'child_of' => 0 , 'exclude' => '' ,
2014-05-15 03:22:15 +02:00
'title_li' => __ ( 'Pages' ), 'echo' => 1 ,
2008-11-03 07:07:39 +01:00
'authors' => '' , 'sort_column' => 'menu_order, post_title' ,
2009-11-05 23:01:53 +01:00
'link_before' => '' , 'link_after' => '' , 'walker' => '' ,
2007-05-11 05:10:05 +02:00
);
2007-06-14 04:25:30 +02:00
2007-05-11 05:10:05 +02:00
$r = wp_parse_args ( $args , $defaults );
2005-10-19 00:42:02 +02:00
2005-04-21 02:49:15 +02:00
$output = '' ;
2007-02-02 17:38:26 +01:00
$current_page = 0 ;
2004-12-30 20:41:14 +01:00
2006-12-03 10:23:17 +01:00
// sanitize, mostly to keep spaces out
2014-05-15 03:22:15 +02:00
$r [ 'exclude' ] = preg_replace ( '/[^0-9,]/' , '' , $r [ 'exclude' ] );
2006-12-03 10:23:17 +01:00
2009-12-06 19:01:01 +01:00
// Allow plugins to filter an array of excluded pages (but don't put a nullstring into the array)
2014-05-15 03:22:15 +02:00
$exclude_array = ( $r [ 'exclude' ] ) ? explode ( ',' , $r [ 'exclude' ] ) : array ();
2014-03-24 04:37:16 +01: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 10:23:17 +01:00
2004-12-30 20:41:14 +01:00
// Query pages.
2007-12-17 07:53:59 +01:00
$r [ 'hierarchical' ] = 0 ;
2014-05-15 03:22:15 +02:00
$pages = get_pages ( $r );
2005-10-19 00:42:02 +02:00
2014-05-15 03:22:15 +02:00
if ( ! empty ( $pages ) ) {
if ( $r [ 'title_li' ] ) {
2005-10-19 00:42:02 +02:00
$output .= '<li class="pagenav">' . $r [ 'title_li' ] . '<ul>' ;
2014-05-15 03:22:15 +02:00
}
2006-02-28 04:57:08 +01:00
global $wp_query ;
2014-03-26 23:47:14 +01: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-15 03:22:15 +02:00
$output .= walk_page_tree ( $pages , $r [ 'depth' ], $current_page , $r );
2004-12-30 20:41:14 +01:00
2014-05-15 03:22:15 +02:00
if ( $r [ 'title_li' ] ) {
2005-10-19 00:42:02 +02:00
$output .= '</ul></li>' ;
2014-05-15 03:22:15 +02:00
}
2004-12-16 09:02:53 +01:00
}
2005-10-19 00:42:02 +02:00
2014-03-24 04:37:16 +01:00
/**
* Filter the HTML output of the pages to list .
*
* @ since 1.5 . 1
*
* @ see wp_list_pages ()
*
2014-05-15 07:08:14 +02:00
* @ param string $output HTML output of the pages list .
2014-03-24 04:37:16 +01:00
* @ param array $r An array of page - listing arguments .
*/
2014-05-15 03:22:15 +02:00
$html = apply_filters ( 'wp_list_pages' , $output , $r );
2005-10-19 00:42:02 +02:00
2014-05-15 03:22:15 +02:00
if ( $r [ 'echo' ] ) {
echo $html ;
} else {
return $html ;
}
2004-12-16 09:02:53 +01:00
}
2008-09-08 20:56:54 +02:00
/**
2008-11-22 11:39:58 +01: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 18:25:12 +02:00
* to 'menu_order, post_title' . Use column for posts table .</ li >
2008-11-22 11:39:58 +01: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 20:56:54 +02:00
*
* @ since 2.7 . 0
*
* @ param array | string $args
2012-09-10 22:04:33 +02:00
* @ return string html menu
2008-09-08 20:56:54 +02:00
*/
function wp_page_menu ( $args = array () ) {
2009-06-26 07:24:02 +02:00
$defaults = array ( 'sort_column' => 'menu_order, post_title' , 'menu_class' => 'menu' , 'echo' => true , 'link_before' => '' , 'link_after' => '' );
2008-09-08 20:56:54 +02:00
$args = wp_parse_args ( $args , $defaults );
2014-03-24 04:37:16 +01: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 20:56:54 +02:00
$args = apply_filters ( 'wp_page_menu_args' , $args );
$menu = '' ;
2008-12-07 13:14:14 +01:00
$list_args = $args ;
2008-09-08 20:56:54 +02:00
// Show Home in the menu
2010-03-19 22:29:21 +01:00
if ( ! empty ( $args [ 'show_home' ]) ) {
2008-09-08 20:56:54 +02: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 13:14:14 +01:00
if ( is_front_page () && ! is_paged () )
2008-09-08 20:56:54 +02:00
$class = 'class="current_page_item"' ;
2013-09-23 16:51:10 +02:00
$menu .= '<li ' . $class . '><a href="' . home_url ( '/' ) . '">' . $args [ 'link_before' ] . $text . $args [ 'link_after' ] . '</a></li>' ;
2008-12-07 13:14:14 +01: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 23:13:00 +01:00
$list_args [ 'exclude' ] .= get_option ( 'page_on_front' );
2008-12-07 13:14:14 +01:00
}
2008-09-08 20:56:54 +02:00
}
2008-10-18 23:15:20 +02:00
$list_args [ 'echo' ] = false ;
$list_args [ 'title_li' ] = '' ;
$menu .= str_replace ( array ( " \r " , " \n " , " \t " ), '' , wp_list_pages ( $list_args ) );
2008-09-08 20:56:54 +02:00
if ( $menu )
$menu = '<ul>' . $menu . '</ul>' ;
2009-08-18 18:05:07 +02:00
$menu = '<div class="' . esc_attr ( $args [ 'menu_class' ]) . '">' . $menu . " </div> \n " ;
2014-03-24 04:37:16 +01: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 19:03:31 +01:00
$menu = apply_filters ( 'wp_page_menu' , $menu , $args );
2008-10-18 23:06:28 +02:00
if ( $args [ 'echo' ] )
echo $menu ;
else
return $menu ;
2008-09-08 20:56:54 +02:00
}
2006-06-08 01:17:59 +02:00
//
// Page helpers
//
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Retrieve HTML list content for page list .
2008-09-05 01:12:08 +02:00
*
2008-10-14 00:28:34 +02:00
* @ uses Walker_Page to create HTML list content .
2008-09-05 01:12:08 +02:00
* @ since 2.1 . 0
2008-10-14 00:28:34 +02:00
* @ see Walker_Page :: walk () for parameters and return description .
2008-09-05 01:12:08 +02:00
*/
2008-11-21 18:17:18 +01:00
function walk_page_tree ( $pages , $depth , $current_page , $r ) {
2009-03-18 03:43:45 +01:00
if ( empty ( $r [ 'walker' ]) )
2008-12-19 21:27:11 +01:00
$walker = new Walker_Page ;
else
$walker = $r [ 'walker' ];
2013-09-24 18:01:09 +02:00
foreach ( ( array ) $pages as $page ) {
if ( $page -> post_parent )
$r [ 'pages_with_children' ][ $page -> post_parent ] = true ;
}
2008-11-21 18:17:18 +01:00
$args = array ( $pages , $depth , $r , $current_page );
2012-10-04 22:00:16 +02:00
return call_user_func_array ( array ( $walker , 'walk' ), $args );
2006-06-08 01:17:59 +02:00
}
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Retrieve HTML dropdown ( select ) content for page list .
2008-09-05 01:12:08 +02:00
*
2008-10-14 00:28:34 +02:00
* @ uses Walker_PageDropdown to create HTML dropdown content .
2008-09-05 01:12:08 +02:00
* @ since 2.1 . 0
2008-10-14 00:28:34 +02:00
* @ see Walker_PageDropdown :: walk () for parameters and return description .
2008-09-05 01:12:08 +02:00
*/
2006-06-08 01:17:59 +02:00
function walk_page_dropdown_tree () {
$args = func_get_args ();
2008-12-19 21:27:11 +01: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 22:00:16 +02:00
return call_user_func_array ( array ( $walker , 'walk' ), $args );
2006-06-08 01:17:59 +02:00
}
2010-10-30 16:06:08 +02: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
*/
2014-05-19 08:00:15 +02:00
public $tree_type = 'page' ;
2010-10-30 16:06:08 +02:00
/**
* @ see Walker :: $db_fields
* @ since 2.1 . 0
* @ todo Decouple this .
* @ var array
*/
2014-05-19 08:00:15 +02:00
public $db_fields = array ( 'parent' => 'post_parent' , 'id' => 'ID' );
2010-10-30 16:06:08 +02:00
/**
* @ 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 22:04:33 +02:00
* @ param array $args
2010-10-30 16:06:08 +02:00
*/
2014-05-19 08:00:15 +02:00
public function start_lvl ( & $output , $depth = 0 , $args = array () ) {
2010-10-30 16:06:08 +02: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 22:04:33 +02:00
* @ param array $args
2010-10-30 16:06:08 +02:00
*/
2014-05-19 08:00:15 +02:00
public function end_lvl ( & $output , $depth = 0 , $args = array () ) {
2010-10-30 16:06:08 +02: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
*/
2014-05-19 08:00:15 +02:00
public function start_el ( & $output , $page , $depth = 0 , $args = array (), $current_page = 0 ) {
2014-05-15 03:41:15 +02:00
if ( $depth ) {
$indent = str_repeat ( " \t " , $depth );
} else {
2010-10-30 16:06:08 +02:00
$indent = '' ;
2014-05-15 03:41:15 +02:00
}
2010-10-30 16:06:08 +02:00
2014-05-15 03:41:15 +02:00
$css_class = array ( 'page_item' , 'page-item-' . $page -> ID );
2013-09-24 18:01:09 +02:00
2014-05-15 03:41:15 +02:00
if ( isset ( $args [ 'pages_with_children' ][ $page -> ID ] ) ) {
2013-09-24 18:01:09 +02:00
$css_class [] = 'page_item_has_children' ;
2014-05-15 03:41:15 +02:00
}
2013-09-24 18:01:09 +02:00
2014-05-15 03:41:15 +02:00
if ( ! empty ( $current_page ) ) {
2012-08-23 22:01:10 +02:00
$_current_page = get_post ( $current_page );
2014-05-15 03:41:15 +02:00
if ( in_array ( $page -> ID , $_current_page -> ancestors ) ) {
2010-10-30 16:06:08 +02:00
$css_class [] = 'current_page_ancestor' ;
2014-05-15 03:41:15 +02:00
}
if ( $page -> ID == $current_page ) {
2010-10-30 16:06:08 +02:00
$css_class [] = 'current_page_item' ;
2014-05-15 03:41:15 +02:00
} elseif ( $_current_page && $page -> ID == $_current_page -> post_parent ) {
2010-10-30 16:06:08 +02:00
$css_class [] = 'current_page_parent' ;
2014-05-15 03:41:15 +02:00
}
2010-10-30 16:06:08 +02:00
} elseif ( $page -> ID == get_option ( 'page_for_posts' ) ) {
$css_class [] = 'current_page_parent' ;
}
2014-03-24 04:37:16 +01: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 .
*/
2014-05-15 03:41:15 +02:00
$css_classes = implode ( ' ' , apply_filters ( 'page_css_class' , $css_class , $page , $depth , $args , $current_page ) );
2010-10-30 16:06:08 +02:00
2014-05-15 03:41:15 +02:00
if ( '' === $page -> post_title ) {
2013-07-05 17:41:46 +02:00
$page -> post_title = sprintf ( __ ( '#%d (no title)' ), $page -> ID );
2014-05-15 03:41:15 +02:00
}
2013-07-05 17:41:46 +02:00
2014-05-15 03:41:15 +02:00
$args [ 'link_before' ] = empty ( $args [ 'link_before' ] ) ? '' : $args [ 'link_before' ];
$args [ 'link_after' ] = empty ( $args [ 'link_after' ] ) ? '' : $args [ 'link_after' ];
2010-10-30 16:06:08 +02:00
2014-05-15 03:41:15 +02:00
/** This filter is documented in wp-includes/post-template.php */
$output .= $indent . sprintf (
'<li class="%s"><a href="%s">%s%s%s</a>' ,
$css_classes ,
get_permalink ( $page -> ID ),
$args [ 'link_before' ],
apply_filters ( 'the_title' , $page -> post_title , $page -> ID ),
$args [ 'link_after' ]
);
if ( ! empty ( $args [ 'show_date' ] ) ) {
if ( 'modified' == $args [ 'show_date' ] ) {
2010-10-30 16:06:08 +02:00
$time = $page -> post_modified ;
2014-05-15 03:41:15 +02:00
} else {
2010-10-30 16:06:08 +02:00
$time = $page -> post_date ;
2014-05-15 03:41:15 +02:00
}
2010-10-30 16:06:08 +02:00
2014-05-15 03:41:15 +02:00
$date_format = empty ( $args [ 'date_format' ] ) ? '' : $args [ 'date_format' ];
$output .= " " . mysql2date ( $date_format , $time );
2010-10-30 16:06:08 +02:00
}
}
/**
* @ 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 22:04:33 +02:00
* @ param array $args
2010-10-30 16:06:08 +02:00
*/
2014-05-19 08:00:15 +02:00
public function end_el ( & $output , $page , $depth = 0 , $args = array () ) {
2010-10-30 16:06:08 +02: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
*/
2014-05-19 08:00:15 +02:00
public $tree_type = 'page' ;
2010-10-30 16:06:08 +02:00
/**
* @ see Walker :: $db_fields
* @ since 2.1 . 0
* @ todo Decouple this
* @ var array
*/
2014-05-19 08:00:15 +02:00
public $db_fields = array ( 'parent' => 'post_parent' , 'id' => 'ID' );
2010-10-30 16:06:08 +02:00
/**
* @ 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 22:04:33 +02:00
* @ param int $id
2010-10-30 16:06:08 +02:00
*/
2014-05-19 08:00:15 +02:00
public function start_el ( & $output , $page , $depth = 0 , $args = array (), $id = 0 ) {
2010-10-30 16:06:08 +02: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 23:34:13 +01:00
$title = $page -> post_title ;
if ( '' === $title ) {
$title = sprintf ( __ ( '#%d (no title)' ), $page -> ID );
}
2014-03-24 04:37:16 +01: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 23:34:13 +01:00
$title = apply_filters ( 'list_pages' , $title , $page );
2011-04-22 20:24:57 +02:00
$output .= $pad . esc_html ( $title );
2010-10-30 16:06:08 +02:00
$output .= " </option> \n " ;
}
}
2006-06-08 01:17:59 +02:00
//
// Attachments
//
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Display an attachment page link using an image or icon .
2008-09-05 01:12:08 +02:00
*
* @ since 2.0 . 0
*
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2008-10-22 05:06:53 +02: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-05 01:12:08 +02:00
*/
2009-12-30 17:23:39 +01:00
function the_attachment_link ( $id = 0 , $fullsize = false , $deprecated = false , $permalink = false ) {
if ( ! empty ( $deprecated ) )
2010-01-09 11:03:55 +01:00
_deprecated_argument ( __FUNCTION__ , '2.5' );
2009-12-30 17:23:39 +01:00
2008-03-04 05:21:37 +01:00
if ( $fullsize )
echo wp_get_attachment_link ( $id , 'full' , $permalink );
else
echo wp_get_attachment_link ( $id , 'thumbnail' , $permalink );
}
2008-10-14 00:28:34 +02:00
/**
* Retrieve an attachment page link using an image or icon , if possible .
*
2008-10-22 05:06:53 +02:00
* @ since 2.5 . 0
* @ uses apply_filters () Calls 'wp_get_attachment_link' filter on HTML content with same parameters as function .
2008-10-14 00:28:34 +02:00
*
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $id Optional . Post ID or post object .
2009-02-04 16:12:24 +01:00
* @ param string $size Optional , default is 'thumbnail' . Size of image , either array or string .
2008-10-22 05:06:53 +02: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 22:04:33 +02:00
* @ param string | bool $text Optional , default is false . If string , then will be link text .
2008-10-22 05:06:53 +02:00
* @ return string HTML content .
2008-10-14 00:28:34 +02:00
*/
2011-11-08 15:08:25 +01:00
function wp_get_attachment_link ( $id = 0 , $size = 'thumbnail' , $permalink = false , $icon = false , $text = false ) {
$id = intval ( $id );
2012-08-23 22:01:10 +02:00
$_post = get_post ( $id );
2008-03-04 05:21:37 +01:00
2011-11-08 15:08:25 +01:00
if ( empty ( $_post ) || ( 'attachment' != $_post -> post_type ) || ! $url = wp_get_attachment_url ( $_post -> ID ) )
return __ ( 'Missing Attachment' );
2008-03-04 05:21:37 +01:00
if ( $permalink )
2011-11-08 15:08:25 +01:00
$url = get_attachment_link ( $_post -> ID );
2008-03-04 05:21:37 +01:00
2011-11-08 15:08:25 +01:00
if ( $text )
2012-04-30 23:22:58 +02:00
$link_text = $text ;
2011-11-08 15:22:42 +01:00
elseif ( $size && 'none' != $size )
2011-11-08 15:08:25 +01:00
$link_text = wp_get_attachment_image ( $id , $size , $icon );
else
2010-02-13 12:12:47 +01:00
$link_text = '' ;
2009-02-07 03:58:21 +01:00
2011-11-08 15:08:25 +01:00
if ( trim ( $link_text ) == '' )
2009-02-07 03:58:21 +01:00
$link_text = $_post -> post_title ;
2009-03-18 03:43:45 +01:00
2014-03-24 04:37:16 +01: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 16:51:10 +02:00
return apply_filters ( 'wp_get_attachment_link' , " <a href=' $url '> $link_text </a> " , $id , $size , $permalink , $icon , $text );
2005-12-13 20:19:56 +01:00
}
2005-10-20 22:48:32 +02:00
2008-09-05 01:12:08 +02:00
/**
2008-10-22 05:06:53 +02:00
* Wrap attachment in << p >> element before content .
2008-09-05 01:12:08 +02:00
*
* @ since 2.0 . 0
*
2008-10-22 05:06:53 +02:00
* @ param string $content
* @ return string
2008-09-05 01:12:08 +02:00
*/
2005-12-13 20:19:56 +01:00
function prepend_attachment ( $content ) {
2012-09-04 18:29:28 +02:00
$post = get_post ();
2008-03-23 18:02:11 +01:00
if ( empty ( $post -> post_type ) || $post -> post_type != 'attachment' )
2008-03-23 19:19:03 +01:00
return $content ;
2008-03-23 18:02:11 +01:00
2014-04-02 19:14:15 +02:00
if ( 0 === strpos ( $post -> post_mime_type , 'video' ) ) {
2014-03-19 20:00:14 +01: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 15:39:14 +01:00
} elseif ( 0 === strpos ( $post -> post_mime_type , 'audio' ) ) {
2014-03-19 20:00:14 +01:00
$p = wp_audio_shortcode ( array ( 'src' => wp_get_attachment_url () ) );
2014-04-02 19:14:15 +02: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 15:39:14 +01:00
}
2014-03-19 20:00:14 +01:00
2014-03-24 04:37:16 +01: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 22:48:32 +02:00
return " $p\n $content " ;
}
2005-12-13 20:19:56 +01:00
2006-06-08 01:17:59 +02:00
//
// Misc
//
2008-09-05 01:12:08 +02:00
/**
2008-10-14 00:28:34 +02:00
* Retrieve protected post password form content .
2008-09-05 01:12:08 +02:00
*
* @ since 1.0 . 0
2008-10-14 00:28:34 +02:00
* @ uses apply_filters () Calls 'the_password_form' filter on output .
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $post Optional . A post ID or post object .
2008-10-14 00:28:34 +02:00
* @ return string HTML content for password form for password protected post .
2008-09-05 01:12:08 +02:00
*/
2013-05-20 13:05:50 +02:00
function get_the_password_form ( $post = 0 ) {
$post = get_post ( $post );
2013-08-07 15:44:32 +02:00
$label = 'pwbox-' . ( empty ( $post -> ID ) ? rand () : $post -> ID );
2013-08-07 15:43:50 +02:00
$output = '<form action="' . esc_url ( site_url ( 'wp-login.php?action=postpass' , 'login_post' ) ) . ' " class= " post - password - form " method= " post " >
2013-09-23 22:29:09 +02:00
< p > ' . __( ' This content is password protected . To view it please enter your password below : ' ) . ' </ p >
2014-02-08 14:23:13 +01: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-08 01:17:59 +02:00
' ;
2014-03-24 04:37:16 +01: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 15:43:50 +02:00
return apply_filters ( 'the_password_form' , $output );
2006-06-08 01:17:59 +02:00
}
2007-10-12 22:01:16 +02:00
/**
2008-10-14 00:28:34 +02:00
* Whether currently in a page template .
2007-10-12 22:01:16 +02:00
*
2010-02-24 21:13:23 +01:00
* This template tag allows you to determine if you are in a page template .
2010-02-26 06:46:08 +01:00
* You can optionally provide a template name and then the check will be
2008-10-14 00:28:34 +02:00
* specific to that template .
2007-10-12 22:01:16 +02:00
*
2008-09-05 01:12:08 +02:00
* @ since 2.5 . 0
* @ uses $wp_query
*
2008-10-14 00:28:34 +02:00
* @ param string $template The specific template name if specific matching is required .
2013-06-21 14:45:11 +02:00
* @ return bool True on success , false on failure .
2007-10-12 22:01:16 +02:00
*/
2012-03-02 19:56:54 +01:00
function is_page_template ( $template = '' ) {
if ( ! is_page () )
2007-10-12 22:01:16 +02:00
return false ;
2012-03-02 19:56:54 +01:00
$page_template = get_page_template_slug ( get_queried_object_id () );
2007-10-12 22:01:16 +02:00
2012-03-02 19:56:54 +01:00
if ( empty ( $template ) )
return ( bool ) $page_template ;
2007-10-12 22:01:16 +02:00
2012-03-02 19:56:54 +01:00
if ( $template == $page_template )
return true ;
if ( 'default' == $template && ! $page_template )
2007-10-12 22:01:16 +02:00
return true ;
return false ;
}
2012-03-02 19:56:54 +01:00
/**
* Get the specific template name for a page .
*
* @ since 3.4 . 0
*
2013-05-07 20:44:22 +02:00
* @ param int $post_id Optional . The page ID to check . Defaults to the current post , when used in the loop .
2012-03-02 19:56:54 +01: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 20:44:22 +02:00
if ( ! $post || 'page' != $post -> post_type )
2012-03-02 19:56:54 +01:00
return false ;
$template = get_post_meta ( $post -> ID , '_wp_page_template' , true );
if ( ! $template || 'default' == $template )
return '' ;
return $template ;
}
2008-04-19 01:38:21 +02:00
/**
2008-10-14 00:28:34 +02:00
* Retrieve formatted date timestamp of a revision ( linked to that revisions ' s page ) .
2008-04-19 01:38:21 +02:00
*
2008-10-14 00:28:34 +02:00
* @ since 2.6 . 0
2008-04-19 01:38:21 +02:00
*
* @ uses date_i18n ()
*
2008-10-14 00:28:34 +02: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-19 01:38:21 +02:00
*/
2008-05-08 19:25:07 +02:00
function wp_post_revision_title ( $revision , $link = true ) {
if ( ! $revision = get_post ( $revision ) )
2008-04-19 01:38:21 +02:00
return $revision ;
2008-05-08 19:25:07 +02:00
if ( ! in_array ( $revision -> post_type , array ( 'post' , 'page' , 'revision' ) ) )
return false ;
2013-03-21 16:54:11 +01: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 12:12:19 +02:00
$autosavef = _x ( '%1$s [Autosave]' , 'post revision title extra' );
2013-03-21 16:54:11 +01:00
/* translators: 1: date */
2013-05-02 12:12:19 +02:00
$currentf = _x ( '%1$s [Current Revision]' , 'post revision title extra' );
2013-03-21 16:54:11 +01: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 16:14:34 +01:00
$author = get_the_author_meta ( 'display_name' , $revision -> post_author );
2009-03-13 04:53:39 +01:00
/* translators: revision date format, see http://php.net/date */
2013-02-28 16:14:34 +01:00
$datef = _x ( 'j F, Y @ G:i:s' , 'revision date format' );
2013-03-21 16:54:11 +01:00
$gravatar = get_avatar ( $revision -> post_author , 24 );
2008-05-08 19:25:07 +02:00
2010-01-05 16:50:30 +01:00
$date = date_i18n ( $datef , strtotime ( $revision -> post_modified ) );
2008-05-08 19:25:07 +02: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 06:57:54 +01:00
2013-02-28 16:14:34 +01:00
$revision_date_author = sprintf (
2013-03-18 18:58:30 +01: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 16:14:34 +01: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 19:25:07 +02:00
2008-05-30 00:21:36 +02:00
if ( ! wp_is_post_revision ( $revision ) )
2013-02-28 16:14:34 +01:00
$revision_date_author = sprintf ( $currentf , $revision_date_author );
2008-05-30 00:21:36 +02:00
elseif ( wp_is_post_autosave ( $revision ) )
2013-02-28 16:14:34 +01:00
$revision_date_author = sprintf ( $autosavef , $revision_date_author );
2008-05-08 19:25:07 +02:00
2013-02-28 16:14:34 +01:00
return $revision_date_author ;
2008-04-19 01:38:21 +02:00
}
/**
2008-10-14 00:28:34 +02:00
* Display list of a post ' s revisions .
2008-04-19 01:38:21 +02:00
*
2008-10-14 00:28:34 +02:00
* Can output either a UL with edit links or a TABLE with diff interface , and
* restore action links .
2008-04-19 01:38:21 +02:00
*
2008-10-14 00:28:34 +02:00
* @ since 2.6 . 0
2008-04-19 01:38:21 +02:00
*
* @ uses wp_get_post_revisions ()
2013-05-01 05:11:44 +02:00
* @ uses wp_post_revision_title_expanded ()
2008-04-19 01:38:21 +02:00
* @ uses get_edit_post_link ()
2009-05-17 00:32:48 +02:00
* @ uses get_the_author_meta ()
2008-04-19 01:38:21 +02:00
*
2014-03-08 20:32:16 +01:00
* @ param int | WP_Post $post_id Optional . Post ID or post object .
2013-05-04 14:54:00 +02:00
* @ param string $type 'all' ( default ), 'revision' or 'autosave'
2008-10-14 00:28:34 +02:00
* @ return null
2008-04-19 01:38:21 +02:00
*/
2013-05-04 14:54:00 +02:00
function wp_list_post_revisions ( $post_id = 0 , $type = 'all' ) {
if ( ! $post = get_post ( $post_id ) )
2008-04-19 01:38:21 +02:00
return ;
2013-05-04 14:54:00 +02: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-19 01:38:21 +02:00
2013-05-04 14:54:00 +02:00
if ( ! $revisions = wp_get_post_revisions ( $post -> ID ) )
2013-03-28 01:56:44 +01:00
return ;
2008-05-30 00:21:36 +02:00
2013-05-01 05:11:44 +02:00
$rows = '' ;
2008-04-19 01:38:21 +02:00
foreach ( $revisions as $revision ) {
2013-05-04 14:54:00 +02:00
if ( ! current_user_can ( 'read_post' , $revision -> ID ) )
2008-05-09 17:59:17 +02:00
continue ;
2013-03-29 21:50:09 +01:00
2013-03-28 01:56:44 +01:00
$is_autosave = wp_is_post_autosave ( $revision );
if ( ( 'revision' === $type && $is_autosave ) || ( 'autosave' === $type && ! $is_autosave ) )
2008-05-30 00:21:36 +02:00
continue ;
2008-05-09 17:59:17 +02:00
2013-05-01 05:11:44 +02:00
$rows .= " \t <li> " . wp_post_revision_title_expanded ( $revision ) . " </li> \n " ;
2008-04-19 01:38:21 +02:00
}
2013-07-05 17:04:24 +02: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 14:54:00 +02:00
echo $rows ;
2013-08-31 03:33:09 +02:00
echo " </ul> " ;
2008-04-19 01:38:21 +02:00
}