列表与Link和Gravatar的网站的列表作者
-
16-10-2019 - |
题
我正在尝试做我认为很容易的事情。我假设错了。我想做的是列出侧边栏上的所有站点的作者,并链接到各自的作者页面,写的帖子数和Gravatar。 WP_LIST_AUTHORS根本没有选择包括Gravatar的选择。这是我拥有的
$blogusers = get_users_of_blog();
if ($blogusers) {
foreach ($blogusers as $bloguser) {
$user = get_userdata($bloguser->user_id);
$post_count = count_user_posts($user->ID);
if ($post_count) {
echo '<li>';
echo '<a href="'.get_bloginfo('url').'/author/' . $user->user_nicename . '">'.get_avatar($user->user_email, '36').'</a>';
echo '<a href="'.get_bloginfo('url').'/author/' . $user->user_nicename . '">'.$user->display_name.' ('.$post_count.')</a><li>';
}
}
}
有两个问题,尽管有两个问题:
- 我找不到将它们按数量帖子排序的方法
- get_users_of_blog是一个折旧的功能。我真的不想使用它。
我能够使用WP_LIST_AUTHORS创建爆炸,但没有任何线索如何以这种方式将数据提取出来。帮助?
解决方案
回答您的问题:
通过后计数排序
您可以将所需的所有信息收集到数组中,并按照帖子数量进行排序,例如:
//function to sort array by filed
function authors_orderBy($data, $field){
$code = "if (\$a['$field'] == \$b['$field']) {return 0;} return (\$a['$field'] < \$b['$field']) ? 1 : -1;";
usort($data, create_function('$a,$b', $code));
return $data;
}
然后更改您的代码:
$blogusers = get_users_of_blog();
if ($blogusers) {
$au = array();
foreach ($blogusers as $bloguser) {
$user = get_userdata($bloguser->user_id);
$post_count = count_user_posts($user->ID);
$au[] = array('user_id' => $user->ID , 'nicename' => $user->user_nicename, 'display_name' => $user->display_name, 'email' => $user->user_email ,'post_count' => $post_count);
}
//Sort array
$au = authors_orderBy($au, 'post_count');
//then loop through the authors
foreach ($au as $aut){
if ($aut['post_count'] > 0) {
echo '<li>';
echo '<a href="'.get_bloginfo('url').'/author/' . $aut['nicename'] . '">'.get_avatar($aut['email'], '36').'</a>';
echo '<a href="'.get_bloginfo('url').'/author/' . $aut['nicename'] . '">'.$aut['display_name'] .' ('.$aut['post_count'].')</a><li>';
}
}
}
get_users_of_blog是折旧
这很奇怪,因为查看codex是的,此功能已折旧,您应该使用 get_users()
该版本3.1应该发货
/**
* Retrieve list of users matching criteria.
*
* @since 3.1.0
* @uses $wpdb
* @uses WP_User_Query See for default arguments and information.
*
* @param array $args
* @return array List of users.
*/
function get_users( $args ) {
$args = wp_parse_args( $args );
$args['count_total'] = false;
$user_search = new WP_User_Query($args);
return (array) $user_search->get_results();
}
但是,如果您查看wp_list_authors,它会使用get_users_of_blog()为本身。
希望这可以帮助。
其他提示
get_users_of_blog()
可以将每个文档弃用,但实际上是 wp_list_authors()
在内部使用( 资源 ),瞬间似乎没有可行的替代方案。
我看到没有简单的自定义方法 wp_list_authors()
您想要的方式。只能建议在您自己的功能中重复使用代码,修改添加Gravatar将是最小的。
侧栏的代码小部件:
add_action( 'widgets_init', 'latest_members_widgets' );
function latest_members_widgets() {
register_widget( 'Latest_Members' );
}
class Latest_Members extends WP_Widget {
function Latest_Members() {
$widget_ops = array( 'classname' => 'latest_members', 'description' => 'Visualizza gli avatar degli utenti iscritti.' );
$this->WP_Widget( 'latest-members-widget', 'Iscritti Recenti', $widget_ops);
}
function widget( $args, $instance ) {
extract( $args );
$title = apply_filters('widget_title', $instance['title'] );
$avatars = $instance['avatars']; ?>
<?php echo $before_widget; ?>
<?php if ( $title ) echo $before_title . $title . $after_title; ?>
<div class="widget_latest_members">
<ul>
<?php global $wpdb;
$szSort = "user_registered";
$aUsersID = $wpdb->get_col( $wpdb->prepare(
"SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY ID DESC LIMIT $avatars", $szSort ));
foreach ( $aUsersID as $iUserID ) :
$user = get_userdata( $iUserID );
echo '<a href="'.get_bloginfo(url).'/?author='.$iUserID.'" rel="profilo" title="Vai al Profilo">'.get_avatar($iUserID, 35,$default=$author->ID).'</a>';
endforeach; ?>
<br />
<div class="totale"><?php $users = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->users"); echo $users." utenti registrati";?></div>
</ul>
</div>
<?php echo $after_widget; }
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = strip_tags( $new_instance['title'] );
$instance['avatars'] = strip_tags( $new_instance['avatars'] );
return $instance;
}
function form( $instance ) {
/* Set up some default widget settings. */
$defaults = array( 'title' => 'Latest Members', 'avatars' => 20);
$instance = wp_parse_args( (array) $instance, $defaults ); ?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>">Titolo:</label>
<br/><input type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'avatars' ); ?>">Numero Avatar da visualizzare:</label>
<br/><input type="text" id="<?php echo $this->get_field_id( 'avatars' ); ?>" name="<?php echo $this->get_field_name( 'avatars' ); ?>" value="<?php echo $instance['avatars']; ?>" />
</p>
<?php
}
}
?>