2004-01-27 04:58:01 -05:00
< ? php
2007-12-16 18:47:58 -05:00
/**
* Author Template functions for use in themes .
*
2008-05-25 11:45:05 -04:00
* These functions must be used within the WordPress Loop .
*
2015-04-12 17:29:32 -04:00
* @ link https :// codex . wordpress . org / Author_Templates
2008-05-25 11:45:05 -04:00
*
2007-12-16 18:47:58 -05:00
* @ package WordPress
* @ subpackage Template
*/
2005-06-12 19:22:06 -04:00
2007-06-01 23:04:01 -04:00
/**
2008-05-25 11:45:05 -04:00
* Retrieve the author of the current post .
2007-12-16 18:47:58 -05:00
*
2013-12-24 13:57:12 -05:00
* @ since 1.5 . 0
*
2015-05-22 00:14:24 -04:00
* @ global object $authordata The current author ' s DB object .
2007-12-16 18:47:58 -05:00
*
2007-06-01 23:04:01 -04:00
* @ param string $deprecated Deprecated .
2015-05-21 16:10:26 -04:00
* @ return string | null The author ' s display name .
2007-06-01 23:04:01 -04:00
*/
2017-11-30 18:11:00 -05:00
function get_the_author ( $deprecated = '' ) {
2005-10-12 13:01:50 -04:00
global $authordata ;
2009-12-30 11:23:39 -05:00
2017-11-30 18:11:00 -05:00
if ( ! empty ( $deprecated ) ) {
2016-07-06 08:40:29 -04:00
_deprecated_argument ( __FUNCTION__ , '2.1.0' );
2017-11-30 18:11:00 -05:00
}
2009-12-30 11:23:39 -05:00
2013-09-13 15:25:10 -04:00
/**
2016-05-22 14:25:26 -04:00
* Filters the display name of the current post ' s author .
2013-09-13 15:25:10 -04:00
*
* @ since 2.9 . 0
*
* @ param string $authordata -> display_name The author ' s display name .
*/
2017-11-30 18:11:00 -05:00
return apply_filters ( 'the_author' , is_object ( $authordata ) ? $authordata -> display_name : null );
2004-01-27 04:58:01 -05:00
}
2005-06-12 19:22:06 -04:00
2007-06-01 23:04:01 -04:00
/**
2008-05-25 11:45:05 -04:00
* Display the name of the author of the current post .
2007-12-16 18:47:58 -05:00
*
2008-05-25 11:45:05 -04: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 16:19:44 -05:00
*
2008-05-25 11:45:05 -04:00
* The normal , expected behavior of this function is to echo the author and not
2016-05-13 14:41:31 -04:00
* return it . However , backward compatibility has to be maintained .
2007-12-28 16:19:44 -05:00
*
2007-12-16 18:47:58 -05:00
* @ since 0.71
2007-06-01 23:04:01 -04:00
* @ see get_the_author ()
2015-04-12 17:29:32 -04:00
* @ link https :// codex . wordpress . org / Template_Tags / the_author
2007-12-16 18:47:58 -05:00
*
2019-04-01 10:23:53 -04:00
* @ param string $deprecated Deprecated .
* @ param bool $deprecated_echo Deprecated . Use get_the_author () . Echo the string or return it .
2015-05-21 16:10:26 -04:00
* @ return string | null The author ' s display name , from get_the_author () .
2007-06-01 23:04:01 -04:00
*/
2009-12-30 11:23:39 -05:00
function the_author ( $deprecated = '' , $deprecated_echo = true ) {
2015-11-05 18:38:27 -05:00
if ( ! empty ( $deprecated ) ) {
2016-07-06 08:40:29 -04:00
_deprecated_argument ( __FUNCTION__ , '2.1.0' );
2015-11-05 18:38:27 -05:00
}
if ( true !== $deprecated_echo ) {
2017-11-30 18:11:00 -05:00
_deprecated_argument (
2018-08-16 21:51:36 -04:00
__FUNCTION__ ,
'1.5.0' ,
2015-11-05 18:38:27 -05:00
/* translators: %s: get_the_author() */
2017-11-30 18:11:00 -05:00
sprintf (
__ ( 'Use %s instead if you do not want the value echoed.' ),
2015-11-05 18:38:27 -05:00
'<code>get_the_author()</code>'
)
);
}
if ( $deprecated_echo ) {
2006-08-31 01:07:12 -04:00
echo get_the_author ();
2015-11-05 18:38:27 -05:00
}
2006-08-31 01:07:12 -04:00
return get_the_author ();
2004-12-15 18:15:17 -05:00
}
2009-02-27 12:54:47 -05:00
/**
* Retrieve the author who last edited the current post .
*
2013-12-24 13:57:12 -05:00
* @ since 2.8 . 0
*
2015-05-24 01:40:25 -04:00
* @ return string | void The author ' s display name .
2009-02-27 12:54:47 -05:00
*/
function get_the_modified_author () {
2019-01-08 00:50:49 -05:00
$last_id = get_post_meta ( get_post () -> ID , '_edit_last' , true );
if ( $last_id ) {
2017-11-30 18:11:00 -05:00
$last_user = get_userdata ( $last_id );
2013-09-13 15:25:10 -04:00
/**
2016-05-22 14:25:26 -04:00
* Filters the display name of the author who last edited the current post .
2013-09-13 15:25:10 -04:00
*
* @ since 2.8 . 0
*
* @ param string $last_user -> display_name The author ' s display name .
*/
2017-11-30 18:11:00 -05:00
return apply_filters ( 'the_modified_author' , $last_user -> display_name );
2009-02-27 12:54:47 -05:00
}
}
/**
2015-05-21 16:10:26 -04:00
* Display the name of the author who last edited the current post ,
* if the author ' s ID is available .
2009-02-27 12:54:47 -05:00
*
2013-12-24 13:57:12 -05:00
* @ since 2.8 . 0
*
2009-02-27 12:54:47 -05:00
* @ see get_the_author ()
*/
function the_modified_author () {
echo get_the_modified_author ();
}
2007-06-01 23:04:01 -04:00
/**
2017-06-26 14:24:40 -04:00
* Retrieves the requested data of the author of the current post .
*
* Valid values for the `$field` parameter include :
*
* - admin_color
* - aim
* - comment_shortcuts
* - description
* - display_name
* - first_name
* - ID
* - jabber
* - last_name
* - nickname
* - plugins_last_view
* - plugins_per_page
* - rich_editing
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
* - syntax_highlighting
2017-06-26 14:24:40 -04:00
* - user_activation_key
* - user_description
* - user_email
* - user_firstname
* - user_lastname
* - user_level
* - user_login
* - user_nicename
* - user_pass
* - user_registered
* - user_status
* - user_url
* - yim
*
2009-05-24 19:47:49 -04:00
* @ since 2.8 . 0
2015-05-22 00:14:24 -04:00
*
* @ global object $authordata The current author ' s DB object .
*
2019-04-01 10:23:53 -04:00
* @ param string $field Optional . The user field to retrieve . Default empty .
* @ param int | false $user_id Optional . User ID .
2017-06-12 22:33:42 -04:00
* @ return string The author 's field from the current author' s DB object , otherwise an empty string .
2007-06-01 23:04:01 -04:00
*/
2012-04-23 17:34:07 -04:00
function get_the_author_meta ( $field = '' , $user_id = false ) {
2015-05-25 09:06:25 -04:00
$original_user_id = $user_id ;
2012-04-23 17:34:07 -04:00
if ( ! $user_id ) {
2009-04-30 12:27:17 -04:00
global $authordata ;
2012-04-24 10:41:23 -04:00
$user_id = isset ( $authordata -> ID ) ? $authordata -> ID : 0 ;
2012-04-23 17:34:07 -04:00
} else {
2009-04-30 15:55:29 -04:00
$authordata = get_userdata ( $user_id );
2012-04-23 17:34:07 -04:00
}
2004-01-27 04:58:01 -05:00
2017-11-30 18:11:00 -05:00
if ( in_array ( $field , array ( 'login' , 'pass' , 'nicename' , 'email' , 'url' , 'registered' , 'activation_key' , 'status' ) ) ) {
2012-04-23 17:34:07 -04:00
$field = 'user_' . $field ;
2017-11-30 18:11:00 -05:00
}
2009-05-24 19:47:49 -04:00
2012-04-23 17:34:07 -04:00
$value = isset ( $authordata -> $field ) ? $authordata -> $field : '' ;
2007-06-01 23:04:01 -04:00
2013-09-13 15:25:10 -04:00
/**
2016-05-22 14:25:26 -04:00
* Filters the value of the requested user metadata .
2013-09-13 15:25:10 -04:00
*
* The filter name is dynamic and depends on the $field parameter of the function .
*
* @ since 2.8 . 0
2015-05-25 09:06:25 -04:00
* @ since 4.3 . 0 The `$original_user_id` parameter was added .
2013-09-13 15:25:10 -04:00
*
2019-04-01 10:23:53 -04:00
* @ param string $value The value of the metadata .
* @ param int $user_id The user ID for the value .
* @ param int | false $original_user_id The original user ID , as passed to the function .
2013-09-13 15:25:10 -04:00
*/
2016-12-13 23:18:42 -05:00
return apply_filters ( " get_the_author_ { $field } " , $value , $user_id , $original_user_id );
2004-01-27 04:58:01 -05:00
}
2007-06-01 23:04:01 -04:00
/**
2015-05-22 00:14:24 -04:00
* Outputs the field from the user 's DB object. Defaults to current post' s author .
*
2009-05-24 19:47:49 -04:00
* @ since 2.8 . 0
2015-05-22 00:14:24 -04:00
*
2019-04-01 10:23:53 -04:00
* @ param string $field Selects the field of the users record . See get_the_author_meta ()
* for the list of possible fields .
* @ param int | false $user_id Optional . User ID .
2017-06-26 14:24:40 -04:00
*
* @ see get_the_author_meta ()
2007-06-01 23:04:01 -04:00
*/
2013-09-13 15:25:10 -04:00
function the_author_meta ( $field = '' , $user_id = false ) {
$author_meta = get_the_author_meta ( $field , $user_id );
/**
* The value of the requested user metadata .
*
* The filter name is dynamic and depends on the $field parameter of the function .
*
* @ since 2.8 . 0
*
2019-04-01 10:23:53 -04:00
* @ param string $author_meta The value of the metadata .
* @ param int | false $user_id The user ID .
2013-09-13 15:25:10 -04:00
*/
2016-12-13 23:18:42 -05:00
echo apply_filters ( " the_author_ { $field } " , $author_meta , $user_id );
2004-01-27 04:58:01 -05:00
}
2010-04-07 08:26:28 -04: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 .
2015-05-21 16:10:26 -04:00
*
2016-12-27 04:21:44 -05:00
* @ since 3.0 . 0
*
2015-05-21 16:10:26 -04:00
* @ return string | null An HTML link if the author ' s url exist in user meta ,
* else the result of get_the_author () .
2010-04-07 08:26:28 -04:00
*/
function get_the_author_link () {
2017-11-30 18:11:00 -05:00
if ( get_the_author_meta ( 'url' ) ) {
return sprintf (
'<a href="%1$s" title="%2$s" rel="author external">%3$s</a>' ,
esc_url ( get_the_author_meta ( 'url' ) ),
2016-08-23 19:18:29 -04:00
/* translators: %s: author's display name */
esc_attr ( sprintf ( __ ( 'Visit %s’s website' ), get_the_author () ) ),
get_the_author ()
);
2010-04-07 08:26:28 -04:00
} else {
return get_the_author ();
}
}
2007-06-01 23:04:01 -04:00
/**
2008-05-25 11:45:05 -04: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-16 18:47:58 -05:00
*
2015-04-12 17:29:32 -04:00
* @ link https :// codex . wordpress . org / Template_Tags / the_author_link
2013-12-24 13:57:12 -05:00
*
* @ since 2.1 . 0
2007-06-01 23:04:01 -04:00
*/
2006-08-30 14:07:49 -04:00
function the_author_link () {
2010-04-07 08:26:28 -04:00
echo get_the_author_link ();
2006-08-30 14:07:49 -04:00
}
2007-06-01 23:04:01 -04:00
/**
2008-05-25 11:45:05 -04:00
* Retrieve the number of posts by the author of the current post .
2007-12-16 18:47:58 -05:00
*
2013-12-24 13:57:12 -05:00
* @ since 1.5 . 0
*
2007-06-01 23:04:01 -04:00
* @ return int The number of posts by the author .
*/
2004-12-15 18:15:17 -05:00
function get_the_author_posts () {
2014-05-10 20:26:14 -04:00
$post = get_post ();
if ( ! $post ) {
return 0 ;
}
2015-01-08 14:53:22 -05:00
return count_user_posts ( $post -> post_author , $post -> post_type );
2004-12-15 18:15:17 -05:00
}
2005-10-12 13:01:50 -04:00
2007-06-01 23:04:01 -04:00
/**
2008-05-25 11:45:05 -04:00
* Display the number of posts by the author of the current post .
2007-12-16 18:47:58 -05:00
*
2015-04-12 17:29:32 -04:00
* @ link https :// codex . wordpress . org / Template_Tags / the_author_posts
2007-12-16 18:47:58 -05:00
* @ since 0.71
2007-06-01 23:04:01 -04:00
*/
2004-01-27 04:58:01 -05:00
function the_author_posts () {
2005-10-12 13:01:50 -04:00
echo get_the_author_posts ();
2004-01-27 04:58:01 -05:00
}
2007-06-01 23:04:01 -04:00
/**
2015-09-28 21:49:25 -04:00
* Retrieves an HTML link to the author page of the current post ' s author .
2007-12-16 18:47:58 -05:00
*
2015-09-28 21:49:25 -04:00
* Returns an HTML - formatted link using get_author_posts_url () .
2007-12-16 18:47:58 -05:00
*
2015-09-28 21:49:25 -04:00
* @ since 4.4 . 0
2015-05-21 16:10:26 -04:00
*
2015-05-22 00:14:24 -04:00
* @ global object $authordata The current author ' s DB object .
*
2019-01-16 00:54:49 -05:00
* @ return string An HTML link to the author page , or an empty string if $authordata isn ' t defined .
2007-06-01 23:04:01 -04:00
*/
2015-09-28 21:49:25 -04:00
function get_the_author_posts_link () {
2005-10-12 13:01:50 -04:00
global $authordata ;
2015-05-22 00:14:24 -04:00
if ( ! is_object ( $authordata ) ) {
2019-01-16 00:54:49 -05:00
return '' ;
2015-05-22 00:14:24 -04:00
}
2017-11-30 18:11:00 -05:00
$link = sprintf (
'<a href="%1$s" title="%2$s" rel="author">%3$s</a>' ,
2013-02-28 13:58:52 -05:00
esc_url ( get_author_posts_url ( $authordata -> ID , $authordata -> user_nicename ) ),
2016-08-23 19:18:29 -04:00
/* translators: %s: author's display name */
2009-08-18 12:05:07 -04:00
esc_attr ( sprintf ( __ ( 'Posts by %s' ), get_the_author () ) ),
2007-06-01 23:04:01 -04:00
get_the_author ()
);
2013-09-13 15:25:10 -04:00
/**
2016-05-22 14:25:26 -04:00
* Filters the link to the author page of the author of the current post .
2013-09-13 15:25:10 -04:00
*
* @ since 2.9 . 0
*
* @ param string $link HTML link .
*/
2015-09-28 21:49:25 -04:00
return apply_filters ( 'the_author_posts_link' , $link );
}
/**
* Displays an HTML link to the author page of the current post ' s author .
*
* @ since 1.2 . 0
* @ since 4.4 . 0 Converted into a wrapper for get_the_author_posts_link ()
*
* @ param string $deprecated Unused .
*/
function the_author_posts_link ( $deprecated = '' ) {
if ( ! empty ( $deprecated ) ) {
2016-07-06 08:40:29 -04:00
_deprecated_argument ( __FUNCTION__ , '2.1.0' );
2015-09-28 21:49:25 -04:00
}
echo get_the_author_posts_link ();
2007-06-01 23:04:01 -04:00
}
/**
2010-10-28 03:15:23 -04:00
* Retrieve the URL to the author page for the user with the ID provided .
2007-12-16 18:47:58 -05:00
*
2008-08-27 02:45:13 -04:00
* @ since 2.1 . 0
2015-05-22 00:14:24 -04:00
*
* @ global WP_Rewrite $wp_rewrite
*
2015-12-17 12:30:43 -05:00
* @ param int $author_id Author ID .
* @ param string $author_nicename Optional . The author ' s nicename ( slug ) . Default empty .
2007-06-01 23:04:01 -04:00
* @ return string The URL to the author ' s page .
*/
2015-12-17 12:30:43 -05:00
function get_author_posts_url ( $author_id , $author_nicename = '' ) {
2007-12-06 14:49:33 -05:00
global $wp_rewrite ;
2007-03-22 20:59:21 -04:00
$auth_ID = ( int ) $author_id ;
2017-11-30 18:11:00 -05:00
$link = $wp_rewrite -> get_author_permastruct ();
2005-10-12 13:01:50 -04:00
2017-11-30 18:11:00 -05:00
if ( empty ( $link ) ) {
2010-11-17 11:38:28 -05:00
$file = home_url ( '/' );
2005-10-12 13:01:50 -04:00
$link = $file . '?author=' . $auth_ID ;
} else {
2006-07-27 19:27:27 -04:00
if ( '' == $author_nicename ) {
2017-11-30 18:11:00 -05:00
$user = get_userdata ( $author_id );
if ( ! empty ( $user -> user_nicename ) ) {
2006-07-27 19:27:27 -04:00
$author_nicename = $user -> user_nicename ;
2017-11-30 18:11:00 -05:00
}
2006-07-27 19:27:27 -04:00
}
2017-11-30 18:11:00 -05:00
$link = str_replace ( '%author%' , $author_nicename , $link );
2010-11-16 11:09:46 -05:00
$link = home_url ( user_trailingslashit ( $link ) );
2005-10-12 13:01:50 -04:00
}
2013-09-13 15:25:10 -04:00
/**
2016-05-22 14:25:26 -04:00
* Filters the URL to the author ' s page .
2013-09-13 15:25:10 -04:00
*
* @ since 2.1 . 0
*
* @ param string $link The URL to the author ' s page .
* @ param int $author_id The author ' s id .
* @ param string $author_nicename The author ' s nice name .
*/
$link = apply_filters ( 'author_link' , $link , $author_id , $author_nicename );
2005-10-12 13:01:50 -04:00
return $link ;
2004-03-19 11:20:49 -05:00
}
2007-06-01 23:04:01 -04:00
/**
2016-01-27 22:51:26 -05:00
* List all the authors of the site , with several options available .
2007-12-16 18:47:58 -05:00
*
2015-04-12 17:29:32 -04:00
* @ link https :// codex . wordpress . org / Template_Tags / wp_list_authors
2014-06-29 18:34:14 -04:00
*
2008-08-27 02:45:13 -04:00
* @ since 1.2 . 0
2014-06-29 18:34:14 -04:00
*
2015-10-14 19:44:25 -04:00
* @ global wpdb $wpdb WordPress database abstraction object .
2015-05-22 00:14:24 -04:00
*
2014-06-29 18:34:14 -04:00
* @ param string | array $args {
* Optional . Array or string of default arguments .
*
2016-07-04 10:34:27 -04:00
* @ type string $orderby How to sort the authors . Accepts 'nicename' , 'email' , 'url' , 'registered' ,
* 'user_nicename' , 'user_email' , 'user_url' , 'user_registered' , 'name' ,
* 'display_name' , 'post_count' , 'ID' , 'meta_value' , 'user_login' . Default 'name' .
* @ type string $order Sorting direction for $orderby . Accepts 'ASC' , 'DESC' . Default 'ASC' .
* @ type int $number Maximum authors to return or display . Default empty ( all authors ) .
* @ type bool $optioncount Show the count in parenthesis next to the author ' s name . Default false .
2019-01-09 01:52:50 -05:00
* @ type bool $exclude_admin Whether to exclude the 'admin' account , if it exists . Default true .
2016-07-04 10:34:27 -04:00
* @ type bool $show_fullname Whether to show the author ' s full name . Default false .
* @ type bool $hide_empty Whether to hide any authors with no posts . Default true .
* @ type string $feed If not empty , show a link to the author ' s feed and use this text as the alt
* parameter of the link . Default empty .
* @ type string $feed_image If not empty , show a link to the author ' s feed and use this image URL as
* clickable anchor . Default empty .
* @ type string $feed_type The feed type to link to , such as 'rss2' . Defaults to default feed type .
* @ type bool $echo Whether to output the result or instead return it . Default true .
* @ type string $style If 'list' , each author is wrapped in an `<li>` element , otherwise the authors
* will be separated by commas .
* @ type bool $html Whether to list the items in HTML form or plaintext . Default true .
* @ type array | string $exclude Array or comma / space - separated list of author IDs to exclude . Default empty .
* @ type array | string $include Array or comma / space - separated list of author IDs to include . Default empty .
2014-06-29 18:34:14 -04:00
* }
2015-05-24 01:40:25 -04:00
* @ return string | void The output , if echo is set to false .
2007-06-01 23:04:01 -04:00
*/
2014-05-13 02:02:14 -04:00
function wp_list_authors ( $args = '' ) {
2007-03-28 21:39:05 -04:00
global $wpdb ;
2007-06-13 22:25:30 -04:00
2007-09-03 19:32:58 -04:00
$defaults = array (
2017-11-30 18:11:00 -05:00
'orderby' => 'name' ,
'order' => 'ASC' ,
'number' => '' ,
'optioncount' => false ,
'exclude_admin' => true ,
'show_fullname' => false ,
'hide_empty' => true ,
'feed' => '' ,
'feed_image' => '' ,
'feed_type' => '' ,
'echo' => true ,
'style' => 'list' ,
'html' => true ,
'exclude' => '' ,
'include' => '' ,
2007-05-10 23:10:05 -04:00
);
2007-06-01 01:43:24 -04:00
2010-09-15 15:52:25 -04:00
$args = wp_parse_args ( $args , $defaults );
2007-06-01 01:43:24 -04:00
$return = '' ;
2017-11-30 18:11:00 -05:00
$query_args = wp_array_slice_assoc ( $args , array ( 'orderby' , 'order' , 'number' , 'exclude' , 'include' ) );
2010-12-21 11:27:34 -05:00
$query_args [ 'fields' ] = 'ids' ;
2017-11-30 18:11:00 -05:00
$authors = get_users ( $query_args );
2007-06-01 01:43:24 -04:00
2007-03-28 21:39:05 -04:00
$author_count = array ();
2017-11-30 18:11:00 -05:00
foreach ( ( array ) $wpdb -> get_results ( " SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE " . get_private_posts_cap_sql ( 'post' ) . ' GROUP BY post_author' ) as $row ) {
$author_count [ $row -> post_author ] = $row -> count ;
2014-05-13 02:02:14 -04:00
}
2010-12-21 11:27:34 -05:00
foreach ( $authors as $author_id ) {
2019-04-17 10:50:50 -04:00
$posts = isset ( $author_count [ $author_id ] ) ? $author_count [ $author_id ] : 0 ;
2009-03-17 22:43:45 -04:00
2019-04-17 10:50:50 -04:00
if ( ! $posts && $args [ 'hide_empty' ] ) {
2010-09-15 15:52:25 -04:00
continue ;
2014-05-13 02:02:14 -04:00
}
2009-03-17 22:43:45 -04:00
2019-04-17 10:50:50 -04:00
$author = get_userdata ( $author_id );
2005-10-12 13:01:50 -04:00
2019-04-17 10:50:50 -04:00
if ( $args [ 'exclude_admin' ] && 'admin' === $author -> display_name ) {
2010-09-15 15:52:25 -04:00
continue ;
2014-05-13 02:02:14 -04:00
}
2010-09-15 15:52:25 -04:00
2014-05-13 02:02:14 -04:00
if ( $args [ 'show_fullname' ] && $author -> first_name && $author -> last_name ) {
2005-10-12 13:01:50 -04:00
$name = " $author->first_name $author->last_name " ;
2014-05-13 02:02:14 -04:00
} else {
2010-09-15 15:52:25 -04:00
$name = $author -> display_name ;
2014-05-13 02:02:14 -04:00
}
2005-10-12 13:01:50 -04:00
2014-05-13 02:02:14 -04:00
if ( ! $args [ 'html' ] ) {
2010-09-15 15:52:25 -04:00
$return .= $name . ', ' ;
2009-02-15 04:06:24 -05:00
2010-09-15 15:52:25 -04:00
continue ; // No need to go further to process HTML.
2009-02-15 04:06:24 -05:00
}
2014-05-13 02:02:14 -04:00
if ( 'list' == $args [ 'style' ] ) {
2007-06-01 01:43:24 -04:00
$return .= '<li>' ;
2010-09-15 15:52:25 -04:00
}
2017-11-30 18:11:00 -05:00
$link = sprintf (
'<a href="%1$s" title="%2$s">%3$s</a>' ,
2016-08-23 19:18:29 -04:00
get_author_posts_url ( $author -> ID , $author -> user_nicename ),
/* translators: %s: author's display name */
esc_attr ( sprintf ( __ ( 'Posts by %s' ), $author -> display_name ) ),
$name
);
2010-09-15 15:52:25 -04:00
2014-05-13 02:02:14 -04:00
if ( ! empty ( $args [ 'feed_image' ] ) || ! empty ( $args [ 'feed' ] ) ) {
2010-09-15 15:52:25 -04:00
$link .= ' ' ;
2014-05-13 02:02:14 -04:00
if ( empty ( $args [ 'feed_image' ] ) ) {
2010-09-15 15:52:25 -04:00
$link .= '(' ;
}
2014-05-13 02:02:14 -04:00
$link .= '<a href="' . get_author_feed_link ( $author -> ID , $args [ 'feed_type' ] ) . '"' ;
2010-09-15 15:52:25 -04:00
2014-03-18 18:02:15 -04:00
$alt = '' ;
2014-05-13 02:02:14 -04:00
if ( ! empty ( $args [ 'feed' ] ) ) {
2017-11-30 18:11:00 -05:00
$alt = ' alt="' . esc_attr ( $args [ 'feed' ] ) . '"' ;
2014-05-13 02:02:14 -04:00
$name = $args [ 'feed' ];
2005-10-12 13:01:50 -04:00
}
2004-03-22 23:45:27 -05:00
2010-09-15 15:52:25 -04:00
$link .= '>' ;
2014-05-13 02:02:14 -04:00
if ( ! empty ( $args [ 'feed_image' ] ) ) {
$link .= '<img src="' . esc_url ( $args [ 'feed_image' ] ) . '" style="border: none;"' . $alt . ' />' ;
} else {
2010-09-15 15:52:25 -04:00
$link .= $name ;
2014-05-13 02:02:14 -04:00
}
2010-09-15 15:52:25 -04:00
$link .= '</a>' ;
2004-03-22 23:45:27 -05:00
2014-05-13 02:02:14 -04:00
if ( empty ( $args [ 'feed_image' ] ) ) {
2010-09-15 15:52:25 -04:00
$link .= ')' ;
2014-05-13 02:02:14 -04:00
}
2005-10-12 13:01:50 -04:00
}
2004-03-22 23:45:27 -05:00
2014-05-13 02:02:14 -04:00
if ( $args [ 'optioncount' ] ) {
2017-11-30 18:11:00 -05:00
$link .= ' (' . $posts . ')' ;
2014-05-13 02:02:14 -04:00
}
2010-09-15 15:52:25 -04:00
$return .= $link ;
2014-05-13 02:02:14 -04:00
$return .= ( 'list' == $args [ 'style' ] ) ? '</li>' : ', ' ;
2005-10-12 13:01:50 -04:00
}
2009-02-15 04:06:24 -05:00
2014-05-13 02:02:14 -04:00
$return = rtrim ( $return , ', ' );
2009-02-15 04:06:24 -05:00
2014-05-13 02:02:14 -04:00
if ( ! $args [ 'echo' ] ) {
2007-06-01 01:43:24 -04:00
return $return ;
2014-05-13 02:02:14 -04:00
}
2007-06-01 01:43:24 -04:00
echo $return ;
2004-03-19 11:20:49 -05:00
}
2011-05-12 03:14:44 -04:00
/**
2018-02-13 11:54:31 -05:00
* Determines whether this site has more than one author .
2011-06-10 19:01:45 -04:00
*
2011-05-12 03:14:44 -04:00
* Checks to see if more than one author has published posts .
2018-03-18 10:23:33 -04:00
*
2018-02-13 11:54:31 -05:00
* For more information on this and similar theme functions , check out
2018-03-18 10:23:33 -04:00
* the { @ link https :// developer . wordpress . org / themes / basics / conditional - tags /
2018-02-13 11:54:31 -05:00
* Conditional Tags } article in the Theme Developer Handbook .
2018-03-18 10:23:33 -04:00
*
2011-06-11 00:40:18 -04:00
* @ since 3.2 . 0
2015-05-22 00:14:24 -04:00
*
2015-10-14 19:44:25 -04:00
* @ global wpdb $wpdb WordPress database abstraction object .
2015-05-22 00:14:24 -04:00
*
2011-05-12 03:14:44 -04:00
* @ return bool Whether or not we have more than one author
*/
function is_multi_author () {
global $wpdb ;
2011-06-10 19:01:45 -04:00
2019-07-02 19:42:58 -04:00
$is_multi_author = get_transient ( 'is_multi_author' );
if ( false === $is_multi_author ) {
2017-11-30 18:11:00 -05:00
$rows = ( array ) $wpdb -> get_col ( " SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 2 " );
2011-05-12 03:14:44 -04:00
$is_multi_author = 1 < count ( $rows ) ? 1 : 0 ;
2013-07-10 00:20:41 -04:00
set_transient ( 'is_multi_author' , $is_multi_author );
2011-05-12 03:14:44 -04:00
}
2013-09-13 15:25:10 -04:00
/**
2016-05-22 14:25:26 -04:00
* Filters whether the site has more than one author with published posts .
2013-09-13 15:25:10 -04:00
*
* @ since 3.2 . 0
*
* @ param bool $is_multi_author Whether $is_multi_author should evaluate as true .
*/
2011-09-07 09:53:53 -04:00
return apply_filters ( 'is_multi_author' , ( bool ) $is_multi_author );
2011-05-12 03:14:44 -04:00
}
2011-06-10 19:01:45 -04:00
/**
2011-05-12 03:14:44 -04:00
* Helper function to clear the cache for number of authors .
2011-06-10 19:01:45 -04:00
*
2016-12-27 04:21:44 -05:00
* @ since 3.2 . 0
2017-03-25 11:47:42 -04:00
* @ access private
2011-05-12 03:14:44 -04:00
*/
2019-07-01 04:01:57 -04:00
function __clear_multi_author_cache () { //phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore
2013-07-10 00:20:41 -04:00
delete_transient ( 'is_multi_author' );
2011-05-12 03:14:44 -04:00
}