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