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
* @ uses $id
*/
2004-01-27 04:58:01 -05:00
function the_ID () {
2004-02-16 23:56:29 -05:00
global $id ;
echo $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
* @ uses $id
*
* @ return unknown
*/
2006-03-16 20:16:22 -05:00
function get_the_ID () {
global $id ;
return $id ;
}
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 = '' ) {
$title = get_the_title ();
if ( strlen ( $title ) == 0 )
return ;
$defaults = array ( 'before' => '' , 'after' => '' , 'echo' => true );
$r = wp_parse_args ( $args , $defaults );
extract ( $r , EXTR_SKIP );
$title = $before . $title . $after ;
2009-05-05 15:43:53 -04:00
$title = esc_attr ( strip_tags ( $title ));
2007-09-18 18:50:59 -04:00
if ( $echo )
echo $title ;
else
return $title ;
}
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
*
2008-10-21 23:06:53 -04:00
* @ param int $id Optional . Post ID .
* @ return string
2008-09-04 19:12:08 -04:00
*/
2007-06-25 13:48:35 -04:00
function get_the_title ( $id = 0 ) {
2005-03-27 15:45:01 -05:00
$post = & get_post ( $id );
2009-12-27 03:57:33 -05:00
$title = isset ( $post -> post_title ) ? $post -> post_title : '' ;
$id = isset ( $post -> ID ) ? $post -> ID : ( int ) $id ;
2005-03-27 15:45:01 -05:00
2008-03-19 17:33:47 -04:00
if ( ! is_admin () ) {
2009-04-28 13:36:10 -04:00
if ( ! empty ( $post -> post_password ) ) {
$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 ) {
$private_title_format = apply_filters ( 'private_title_format' , __ ( 'Private: %s' ));
$title = sprintf ( $private_title_format , $title );
}
2008-03-19 17:33:47 -04:00
}
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 .
2008-09-04 19:12:08 -04:00
*
* @ since 1.5 . 0
*
2008-10-21 23:06:53 -04:00
* @ param int $id Optional . Post ID .
2008-09-04 19:12:08 -04:00
*/
2006-06-07 19:17:59 -04:00
function the_guid ( $id = 0 ) {
echo get_the_guid ( $id );
}
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
*
2008-10-21 23:06:53 -04:00
* @ param int $id Optional . Post ID .
* @ return string
2008-09-04 19:12:08 -04:00
*/
2005-01-07 17:01:59 -05:00
function get_the_guid ( $id = 0 ) {
2005-03-27 15:45:01 -05:00
$post = & get_post ( $id );
2005-10-18 18:42:02 -04:00
2005-03-27 15:45:01 -05:00
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 .
* @ param string $stripteaser Optional . Teaser content before the more text .
2008-09-04 19:12:08 -04:00
*/
2009-10-25 16:44:35 -04:00
function the_content ( $more_link_text = null , $stripteaser = 0 ) {
$content = get_the_content ( $more_link_text , $stripteaser );
2005-10-18 18:42:02 -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 .
* @ param string $stripteaser Optional . Teaser content before the more text .
* @ return string
2008-09-04 19:12:08 -04:00
*/
2009-10-25 16:44:35 -04:00
function get_the_content ( $more_link_text = null , $stripteaser = 0 ) {
2010-02-19 21:01:46 -05:00
global $id , $post , $more , $page , $pages , $multipage , $preview ;
2007-12-06 14:49:33 -05:00
2008-11-20 13:20:25 -05:00
if ( null === $more_link_text )
2008-08-09 01:36:14 -04:00
$more_link_text = __ ( '(more...)' );
2008-08-05 02:40:44 -04:00
2005-10-18 18:42:02 -04:00
$output = '' ;
2009-04-16 15:43:01 -04:00
$hasTeaser = 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.
if ( post_password_required ( $post ) ) {
2008-09-03 15:54:14 -04:00
$output = get_the_password_form ();
return $output ;
2005-10-18 18:42:02 -04:00
}
2006-08-18 04:36:11 -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
2005-10-18 18:42:02 -04:00
$content = $pages [ $page - 1 ];
2007-04-11 18:47:36 -04:00
if ( preg_match ( '/<!--more(.*?)?-->/' , $content , $matches ) ) {
2006-08-01 00:54:23 -04:00
$content = explode ( $matches [ 0 ], $content , 2 );
2006-09-11 19:59:00 -04:00
if ( ! empty ( $matches [ 1 ]) && ! empty ( $more_link_text ) )
2006-08-01 00:54:23 -04:00
$more_link_text = strip_tags ( wp_kses_no_null ( trim ( $matches [ 1 ])));
2009-04-16 15:43:01 -04:00
$hasTeaser = true ;
2006-08-01 09:53:04 -04:00
} else {
$content = array ( $content );
2006-08-01 00:54:23 -04:00
}
2006-04-25 04:46:19 -04:00
if ( ( false !== strpos ( $post -> post_content , '<!--noteaser-->' ) && (( ! $multipage ) || ( $page == 1 ))) )
2005-10-18 18:42:02 -04:00
$stripteaser = 1 ;
$teaser = $content [ 0 ];
2009-04-16 15:43:01 -04:00
if ( ( $more ) && ( $stripteaser ) && ( $hasTeaser ) )
2005-10-18 18:42:02 -04:00
$teaser = '' ;
$output .= $teaser ;
if ( count ( $content ) > 1 ) {
2006-09-11 19:59:00 -04:00
if ( $more ) {
2009-05-12 02:38:59 -04:00
$output .= '<span id="more-' . $id . '"></span>' . $content [ 1 ];
2006-09-11 19:59:00 -04:00
} else {
if ( ! empty ( $more_link_text ) )
2009-05-12 02:38:59 -04:00
$output .= apply_filters ( 'the_content_more_link' , ' <a href="' . get_permalink () . " #more- $id\ " class = \ " more-link \" > $more_link_text </a> " , $more_link_text );
2009-05-19 12:03:11 -04:00
$output = force_balance_tags ( $output );
2006-09-11 19:59:00 -04:00
}
2007-02-27 10:24:54 -05:00
2005-10-18 18:42:02 -04:00
}
if ( $preview ) // preview fix for javascript bug with foreign languages
2009-01-09 14:29:35 -05:00
$output = preg_replace_callback ( '/\%u([0-9A-F]{4})/' , create_function ( '$match' , 'return "&#" . base_convert($match[1], 16, 10) . ";";' ), $output );
2005-10-18 18:42:02 -04:00
return $output ;
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 excerpt .
2008-09-04 19:12:08 -04:00
*
* @ since 0.71
2008-10-21 23:06:53 -04:00
* @ uses apply_filters () Calls 'the_excerpt' hook on post excerpt .
2008-09-04 19:12:08 -04:00
*/
2004-01-27 04:58:01 -05:00
function the_excerpt () {
2005-02-14 19:21:21 -05:00
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
2007-12-06 14:49:33 -05:00
global $post ;
2005-02-14 19:21:21 -05:00
$output = $post -> post_excerpt ;
2008-09-03 15:54:14 -04:00
if ( post_password_required ( $post ) ) {
$output = __ ( 'There is no excerpt because this is a protected post.' );
return $output ;
2005-02-14 19:21:21 -05:00
}
2004-02-22 09:39:04 -05:00
2005-02-14 19:21:21 -05:00
return apply_filters ( 'get_the_excerpt' , $output );
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
*
2008-10-21 23:06:53 -04:00
* @ param int $id Optional . Post ID .
* @ return bool
2008-09-04 19:12:08 -04:00
*/
2007-04-22 00:25:47 -04:00
function has_excerpt ( $id = 0 ) {
$post = & get_post ( $id );
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 .
2008-10-13 18:28:34 -04:00
* @ param int $post_id An optional post ID .
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
*
2008-10-21 23:06:53 -04:00
* The class names are add are many . If the post is a sticky , then the 'sticky'
* class name . The class ' hentry ' is always added to each post . For each
* 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 .
* @ param int $post_id An optional post ID .
* @ 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 ;
2008-08-13 17:58:06 -04:00
$classes [] = $post -> post_type ;
2010-02-23 18:32:17 -05:00
$classes [] = 'type-' . $post -> post_type ;
2008-08-13 15:09:08 -04:00
2008-08-13 17:59:52 -04:00
// sticky for Sticky Posts
2008-09-08 14:56:13 -04:00
if ( is_sticky ( $post -> ID ) && is_home ())
2008-08-13 17:58:06 -04:00
$classes [] = 'sticky' ;
2008-08-13 15:09:08 -04:00
2008-08-13 17:58:06 -04:00
// hentry for hAtom compliace
$classes [] = 'hentry' ;
2008-08-13 15:09:08 -04:00
2008-08-13 17:58:06 -04:00
// Categories
foreach ( ( array ) get_the_category ( $post -> ID ) as $cat ) {
2009-05-22 13:44:26 -04:00
if ( empty ( $cat -> slug ) )
2008-08-13 17:58:06 -04:00
continue ;
2009-05-22 17:31:42 -04:00
$classes [] = 'category-' . sanitize_html_class ( $cat -> slug , $cat -> cat_ID );
2008-08-13 17:58:06 -04:00
}
// Tags
foreach ( ( array ) get_the_tags ( $post -> ID ) as $tag ) {
2009-05-22 13:44:26 -04:00
if ( empty ( $tag -> slug ) )
2008-08-13 17:58:06 -04:00
continue ;
2009-05-22 17:31:42 -04:00
$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 );
2008-08-13 19:26:14 -04:00
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
2009-02-02 14:21:38 -05:00
if ( 'rtl' == get_bloginfo ( 'text_direction' ) )
$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' ;
if ( is_search () )
$classes [] = 'search' ;
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' ;
$classes [] = 'single-' . sanitize_html_class ( $post -> post_type , $post_id );
$classes [] = 'postid-' . $post_id ;
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 ;
2009-05-12 13:11:57 -04:00
$classes [] = 'attachment-' . str_replace ( $mime_prefix , '' , $mime_type );
2009-02-02 14:21:38 -05:00
}
} elseif ( is_archive () ) {
if ( is_author () ) {
$author = $wp_query -> get_queried_object ();
$classes [] = 'author' ;
2009-10-01 13:52:01 -04:00
$classes [] = 'author-' . sanitize_html_class ( $author -> user_nicename , $author -> ID );
2009-02-02 14:21:38 -05:00
} elseif ( is_category () ) {
$cat = $wp_query -> get_queried_object ();
$classes [] = 'category' ;
2009-05-22 17:31:42 -04:00
$classes [] = 'category-' . sanitize_html_class ( $cat -> slug , $cat -> cat_ID );
2009-02-02 14:21:38 -05:00
} elseif ( is_tag () ) {
$tags = $wp_query -> get_queried_object ();
$classes [] = 'tag' ;
2009-05-22 17:31:42 -04:00
$classes [] = 'tag-' . sanitize_html_class ( $tags -> slug , $tags -> 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
2010-02-08 17:05:05 -05:00
$post = get_page ( $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' ;
2010-02-08 17:05:05 -05:00
$classes [] = 'page-template-' . sanitize_html_class ( str_replace ( '.' , '-' , get_post_meta ( $page_id , '_wp_page_template' , true ) ), '' );
2009-06-14 20:28:52 -04:00
}
2009-02-02 14:21:38 -05:00
} elseif ( is_search () ) {
2009-04-06 11:42:12 -04:00
if ( ! empty ( $wp_query -> posts ) )
2009-02-02 14:21:38 -05:00
$classes [] = 'search-results' ;
else
$classes [] = 'search-no-results' ;
}
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
2009-02-02 14:21:38 -05:00
$page = $wp_query -> get ( 'page' );
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
if ( ! $page || $page < 2 )
$page = $wp_query -> get ( 'paged' );
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
if ( $page && $page > 1 ) {
$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 ;
}
2009-03-17 22:43:45 -04:00
2009-02-02 14:21:38 -05:00
if ( ! empty ( $class ) ) {
if ( ! is_array ( $class ) )
$class = preg_split ( '#\s+#' , $class );
$classes = array_merge ( $classes , $class );
}
2009-03-17 22:43:45 -04:00
2009-08-18 12:05:07 -04:00
$classes = array_map ( 'esc_attr' , $classes );
2009-02-02 14:21:38 -05:00
return apply_filters ( 'body_class' , $classes , $class );
}
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
*
* @ param int | object $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 );
if ( empty ( $post -> post_password ) )
return false ;
if ( ! isset ( $_COOKIE [ 'wp-postpass_' . COOKIEHASH ]) )
return true ;
if ( $_COOKIE [ 'wp-postpass_' . COOKIEHASH ] != $post -> post_password )
return true ;
return false ;
}
2008-08-13 14:21:52 -04:00
/**
2008-10-13 18:28:34 -04:00
* Display " sticky " CSS class , if a post is sticky .
2008-08-13 14:21:52 -04:00
*
2008-10-13 18:28:34 -04:00
* @ since 2.7 . 0
2008-08-13 14:21:52 -04:00
*
2008-10-21 23:06:53 -04:00
* @ param int $post_id An optional post ID .
2008-08-13 14:21:52 -04:00
*/
function sticky_class ( $post_id = null ) {
if ( ! is_sticky ( $post_id ) )
return ;
echo " sticky " ;
}
2008-09-04 19:12:08 -04:00
/**
2008-10-16 15:13:30 -04:00
* Page Template Functions for usage in Themes
2008-09-04 19:12:08 -04:00
*
2008-10-16 15:13:30 -04:00
* @ package WordPress
* @ subpackage Template
*/
/**
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
* 'next_or_number' - Default is 'number' ( string ) . Indicates whether page
* numbers should be used . Valid values are number and next .
2008-10-16 15:13:30 -04:00
* 'nextpagelink' - Default is 'Next Page' ( string ) . Text for link to next page .
2008-10-21 23:06:53 -04:00
* 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 .
* '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
2008-10-21 23:06:53 -04:00
* Pages link inside the < a > tag .
2008-10-16 15:13:30 -04:00
* 'link_after' - Default is '' ( string ) . The html or text to append to each
2008-10-21 23:06:53 -04:00
* Pages link inside the < a > tag .
2008-09-04 19:12:08 -04:00
*
* @ since 1.2 . 0
2008-10-16 15:13:30 -04:00
* @ access private
2008-09-04 19:12:08 -04:00
*
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
*/
2004-04-24 15:23:57 -04:00
function wp_link_pages ( $args = '' ) {
2007-05-10 23:10:05 -04:00
$defaults = array (
2007-09-03 19:32:58 -04:00
'before' => '<p>' . __ ( 'Pages:' ), 'after' => '</p>' ,
2008-10-16 15:13:30 -04:00
'link_before' => '' , 'link_after' => '' ,
2007-09-03 19:32:58 -04:00
'next_or_number' => 'number' , 'nextpagelink' => __ ( 'Next page' ),
'previouspagelink' => __ ( 'Previous page' ), 'pagelink' => '%' ,
2009-10-25 16:44:35 -04:00
'echo' => 1
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 );
2007-06-14 18:45:40 -04:00
extract ( $r , EXTR_SKIP );
2007-05-10 23:10:05 -04:00
2007-12-06 14:49:33 -05:00
global $post , $page , $numpages , $multipage , $more , $pagenow ;
2006-08-30 17:00:37 -04:00
$output = '' ;
2005-10-18 18:42:02 -04:00
if ( $multipage ) {
if ( 'number' == $next_or_number ) {
2006-08-30 17:00:37 -04:00
$output .= $before ;
2005-10-18 18:42:02 -04:00
for ( $i = 1 ; $i < ( $numpages + 1 ); $i = $i + 1 ) {
2009-12-23 10:16:53 -05:00
$j = str_replace ( '%' , $i , $pagelink );
2006-08-30 17:00:37 -04:00
$output .= ' ' ;
2005-10-18 18:42:02 -04:00
if ( ( $i != $page ) || (( ! $more ) && ( $page == 1 )) ) {
2007-03-10 01:09:52 -05:00
if ( 1 == $i ) {
$output .= '<a href="' . get_permalink () . '">' ;
2007-03-10 00:54:12 -05:00
} else {
2007-06-14 12:24:28 -04:00
if ( '' == get_option ( 'permalink_structure' ) || in_array ( $post -> post_status , array ( 'draft' , 'pending' )) )
2007-03-10 01:09:52 -05:00
$output .= '<a href="' . get_permalink () . '&page=' . $i . '">' ;
2007-03-10 00:54:12 -05:00
else
2007-03-10 01:18:43 -05:00
$output .= '<a href="' . trailingslashit ( get_permalink ()) . user_trailingslashit ( $i , 'single_paged' ) . '">' ;
2007-03-10 00:54:12 -05:00
}
2008-12-07 07:14:14 -05:00
2005-10-18 18:42:02 -04:00
}
2008-10-16 15:13:30 -04:00
$output .= $link_before ;
2006-08-30 17:00:37 -04:00
$output .= $j ;
2008-10-16 15:13:30 -04:00
$output .= $link_after ;
2005-10-18 18:42:02 -04:00
if ( ( $i != $page ) || (( ! $more ) && ( $page == 1 )) )
2006-08-30 17:00:37 -04:00
$output .= '</a>' ;
2005-10-18 18:42:02 -04:00
}
2006-08-30 17:00:37 -04:00
$output .= $after ;
2005-10-18 18:42:02 -04:00
} else {
if ( $more ) {
2006-08-30 17:00:37 -04:00
$output .= $before ;
2005-10-18 18:42:02 -04:00
$i = $page - 1 ;
if ( $i && $more ) {
2007-03-10 01:09:52 -05:00
if ( 1 == $i ) {
2008-10-16 15:13:30 -04:00
$output .= '<a href="' . get_permalink () . '">' . $link_before . $previouspagelink . $link_after . '</a>' ;
2007-03-10 01:09:52 -05:00
} else {
2007-06-14 12:24:28 -04:00
if ( '' == get_option ( 'permalink_structure' ) || in_array ( $post -> post_status , array ( 'draft' , 'pending' )) )
2008-10-16 15:13:30 -04:00
$output .= '<a href="' . get_permalink () . '&page=' . $i . '">' . $link_before . $previouspagelink . $link_after . '</a>' ;
2007-03-10 01:09:52 -05:00
else
2008-10-16 15:13:30 -04:00
$output .= '<a href="' . trailingslashit ( get_permalink ()) . user_trailingslashit ( $i , 'single_paged' ) . '">' . $link_before . $previouspagelink . $link_after . '</a>' ;
2007-03-10 01:09:52 -05:00
}
2005-10-18 18:42:02 -04:00
}
$i = $page + 1 ;
if ( $i <= $numpages && $more ) {
2007-03-10 01:09:52 -05:00
if ( 1 == $i ) {
2008-10-16 15:13:30 -04:00
$output .= '<a href="' . get_permalink () . '">' . $link_before . $nextpagelink . $link_after . '</a>' ;
2007-03-10 01:09:52 -05:00
} else {
2007-06-14 12:24:28 -04:00
if ( '' == get_option ( 'permalink_structure' ) || in_array ( $post -> post_status , array ( 'draft' , 'pending' )) )
2008-10-16 15:13:30 -04:00
$output .= '<a href="' . get_permalink () . '&page=' . $i . '">' . $link_before . $nextpagelink . $link_after . '</a>' ;
2007-03-10 01:09:52 -05:00
else
2008-10-16 15:13:30 -04:00
$output .= '<a href="' . trailingslashit ( get_permalink ()) . user_trailingslashit ( $i , 'single_paged' ) . '">' . $link_before . $nextpagelink . $link_after . '</a>' ;
2007-03-10 01:09:52 -05:00
}
2005-10-18 18:42:02 -04:00
}
2006-08-30 17:00:37 -04:00
$output .= $after ;
2005-10-18 18:42:02 -04:00
}
}
}
2006-08-30 17:00:37 -04:00
if ( $echo )
echo $output ;
return $output ;
2004-01-27 04:58:01 -05: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 .
* @ return string | array Array of values or single value , if only one element exists .
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
2006-01-25 02:38:43 -05:00
if ( 1 == count ( $custom [ $key ]) )
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 );
if ( '_' == $keyt { 0 } )
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 , ', ' );
2007-04-11 01:38:30 -04:00
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
*/
2006-02-27 22:57:08 -05: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 );
2007-06-14 18:45:40 -04:00
extract ( $r , EXTR_SKIP );
2006-02-27 22:57:08 -05:00
2006-03-02 00:47:59 -05:00
$pages = get_pages ( $r );
2006-02-27 22:57:08 -05:00
$output = '' ;
2009-08-18 12:05:07 -04:00
$name = esc_attr ( $name );
2010-01-27 16:29:07 -05:00
// Back-compat with old system where both id and name were based on $name argument
if ( empty ( $id ) )
$id = $name ;
2006-02-27 22:57:08 -05:00
if ( ! empty ( $pages ) ) {
2010-01-27 16:29:07 -05:00
$output = " <select name= \" $name\ " id = \ " $id\ " > \n " ;
2008-12-05 13:03:24 -05:00
if ( $show_option_no_change )
2008-12-05 14:19:24 -05:00
$output .= " \t <option value= \" -1 \" > $show_option_no_change </option> " ;
2006-06-07 19:27:25 -04:00
if ( $show_option_none )
2009-05-05 15:43:53 -04:00
$output .= " \t <option value= \" " . esc_attr ( $option_none_value ) . " \" > $show_option_none </option> \n " ;
2006-04-13 00:40:48 -04:00
$output .= walk_page_dropdown_tree ( $pages , $depth , $r );
2006-02-27 22:57:08 -05:00
$output .= " </select> \n " ;
}
$output = apply_filters ( 'wp_dropdown_pages' , $output );
if ( $echo )
echo $output ;
return $output ;
}
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
*
2008-10-13 18:28:34 -04:00
* @ param array | string $args Optional . Override default arguments .
2008-10-21 23:06:53 -04:00
* @ return string HTML content , if not displaying .
2008-09-04 19:12:08 -04:00
*/
2004-12-30 14:41:14 -05: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' => '' ,
'date_format' => get_option ( 'date_format' ),
'child_of' => 0 , 'exclude' => '' ,
'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 );
2007-06-14 18:45:40 -04:00
extract ( $r , EXTR_SKIP );
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
2009-01-29 12:46:31 -05: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)
$exclude_array = ( $r [ 'exclude' ] ) ? explode ( ',' , $r [ 'exclude' ]) : array ();
$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 ;
2006-03-02 00:47:59 -05:00
$pages = get_pages ( $r );
2005-10-18 18:42:02 -04:00
2006-02-27 22:57:08 -05:00
if ( ! empty ( $pages ) ) {
2005-10-18 18:42:02 -04:00
if ( $r [ 'title_li' ] )
$output .= '<li class="pagenav">' . $r [ 'title_li' ] . '<ul>' ;
2006-02-27 22:57:08 -05:00
global $wp_query ;
2009-04-16 13:37:58 -04:00
if ( is_page () || is_attachment () || $wp_query -> is_posts_page )
2007-02-02 11:38:26 -05:00
$current_page = $wp_query -> get_queried_object_id ();
2007-01-11 22:54:22 -05:00
$output .= walk_page_tree ( $pages , $r [ 'depth' ], $current_page , $r );
2004-12-30 14:41:14 -05:00
2005-10-18 18:42:02 -04:00
if ( $r [ 'title_li' ] )
$output .= '</ul></li>' ;
2004-12-16 03:02:53 -05:00
}
2005-10-18 18:42:02 -04:00
2009-09-15 11:40:17 -04:00
$output = apply_filters ( 'wp_list_pages' , $output , $r );
2005-10-18 18:42:02 -04:00
2005-04-20 20:49:15 -04:00
if ( $r [ 'echo' ] )
echo $output ;
2005-10-18 18:42:02 -04:00
else
2005-04-20 20:49:15 -04:00
return $output ;
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
* to page title . Use column for posts table .</ li >
* < 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
*/
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 );
$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
2008-11-22 05:39:58 -05:00
if ( isset ( $args [ 'show_home' ]) && ! 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"' ;
2010-01-04 12:23:29 -05:00
$menu .= '<li ' . $class . '><a href="' . home_url () . '" title="' . esc_attr ( $text ) . '">' . $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 " ;
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' ];
2008-11-21 12:17:18 -05:00
$args = array ( $pages , $depth , $r , $current_page );
2006-06-07 19:17:59 -04:00
return call_user_func_array ( array ( & $walker , 'walk' ), $args );
}
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' ];
2006-06-07 19:17:59 -04:00
return call_user_func_array ( array ( & $walker , 'walk' ), $args );
}
//
// 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
*
2008-10-21 23:06:53 -04:00
* @ param int $id Optional . Post ID .
* @ 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
*
2008-10-21 23:06:53 -04:00
* @ param int $id Optional . Post ID .
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 .
2009-02-04 10:12:24 -05:00
* @ param string $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
*/
2009-02-04 10:12:24 -05:00
function wp_get_attachment_link ( $id = 0 , $size = 'thumbnail' , $permalink = false , $icon = false , $text = false ) {
2008-04-20 02:45:13 -04:00
$id = intval ( $id );
$_post = & get_post ( $id );
2008-03-03 23:21:37 -05:00
if ( ( 'attachment' != $_post -> post_type ) || ! $url = wp_get_attachment_url ( $_post -> ID ) )
return __ ( 'Missing Attachment' );
if ( $permalink )
$url = get_attachment_link ( $_post -> ID );
2009-05-05 15:43:53 -04:00
$post_title = esc_attr ( $_post -> post_title );
2009-03-17 22:43:45 -04:00
2009-02-04 10:12:24 -05:00
if ( $text ) {
2009-05-05 15:43:53 -04:00
$link_text = esc_attr ( $text );
2009-02-04 10:12:24 -05:00
} elseif ( ( is_int ( $size ) && $size != 0 ) or ( is_string ( $size ) && $size != 'none' ) or $size != false ) {
$link_text = wp_get_attachment_image ( $id , $size , $icon );
2010-02-13 06:12:47 -05:00
} else {
$link_text = '' ;
2009-02-04 10:12:24 -05:00
}
2009-02-06 21:58:21 -05:00
if ( trim ( $link_text ) == '' )
$link_text = $_post -> post_title ;
2009-03-17 22:43:45 -04:00
2009-02-06 21:58:21 -05:00
return apply_filters ( 'wp_get_attachment_link' , " <a href=' $url ' title=' $post_title '> $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
* @ uses apply_filters () Calls 'prepend_attachment' hook on HTML content .
2008-09-04 19:12:08 -04:00
*
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 ) {
2008-03-23 13:02:11 -04:00
global $post ;
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
2005-12-13 14:19:56 -05:00
$p = '<p class="attachment">' ;
2008-03-03 23:21:37 -05:00
// 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 );
2005-10-20 16:48:32 -04:00
$p .= '</p>' ;
2005-12-13 14:19:56 -05:00
$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 .
2008-09-04 19:12:08 -04:00
*
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
*/
2006-06-07 19:17:59 -04:00
function get_the_password_form () {
2008-01-31 16:47:35 -05:00
global $post ;
$label = 'pwbox-' . ( empty ( $post -> ID ) ? rand () : $post -> ID );
2006-08-30 17:46:31 -04:00
$output = '<form action="' . get_option ( 'siteurl' ) . ' / wp - pass . php " method= " post " >
2006-06-07 19:17:59 -04:00
< p > ' . __("This post is password protected. To view it please enter your password below:") . ' </ p >
2009-05-05 15:43:53 -04: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 >
2006-06-07 19:17:59 -04:00
</ form >
' ;
2008-09-18 02:24:45 -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
*
2008-10-13 18:28:34 -04:00
* This template tag allows you to determine whether or not you are in a page
* template . You can optional provide a template name and then the check will be
* 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 .
* @ return bool False on failure , true if success .
2007-10-12 16:01:16 -04:00
*/
function is_page_template ( $template = '' ) {
if ( ! is_page ()) {
return false ;
}
global $wp_query ;
$page = $wp_query -> get_queried_object ();
$custom_fields = get_post_custom_values ( '_wp_page_template' , $page -> ID );
$page_template = $custom_fields [ 0 ];
// We have no argument passed so just see if a page_template has been specified
if ( empty ( $template ) ) {
if ( ! empty ( $page_template ) ) {
return true ;
}
} elseif ( $template == $page_template ) {
return true ;
}
return false ;
}
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
*
* @ package WordPress
2008-10-13 18:28:34 -04:00
* @ subpackage Post_Revisions
* @ 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 ;
2009-03-12 23:53:39 -04:00
/* translators: revision date format, see http://php.net/date */
$datef = _x ( 'j F, Y @ G:i' , 'revision date format' );
/* translators: 1: date */
$autosavef = __ ( '%1$s [Autosave]' );
/* translators: 1: date */
$currentf = __ ( '%1$s [Current Revision]' );
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> " ;
2008-05-29 18:21:36 -04:00
if ( ! wp_is_post_revision ( $revision ) )
2008-05-08 13:25:07 -04:00
$date = sprintf ( $currentf , $date );
2008-05-29 18:21:36 -04:00
elseif ( wp_is_post_autosave ( $revision ) )
2008-05-08 13:25:07 -04:00
$date = sprintf ( $autosavef , $date );
return $date ;
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
*
* Second argument controls parameters :
2008-10-13 18:28:34 -04:00
* ( bool ) parent : include the parent ( the " Current Revision " ) in the list .
* ( string ) format : 'list' or 'form-table' . 'list' outputs UL , 'form-table'
* outputs TABLE with UI .
* ( int ) right : what revision is currently being viewed - used in
* form - table format .
* ( int ) left : what revision is currently being diffed against right -
* used in form - table format .
2008-04-18 19:38:21 -04:00
*
* @ package WordPress
2008-10-13 18:28:34 -04:00
* @ subpackage Post_Revisions
* @ since 2.6 . 0
2008-04-18 19:38:21 -04:00
*
* @ uses wp_get_post_revisions ()
2008-05-08 13:25:07 -04:00
* @ uses wp_post_revision_title ()
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
*
2008-10-13 18:28:34 -04:00
* @ todo split into two functions ( list , form - table ) ?
*
* @ param int | object $post_id Post ID or post object .
* @ param string | array $args See description { @ link wp_parse_args ()} .
* @ return null
2008-04-18 19:38:21 -04:00
*/
2008-10-13 18:28:34 -04:00
function wp_list_post_revisions ( $post_id = 0 , $args = null ) {
2008-04-18 19:38:21 -04:00
if ( ! $post = get_post ( $post_id ) )
return ;
2008-05-29 18:21:36 -04:00
$defaults = array ( 'parent' => false , 'right' => false , 'left' => false , 'format' => 'list' , 'type' => 'all' );
2008-04-18 19:38:21 -04:00
extract ( wp_parse_args ( $args , $defaults ), EXTR_SKIP );
2008-05-29 18:21:36 -04:00
switch ( $type ) {
2010-01-18 06:44:51 -05:00
case 'autosave' :
if ( ! $autosave = wp_get_post_autosave ( $post -> ID ) )
return ;
$revisions = array ( $autosave );
break ;
case 'revision' : // just revisions - remove autosave later
case 'all' :
default :
if ( ! $revisions = wp_get_post_revisions ( $post -> ID ) )
return ;
break ;
2008-05-29 18:21:36 -04:00
}
2009-03-12 23:53:39 -04:00
/* translators: post revision: 1: when, 2: author name */
$titlef = _x ( '%1$s by %2$s' , 'post revision' );
2008-04-18 19:38:21 -04:00
if ( $parent )
array_unshift ( $revisions , $post );
$rows = '' ;
$class = false ;
2008-05-09 11:59:17 -04:00
$can_edit_post = current_user_can ( 'edit_post' , $post -> ID );
2008-04-18 19:38:21 -04:00
foreach ( $revisions as $revision ) {
2008-05-09 11:59:17 -04:00
if ( ! current_user_can ( 'read_post' , $revision -> ID ) )
continue ;
2008-05-29 18:21:36 -04:00
if ( 'revision' === $type && wp_is_post_autosave ( $revision ) )
continue ;
2008-05-09 11:59:17 -04:00
2008-05-08 13:25:07 -04:00
$date = wp_post_revision_title ( $revision );
2009-05-16 18:32:48 -04:00
$name = get_the_author_meta ( 'display_name' , $revision -> post_author );
2008-04-18 19:38:21 -04:00
if ( 'form-table' == $format ) {
if ( $left )
2008-05-08 13:25:07 -04:00
$left_checked = $left == $revision -> ID ? ' checked="checked"' : '' ;
2008-04-18 19:38:21 -04:00
else
2008-05-08 13:25:07 -04:00
$left_checked = $right_checked ? ' checked="checked"' : '' ; // [sic] (the next one)
$right_checked = $right == $revision -> ID ? ' checked="checked"' : '' ;
2008-04-18 19:38:21 -04:00
$class = $class ? '' : " class='alternate' " ;
2008-05-09 11:59:17 -04:00
if ( $post -> ID != $revision -> ID && $can_edit_post )
2008-05-08 13:25:07 -04:00
$actions = '<a href="' . wp_nonce_url ( add_query_arg ( array ( 'revision' => $revision -> ID , 'diff' => false , 'action' => 'restore' ) ), " restore-post_ $post->ID | $revision->ID " ) . '">' . __ ( 'Restore' ) . '</a>' ;
2008-04-18 19:38:21 -04:00
else
$actions = '' ;
$rows .= " <tr $class > \n " ;
2009-12-23 04:15:13 -05:00
$rows .= " \t <th style='white-space: nowrap' scope='row'><input type='radio' name='left' value=' $revision->ID ' $left_checked /> \n " ;
$rows .= " \t <th style='white-space: nowrap' scope='row'><input type='radio' name='right' value=' $revision->ID ' $right_checked /></th> \n " ;
2008-04-18 19:38:21 -04:00
$rows .= " \t <td> $date </td> \n " ;
$rows .= " \t <td> $name </td> \n " ;
$rows .= " \t <td class='action-links'> $actions </td> \n " ;
$rows .= " </tr> \n " ;
} else {
2008-05-08 13:25:07 -04:00
$title = sprintf ( $titlef , $date , $name );
$rows .= " \t <li> $title </li> \n " ;
2008-04-18 19:38:21 -04:00
}
}
if ( 'form-table' == $format ) : ?>
< form action = " revision.php " method = " get " >
< div class = " tablenav " >
< div class = " alignleft " >
2009-05-05 15:43:53 -04:00
< input type = " submit " class = " button-secondary " value = " <?php esc_attr_e( 'Compare Revisions' ); ?> " />
2008-05-08 13:25:07 -04:00
< input type = " hidden " name = " action " value = " diff " />
2010-01-18 06:44:51 -05:00
< input type = " hidden " name = " post_type " value = " <?php echo esc_attr( $GLOBALS['post_type'] ); ?> " />
2008-04-18 19:38:21 -04:00
</ div >
</ div >
< br class = " clear " />
2009-12-23 04:15:13 -05:00
< table class = " widefat post-revisions " cellspacing = " 0 " id = " post-revisions " >
< col />
2008-04-18 19:38:21 -04:00
< col />
< col style = " width: 33% " />
< col style = " width: 33% " />
< col style = " width: 33% " />
< thead >
2008-05-29 19:16:11 -04:00
< tr >
2009-12-23 04:15:13 -05:00
< th scope = " col " >< ? php _e ( 'Old' ); ?> </th>
< th scope = " col " >< ? php _e ( 'New' ); ?> </th>
2008-04-18 19:38:21 -04:00
< th scope = " col " >< ? php _e ( 'Date Created' ); ?> </th>
< th scope = " col " >< ? php _e ( 'Author' ); ?> </th>
< th scope = " col " class = " action-links " >< ? php _e ( 'Actions' ); ?> </th>
2008-05-29 19:16:11 -04:00
</ tr >
2008-04-18 19:38:21 -04:00
</ thead >
< tbody >
< ? php echo $rows ; ?>
</ tbody >
</ table >
2008-05-29 19:16:11 -04:00
</ form >
2008-04-18 19:38:21 -04:00
< ? php
else :
echo " <ul class='post-revisions'> \n " ;
echo $rows ;
echo " </ul> " ;
endif ;
}