2004-01-27 10:58:01 +01:00
< ? php
2007-12-17 00:47:58 +01:00
/**
* Author Template functions for use in themes .
*
2008-05-25 17:45:05 +02:00
* These functions must be used within the WordPress Loop .
*
* @ link http :// codex . wordpress . org / Author_Templates
*
2007-12-17 00:47:58 +01:00
* @ package WordPress
* @ subpackage Template
*/
2005-06-13 01:22:06 +02:00
2007-06-02 05:04:01 +02:00
/**
2008-05-25 17:45:05 +02:00
* Retrieve the author of the current post .
2007-12-17 00:47:58 +01:00
*
* @ since 1.5
* @ uses $authordata The current author ' s DB object .
* @ uses apply_filters () Calls 'the_author' hook on the author display name .
*
2007-06-02 05:04:01 +02:00
* @ param string $deprecated Deprecated .
* @ return string The author ' s display name .
*/
2006-08-31 07:07:12 +02:00
function get_the_author ( $deprecated = '' ) {
2005-10-12 19:01:50 +02:00
global $authordata ;
2009-12-30 17:23:39 +01:00
if ( ! empty ( $deprecated ) )
2010-01-09 11:03:55 +01:00
_deprecated_argument ( __FUNCTION__ , '2.1' );
2009-12-30 17:23:39 +01:00
2009-11-26 12:29:54 +01:00
return apply_filters ( 'the_author' , is_object ( $authordata ) ? $authordata -> display_name : null );
2004-01-27 10:58:01 +01:00
}
2005-06-13 01:22:06 +02:00
2007-06-02 05:04:01 +02:00
/**
2008-05-25 17:45:05 +02:00
* Display the name of the author of the current post .
2007-12-17 00:47:58 +01:00
*
2008-05-25 17:45:05 +02:00
* The behavior of this function is based off of old functionality predating
* get_the_author () . This function is not deprecated , but is designed to echo
* the value from get_the_author () and as an result of any old theme that might
* still use the old behavior will also pass the value from get_the_author () .
2007-12-28 22:19:44 +01:00
*
2008-05-25 17:45:05 +02:00
* The normal , expected behavior of this function is to echo the author and not
2011-09-03 18:02:41 +02:00
* return it . However , backwards compatibility has to be maintained .
2007-12-28 22:19:44 +01:00
*
2007-12-17 00:47:58 +01:00
* @ since 0.71
2007-06-02 05:04:01 +02:00
* @ see get_the_author ()
2008-05-25 17:45:05 +02:00
* @ link http :// codex . wordpress . org / Template_Tags / the_author
2007-12-17 00:47:58 +01:00
*
2007-06-02 05:04:01 +02:00
* @ param string $deprecated Deprecated .
2009-12-24 12:12:04 +01:00
* @ param string $deprecated_echo Deprecated . Use get_the_author () . Echo the string or return it .
2007-06-02 05:04:01 +02:00
* @ return string The author ' s display name , from get_the_author () .
*/
2009-12-30 17:23:39 +01:00
function the_author ( $deprecated = '' , $deprecated_echo = true ) {
2010-01-09 11:03:55 +01:00
if ( ! empty ( $deprecated ) )
_deprecated_argument ( __FUNCTION__ , '2.1' );
if ( $deprecated_echo !== true )
2010-04-11 12:41:54 +02:00
_deprecated_argument ( __FUNCTION__ , '1.5' , __ ( 'Use <code>get_the_author()</code> instead if you do not want the value echoed.' ) );
2006-08-31 07:07:12 +02:00
if ( $deprecated_echo )
echo get_the_author ();
return get_the_author ();
2004-12-16 00:15:17 +01:00
}
2009-02-27 18:54:47 +01:00
/**
* Retrieve the author who last edited the current post .
*
* @ since 2.8
* @ uses $post The current post ' s DB object .
* @ uses get_post_meta () Retrieves the ID of the author who last edited the current post .
* @ uses get_userdata () Retrieves the author ' s DB object .
* @ uses apply_filters () Calls 'the_modified_author' hook on the author display name .
* @ return string The author ' s display name .
*/
function get_the_modified_author () {
2012-09-04 18:29:28 +02:00
if ( $last_id = get_post_meta ( get_post () -> ID , '_edit_last' , true ) ) {
2009-02-27 18:54:47 +01:00
$last_user = get_userdata ( $last_id );
return apply_filters ( 'the_modified_author' , $last_user -> display_name );
}
}
/**
* Display the name of the author who last edited the current post .
*
* @ since 2.8
* @ see get_the_author ()
* @ return string The author ' s display name , from get_the_modified_author () .
*/
function the_modified_author () {
echo get_the_modified_author ();
}
2007-06-02 05:04:01 +02:00
/**
2009-05-25 01:47:49 +02:00
* Retrieve the requested data of the author of the current post .
* @ link http :// codex . wordpress . org / Template_Tags / the_author_meta
* @ since 2.8 . 0
2009-04-30 21:55:29 +02:00
* @ uses $authordata The current author ' s DB object ( if $user_id not specified ) .
2009-05-25 01:47:49 +02:00
* @ param string $field selects the field of the users record .
2009-04-30 21:55:29 +02:00
* @ param int $user_id Optional . User ID .
2009-05-25 01:47:49 +02:00
* @ return string The author 's field from the current author' s DB object .
2007-06-02 05:04:01 +02:00
*/
2012-04-23 23:34:07 +02:00
function get_the_author_meta ( $field = '' , $user_id = false ) {
if ( ! $user_id ) {
2009-04-30 18:27:17 +02:00
global $authordata ;
2012-04-24 16:41:23 +02:00
$user_id = isset ( $authordata -> ID ) ? $authordata -> ID : 0 ;
2012-04-23 23:34:07 +02:00
} else {
2009-04-30 21:55:29 +02:00
$authordata = get_userdata ( $user_id );
2012-04-23 23:34:07 +02:00
}
2004-01-27 10:58:01 +01:00
2012-04-23 23:34:07 +02:00
if ( in_array ( $field , array ( 'login' , 'pass' , 'nicename' , 'email' , 'url' , 'registered' , 'activation_key' , 'status' ) ) )
$field = 'user_' . $field ;
2009-05-25 01:47:49 +02:00
2012-04-23 23:34:07 +02:00
$value = isset ( $authordata -> $field ) ? $authordata -> $field : '' ;
2007-06-02 05:04:01 +02:00
2012-04-23 23:34:07 +02:00
return apply_filters ( 'get_the_author_' . $field , $value , $user_id );
2004-01-27 10:58:01 +01:00
}
2007-06-02 05:04:01 +02:00
/**
2009-05-25 01:47:49 +02:00
* Retrieve the requested data of the author of the current post .
* @ link http :// codex . wordpress . org / Template_Tags / the_author_meta
* @ since 2.8 . 0
* @ param string $field selects the field of the users record .
2009-04-30 21:55:29 +02:00
* @ param int $user_id Optional . User ID .
2009-05-25 01:47:49 +02:00
* @ echo string The author 's field from the current author' s DB object .
2007-06-02 05:04:01 +02:00
*/
2009-04-30 18:27:17 +02:00
function the_author_meta ( $field = '' , $user_id = false ) {
2009-08-20 18:21:44 +02:00
echo apply_filters ( 'the_author_' . $field , get_the_author_meta ( $field , $user_id ), $user_id );
2004-01-27 10:58:01 +01:00
}
2010-04-07 14:26:28 +02:00
/**
* Retrieve either author 's link or author' s name .
*
* If the author has a home page set , return an HTML link , otherwise just return the
* author ' s name .
*
* @ uses get_the_author_meta ()
* @ uses get_the_author ()
*/
function get_the_author_link () {
if ( get_the_author_meta ( 'url' ) ) {
2013-02-28 19:58:52 +01:00
return '<a href="' . esc_url ( get_the_author_meta ( 'url' ) ) . '" title="' . esc_attr ( sprintf ( __ ( " Visit %s’s website " ), get_the_author ()) ) . '" rel="author external">' . get_the_author () . '</a>' ;
2010-04-07 14:26:28 +02:00
} else {
return get_the_author ();
}
}
2007-06-02 05:04:01 +02:00
/**
2008-05-25 17:45:05 +02:00
* Display either author 's link or author' s name .
*
* If the author has a home page set , echo an HTML link , otherwise just echo the
* author ' s name .
2007-12-17 00:47:58 +01:00
*
2008-05-25 17:45:05 +02:00
* @ link http :// codex . wordpress . org / Template_Tags / the_author_link
2007-12-17 00:47:58 +01:00
* @ since 2.1
2010-04-07 14:26:28 +02:00
* @ uses get_the_author_link ()
2007-06-02 05:04:01 +02:00
*/
2006-08-30 20:07:49 +02:00
function the_author_link () {
2010-04-07 14:26:28 +02:00
echo get_the_author_link ();
2006-08-30 20:07:49 +02:00
}
2007-06-02 05:04:01 +02:00
/**
2008-05-25 17:45:05 +02:00
* Retrieve the number of posts by the author of the current post .
2007-12-17 00:47:58 +01:00
*
* @ since 1.5
* @ uses $post The current post in the Loop ' s DB object .
2010-03-03 20:08:30 +01:00
* @ uses count_user_posts ()
2007-06-02 05:04:01 +02:00
* @ return int The number of posts by the author .
*/
2004-12-16 00:15:17 +01:00
function get_the_author_posts () {
2012-09-04 18:29:28 +02:00
return count_user_posts ( get_post () -> post_author );
2004-12-16 00:15:17 +01:00
}
2005-10-12 19:01:50 +02:00
2007-06-02 05:04:01 +02:00
/**
2008-05-25 17:45:05 +02:00
* Display the number of posts by the author of the current post .
2007-12-17 00:47:58 +01:00
*
2008-05-25 17:45:05 +02:00
* @ link http :// codex . wordpress . org / Template_Tags / the_author_posts
2007-12-17 00:47:58 +01:00
* @ since 0.71
2010-06-06 07:16:32 +02:00
* @ uses get_the_author_posts () Echoes returned value from function .
2007-06-02 05:04:01 +02:00
*/
2004-01-27 10:58:01 +01:00
function the_author_posts () {
2005-10-12 19:01:50 +02:00
echo get_the_author_posts ();
2004-01-27 10:58:01 +01:00
}
2007-06-02 05:04:01 +02:00
/**
2008-05-25 17:45:05 +02:00
* Display an HTML link to the author page of the author of the current post .
2007-12-17 00:47:58 +01:00
*
2008-05-25 17:45:05 +02:00
* Does just echo get_author_posts_url () function , like the others do . The
* reason for this , is that another function is used to help in printing the
* link to the author ' s posts .
2007-12-17 00:47:58 +01:00
*
2008-05-25 17:45:05 +02:00
* @ link http :// codex . wordpress . org / Template_Tags / the_author_posts_link
2008-08-27 08:45:13 +02:00
* @ since 1.2 . 0
2007-12-17 00:47:58 +01:00
* @ uses $authordata The current author ' s DB object .
* @ uses get_author_posts_url ()
* @ uses get_the_author ()
* @ param string $deprecated Deprecated .
2007-06-02 05:04:01 +02:00
*/
2006-08-31 07:07:12 +02:00
function the_author_posts_link ( $deprecated = '' ) {
2009-12-24 12:12:04 +01:00
if ( ! empty ( $deprecated ) )
2010-01-09 11:03:55 +01:00
_deprecated_argument ( __FUNCTION__ , '2.1' );
2009-12-24 12:12:04 +01:00
2005-10-12 19:01:50 +02:00
global $authordata ;
2011-03-23 22:25:35 +01:00
if ( ! is_object ( $authordata ) )
return false ;
2009-10-08 23:04:04 +02:00
$link = sprintf (
2011-06-08 04:02:09 +02:00
'<a href="%1$s" title="%2$s" rel="author">%3$s</a>' ,
2013-02-28 19:58:52 +01:00
esc_url ( get_author_posts_url ( $authordata -> ID , $authordata -> user_nicename ) ),
2009-08-18 18:05:07 +02:00
esc_attr ( sprintf ( __ ( 'Posts by %s' ), get_the_author () ) ),
2007-06-02 05:04:01 +02:00
get_the_author ()
);
2009-10-08 23:04:04 +02:00
echo apply_filters ( 'the_author_posts_link' , $link );
2007-06-02 05:04:01 +02:00
}
/**
2010-10-28 09:15:23 +02:00
* Retrieve the URL to the author page for the user with the ID provided .
2007-12-17 00:47:58 +01:00
*
2008-08-27 08:45:13 +02:00
* @ since 2.1 . 0
2007-12-17 00:47:58 +01:00
* @ uses $wp_rewrite WP_Rewrite
2007-06-02 05:04:01 +02:00
* @ return string The URL to the author ' s page .
*/
2006-08-30 20:07:49 +02:00
function get_author_posts_url ( $author_id , $author_nicename = '' ) {
2007-12-06 20:49:33 +01:00
global $wp_rewrite ;
2007-03-23 01:59:21 +01:00
$auth_ID = ( int ) $author_id ;
2005-10-12 19:01:50 +02:00
$link = $wp_rewrite -> get_author_permastruct ();
if ( empty ( $link ) ) {
2010-11-17 17:38:28 +01:00
$file = home_url ( '/' );
2005-10-12 19:01:50 +02:00
$link = $file . '?author=' . $auth_ID ;
} else {
2006-07-28 01:27:27 +02:00
if ( '' == $author_nicename ) {
$user = get_userdata ( $author_id );
if ( ! empty ( $user -> user_nicename ) )
$author_nicename = $user -> user_nicename ;
}
2005-10-12 19:01:50 +02:00
$link = str_replace ( '%author%' , $author_nicename , $link );
2010-11-16 17:09:46 +01:00
$link = home_url ( user_trailingslashit ( $link ) );
2005-10-12 19:01:50 +02:00
}
$link = apply_filters ( 'author_link' , $link , $author_id , $author_nicename );
return $link ;
2004-03-19 17:20:49 +01:00
}
2007-06-02 05:04:01 +02:00
/**
2008-05-25 17:45:05 +02:00
* List all the authors of the blog , with several options available .
2007-12-17 00:47:58 +01:00
*
2009-02-15 10:06:24 +01:00
* < ul >
* < li > optioncount ( boolean ) ( false ) : Show the count in parenthesis next to the
* author ' s name .</ li >
* < li > exclude_admin ( boolean ) ( true ) : Exclude the 'admin' user that is
2013-02-18 19:56:51 +01:00
* installed by default .</ li >
2009-02-15 10:06:24 +01:00
* < li > show_fullname ( boolean ) ( false ) : Show their full names .</ li >
* < li > hide_empty ( boolean ) ( true ) : Don ' t show authors without any posts .</ li >
* < li > feed ( string ) ( '' ) : If isn 't empty, show links to author' s feeds .</ li >
* < li > feed_image ( string ) ( '' ) : If isn ' t empty , use this image to link to
* feeds .</ li >
* < li > echo ( boolean ) ( true ) : Set to false to return the output , instead of
* echoing .</ li >
* < li > style ( string ) ( 'list' ) : Whether to display list of authors in list form
* or as a string .</ li >
2010-09-15 21:52:25 +02:00
* < li > html ( bool ) ( true ) : Whether to list the items in html form or plaintext .
2009-02-15 10:06:24 +01:00
* </ li >
* </ ul >
2007-12-17 00:47:58 +01:00
*
2008-05-25 17:45:05 +02:00
* @ link http :// codex . wordpress . org / Template_Tags / wp_list_authors
2008-08-27 08:45:13 +02:00
* @ since 1.2 . 0
2007-06-02 05:04:01 +02:00
* @ param array $args The argument array .
* @ return null | string The output , if echo is set to false .
*/
2004-03-19 17:20:49 +01:00
function wp_list_authors ( $args = '' ) {
2007-03-29 03:39:05 +02:00
global $wpdb ;
2007-06-14 04:25:30 +02:00
2007-09-04 01:32:58 +02:00
$defaults = array (
2010-09-15 21:52:25 +02:00
'orderby' => 'name' , 'order' => 'ASC' , 'number' => '' ,
2007-09-04 01:32:58 +02:00
'optioncount' => false , 'exclude_admin' => true ,
'show_fullname' => false , 'hide_empty' => true ,
2009-02-15 10:06:24 +01:00
'feed' => '' , 'feed_image' => '' , 'feed_type' => '' , 'echo' => true ,
'style' => 'list' , 'html' => true
2007-05-11 05:10:05 +02:00
);
2007-06-01 07:43:24 +02:00
2010-09-15 21:52:25 +02:00
$args = wp_parse_args ( $args , $defaults );
extract ( $args , EXTR_SKIP );
2007-06-01 07:43:24 +02:00
$return = '' ;
2010-12-21 17:27:34 +01:00
$query_args = wp_array_slice_assoc ( $args , array ( 'orderby' , 'order' , 'number' ) );
$query_args [ 'fields' ] = 'ids' ;
$authors = get_users ( $query_args );
2007-06-01 07:43:24 +02:00
2007-03-29 03:39:05 +02:00
$author_count = array ();
2010-01-11 23:23:58 +01:00
foreach ( ( array ) $wpdb -> get_results ( " SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql ( 'post' ) . " GROUP BY post_author " ) as $row )
2007-03-29 03:39:05 +02:00
$author_count [ $row -> post_author ] = $row -> count ;
2004-03-19 17:20:49 +01:00
2010-12-21 17:27:34 +01:00
foreach ( $authors as $author_id ) {
$author = get_userdata ( $author_id );
2009-03-18 03:43:45 +01:00
2010-09-15 21:52:25 +02:00
if ( $exclude_admin && 'admin' == $author -> display_name )
continue ;
2009-03-18 03:43:45 +01:00
2010-09-15 21:52:25 +02:00
$posts = isset ( $author_count [ $author -> ID ] ) ? $author_count [ $author -> ID ] : 0 ;
2005-10-12 19:01:50 +02:00
2010-09-15 21:52:25 +02:00
if ( ! $posts && $hide_empty )
continue ;
$link = '' ;
if ( $show_fullname && $author -> first_name && $author -> last_name )
2005-10-12 19:01:50 +02:00
$name = " $author->first_name $author->last_name " ;
2010-09-15 21:52:25 +02:00
else
$name = $author -> display_name ;
2005-10-12 19:01:50 +02:00
2010-09-15 21:52:25 +02:00
if ( ! $html ) {
$return .= $name . ', ' ;
2009-02-15 10:06:24 +01:00
2010-09-15 21:52:25 +02:00
continue ; // No need to go further to process HTML.
2009-02-15 10:06:24 +01:00
}
2010-09-15 21:52:25 +02:00
if ( 'list' == $style ) {
2007-06-01 07:43:24 +02:00
$return .= '<li>' ;
2010-09-15 21:52:25 +02:00
}
$link = '<a href="' . get_author_posts_url ( $author -> ID , $author -> user_nicename ) . '" title="' . esc_attr ( sprintf ( __ ( " Posts by %s " ), $author -> display_name ) ) . '">' . $name . '</a>' ;
if ( ! empty ( $feed_image ) || ! empty ( $feed ) ) {
$link .= ' ' ;
if ( empty ( $feed_image ) ) {
$link .= '(' ;
}
$link .= '<a href="' . get_author_feed_link ( $author -> ID ) . '"' ;
$alt = $title = '' ;
if ( ! empty ( $feed ) ) {
$title = ' title="' . esc_attr ( $feed ) . '"' ;
$alt = ' alt="' . esc_attr ( $feed ) . '"' ;
$name = $feed ;
$link .= $title ;
2005-10-12 19:01:50 +02:00
}
2004-03-23 05:45:27 +01:00
2010-09-15 21:52:25 +02:00
$link .= '>' ;
if ( ! empty ( $feed_image ) )
$link .= '<img src="' . esc_url ( $feed_image ) . '" style="border: none;"' . $alt . $title . ' />' ;
else
$link .= $name ;
$link .= '</a>' ;
2004-03-23 05:45:27 +01:00
2010-09-15 21:52:25 +02:00
if ( empty ( $feed_image ) )
$link .= ')' ;
2005-10-12 19:01:50 +02:00
}
2004-03-23 05:45:27 +01:00
2010-09-15 21:52:25 +02:00
if ( $optioncount )
$link .= ' (' . $posts . ')' ;
$return .= $link ;
$return .= ( 'list' == $style ) ? '</li>' : ', ' ;
2005-10-12 19:01:50 +02:00
}
2009-02-15 10:06:24 +01:00
2010-09-15 21:52:25 +02:00
$return = rtrim ( $return , ', ' );
2009-02-15 10:06:24 +01:00
2010-09-15 21:52:25 +02:00
if ( ! $echo )
2007-06-01 07:43:24 +02:00
return $return ;
2010-09-15 21:52:25 +02:00
2007-06-01 07:43:24 +02:00
echo $return ;
2004-03-19 17:20:49 +01:00
}
2011-05-12 09:14:44 +02:00
/**
* Does this site have more than one author
2011-06-11 01:01:45 +02:00
*
2011-05-12 09:14:44 +02:00
* Checks to see if more than one author has published posts .
*
2011-06-11 06:40:18 +02:00
* @ since 3.2 . 0
2011-05-12 09:14:44 +02:00
* @ return bool Whether or not we have more than one author
*/
function is_multi_author () {
global $wpdb ;
2011-06-11 01:01:45 +02:00
2013-07-10 06:20:41 +02:00
if ( false === ( $is_multi_author = get_transient ( 'is_multi_author' ) ) ) {
2011-05-12 09:14:44 +02:00
$rows = ( array ) $wpdb -> get_col ( " SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 2 " );
$is_multi_author = 1 < count ( $rows ) ? 1 : 0 ;
2013-07-10 06:20:41 +02:00
set_transient ( 'is_multi_author' , $is_multi_author );
2011-05-12 09:14:44 +02:00
}
2011-09-07 15:53:53 +02:00
return apply_filters ( 'is_multi_author' , ( bool ) $is_multi_author );
2011-05-12 09:14:44 +02:00
}
2011-06-11 01:01:45 +02:00
/**
2011-05-12 09:14:44 +02:00
* Helper function to clear the cache for number of authors .
2011-06-11 01:01:45 +02:00
*
2011-05-12 09:14:44 +02:00
* @ private
*/
function __clear_multi_author_cache () {
2013-07-10 06:20:41 +02:00
delete_transient ( 'is_multi_author' );
2011-05-12 09:14:44 +02:00
}
add_action ( 'transition_post_status' , '__clear_multi_author_cache' );