如何使用自定义数组为用户列表创建分页?

时间:2019-03-23 作者:Adham Mohamed

在搜索之后,我没有找到任何解决方案,所以我想知道如何为这样的用户列表创建分页?

非常感谢你的帮助,谢谢。

<?php 

    global $wp_query;

    $topuser = array();

    $avatar_size = 100;

    $args = array(
        \'role__in\'     => array(\'contributor\', \'author\'),
        \'hide_empty\'     => \'1\'
     ); 
    $users = get_users( $args );

    foreach ( $users as $user ) {    

        $query = get_posts( array(\'author\' => $user->ID, \'cat\' => \'3\', \'numberposts\' => -1, \'post_type\'  => \'post\' ));
        $counter = 0;

        $post_count = count_user_posts( $user->ID );

        if ( ! $post_count ) {
            continue;
        }

        // get each post of a user
        foreach ( $query as $post ){
            $views = absint( get_post_meta( $post->ID, \'post_views_count\', true ));
            $counter += $views;
        }
        $topuser[] = array( 
        \'id\' => $user->ID,
        \'views\' => $counter
        );
        wp_reset_query();
    }

    // function to sort array based on views count
    function sortViews($a, $b) {
        return $b[\'views\'] - $a[\'views\'];
    }
    usort($topuser, \'sortViews\'); // sort the array

    //$output = array_slice($topuser, 0, 10); // slice the array by limit 10

    $output = $topuser; // all users

    $rank=0;
    $rankpostcount=0;

    echo \'<div id="top-artists-contributors">\';

    foreach ($output as $user){

    $rank++;
    $rankpostcount++;

        $query = get_posts( array(\'author\' => $user[\'id\'], \'cat\' => \'3\', \'numberposts\' => -1, \'post_type\'  => \'post\' ));
        $avatar = get_avatar($user[\'id\'], $avatar_size);
        $author_profile_url = get_author_posts_url($user[\'id\']);
        $profile = get_userdata($user[\'id\']);

        // update the rank for each user
        update_user_meta( $user[\'id\'], \'user_rank\', $rank );

        if (count($query)) {

        echo \'<div class="rankpostcount-\'.$rankpostcount.\' single-item-9">\';

        echo \'<div class="members-name-9"><a href="\', $author_profile_url, \'">\' . $profile->first_name .\'</a><div class="author-rank-9" title="Artist Rank">\'.$rank.\'</div></div>\';

        echo \'</div>\';         
        }
    }

    echo \'</div>\';
}

?>

Update 1

这是我试图做的,但我无法访问第二页!

<?php 

    global $wp_query;

    $topuser = array();

    $avatar_size = 100;

    $args = array(
        \'role__in\'     => array(\'contributor\', \'author\'),
        \'hide_empty\'     => \'1\'
     ); 
    $users = get_users( $args );

    foreach ( $users as $user ) {    

        $query = get_posts( array(\'author\' => $user->ID, \'cat\' => \'3\', \'numberposts\' => -1, \'post_type\'  => \'post\' ));
        $counter = 0;

        $post_count = count_user_posts( $user->ID );

        if ( ! $post_count ) {
            continue;
        }

        // get each post of a user
        foreach ( $query as $post ){
            $views = absint( get_post_meta( $post->ID, \'post_views_count\', true ));
            $counter += $views;
        }
        $topuser[] = array( 
        \'id\' => $user->ID,
        \'views\' => $counter
        );
        wp_reset_query();
    }

    // function to sort array based on views count
    function sortViews($a, $b) {
        return $b[\'views\'] - $a[\'views\'];
    }
    usort($topuser, \'sortViews\'); // sort the array

    $page = ! empty( $_GET[\'page\'] ) ? (int) $_GET[\'page\'] : 1;
    $total = count( $topuser ); //total items in array    
    $limit = 20; //per page    
    $totalPages = ceil( $total/ $limit ); //calculate total pages
    $page = max($page, 1); //get 1 page when $_GET[\'page\'] <= 0
    $page = min($page, $totalPages); //get last page when $_GET[\'page\'] > $totalPages
    $offset = ($page - 1) * $limit;
    if( $offset < 0 ) $offset = 0;

    $topuser = array_slice( $topuser, $offset, $limit );

    $rank=0;
    $rankpostcount=0;

    echo \'<div id="top-artists-contributors">\';

    foreach ($topuser as $user){

    $rank++;
    $rankpostcount++;

        $query = get_posts( array(\'author\' => $user[\'id\'], \'cat\' => \'3\', \'numberposts\' => -1, \'post_type\'  => \'post\' ));
        $avatar = get_avatar($user[\'id\'], $avatar_size);
        $author_profile_url = get_author_posts_url($user[\'id\']);
        $profile = get_userdata($user[\'id\']);

        // update the rank for each user
        update_user_meta( $user[\'id\'], \'user_rank\', $rank );

        if (count($query)) {

        echo \'<div class="rankpostcount-\'.$rankpostcount.\' single-item-9">\';

        echo \'<div class="members-name-9"><a href="\', $author_profile_url, \'">\' . $profile->first_name .\'</a><div class="author-rank-9" title="Artist Rank">\'.$rank.\'</div></div>\';

        echo \'</div>\';         
        }
    }

    echo \'</div>\';
}

$link = \'index.php?page=%d\';
$pagerContainer = \'<div style="width: 300px;">\';   
if( $totalPages != 0 ) 
{
  if( $page == 1 ) 
  { 
    $pagerContainer .= \'\'; 
  } 
  else 
  { 
    $pagerContainer .= sprintf( \'<a href="\' . $link . \'" style="color: #c00"> &#171; prev page</a>\', $page - 1 ); 
  }
  $pagerContainer .= \' <span> page <strong>\' . $page . \'</strong> from \' . $totalPages . \'</span>\'; 
  if( $page == $totalPages ) 
  { 
    $pagerContainer .= \'\'; 
  }
  else 
  { 
    $pagerContainer .= sprintf( \'<a href="\' . $link . \'" style="color: #c00"> next page &#187; </a>\', $page + 1 ); 
  }           
}                   
$pagerContainer .= \'</div>\';

echo $pagerContainer;
?>

Update 2

尝试使用ajax更新用户排名元

function update_users_ranks() {

    global $wp_query;

    $topuser = array();

$args = array(
    \'role__in\'     => array(\'contributor\', \'author\'),
    \'hide_empty\'     => \'1\'
 ); 
$users = get_users( $args );

    foreach ( $users as $user ) {       
        $query = get_posts( array(\'author\' => $user->ID, \'cat\' => \'3\', \'numberposts\' => -1, \'post_type\'  => \'post\' ));
        $counter = 0;

    $post_count = count_user_posts( $user->ID );

        if ( ! $post_count ) {
            continue;
        }

        // get each post of a user
        foreach ( $query as $post ){
            $views = absint( get_post_meta( $post->ID, \'post_views_count\', true ));
            $counter += $views;
        }
        $topuser[] = array( 
        \'id\' => $user->ID,
        \'views\' => $counter
        );
        wp_reset_query();
    }

    // function to sort array based on views count
    function sortViews($a, $b) {
        return $b[\'views\'] - $a[\'views\'];
    }
    usort($topuser, \'sortViews\'); // sort the array 

    $output = $topuser;
    $rank=0;

    // Update ranks
    foreach ($output as $user){
       $rank++;
       update_user_meta( $user[\'id\'], \'user_rank\', $rank );
    }
    die();
}
add_action(\'wp_ajax_update_users_ranks\' , \'update_users_ranks\');

Update 3

这里是我如何设置、获取和更新帖子视图的。

// function to display number of posts.
function getPostViews($postID){
    $count_key = \'post_views_count\';
    $count = get_post_meta($postID, $count_key, true);
    if($count==\'\'){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, \'0\');
        return "0";
        }
        if ($count > 1000) {
        return round ( $count / 1000 ,1 ).\'K\';
    }
    return $count.\' \';

}

// function to count views.
function setPostViews($postID) {

    $user_ip = $_SERVER[\'REMOTE_ADDR\']; //retrieve the current IP address of the visitor
    $key = $user_ip . \'x\' . $postID; //combine post ID & IP to form unique key
    $value = array($user_ip, $postID); // store post ID & IP as separate values (see note)
    $visited = get_transient($key); //get transient and store in variable

    //check to see if the Post ID/IP ($key) address is currently stored as a transient
    if ( current_user_can(\'administrator\') || false === ( $visited ) ) {

        //store the unique key, Post ID & IP address for 12 hours if it does not exist
        set_transient( $key, $value, 60*60*1 );

        // now run post views function
        $count_key = \'post_views_count\';
        $count = get_post_meta($postID, $count_key, true);
        if($count==\'\'){
            $count = 0;
            delete_post_meta($postID, $count_key);
            add_post_meta($postID, $count_key, \'0\');
        }else{
            $count++;
            update_post_meta($postID, $count_key, $count);
        }


    }

}

1 个回复
最合适的回答,由SO网友:Qaisar Feroz 整理而成
<?php 

        global $wp_query;

        $topuser = array();

        $avatar_size = 100;

        $args = array(
            \'role__in\'     => array(\'contributor\', \'author\'),
            \'hide_empty\'     => \'1\'
         ); 
        $users = get_users( $args );

        foreach ( $users as $user ) {    

            $query = get_posts( array(\'author\' => $user->ID, \'cat\' => \'3\', \'numberposts\' => -1, \'post_type\'  => \'post\' ));
            $counter = 0;

            $post_count = count_user_posts( $user->ID );

            if ( ! $post_count ) {
                continue;
            }

            // get each post of a user
            foreach ( $query as $post ){
                $views = absint( get_post_meta( $post->ID, \'post_views_count\', true ));
                $counter += $views;
            }
            $topuser[] = array( 
            \'id\' => $user->ID,
            \'views\' => $counter
            );
            wp_reset_query();
        }

        // function to sort array based on views count
        function sortViews($a, $b) {
            return $b[\'views\'] - $a[\'views\'];
        }
        usort($topuser, \'sortViews\'); // sort the array





        $rank = 0;

        // Update rank of each user before pagination
        foreach ($topuser as $user){
           $rank++;
           update_user_meta( $user[\'id\'], \'user_rank\', $rank );
        }



        // Pagination 
        $page = ! empty( $_GET[\'pg\'] ) ? (int) $_GET[\'pg\'] : 1;
        $total = count( $topuser ); //total items in array    
        $limit = 20; //per page    
        $totalPages = ceil( $total/ $limit ); //calculate total pages
        $page = max($page, 1); //get 1 page when $_GET[\'pg\'] <= 0
        $page = min($page, $totalPages); //get last page when $_GET[\'pg\'] > $totalPages
        $offset = ($page - 1) * $limit;
        if( $offset < 0 ) $offset = 0;



        // Get users from array for current page
        $topuser = array_slice( $topuser, $offset, $limit );

        //$rank=$offset;
        $rankpostcount=$offset;

        echo \'<div id="top-artists-contributors">\';

        foreach ($topuser as $user){

           //$rank++;
           $rankpostcount++;

            $query = get_posts( array(\'author\' => $user[\'id\'], \'cat\' => \'3\', \'numberposts\' => -1, \'post_type\'  => \'post\' ));
            $avatar = get_avatar($user[\'id\'], $avatar_size);
            $author_profile_url = get_author_posts_url($user[\'id\']);
            $profile = get_userdata($user[\'id\']);

            // get updated rank for each user
            $rank = get_user_meta( $user[\'id\'], \'user_rank\', true );

            if (count($query)) {

                echo \'<div class="rankpostcount-\'.$rankpostcount.\' single-item-9">\';

                echo \'<div class="members-name-9"><a href="\', $author_profile_url, \'">\' . $profile->first_name .\'</a><div class="author-rank-9" title="Artist Rank">\'.$rank.\'</div></div>\';

                echo \'</div>\';         
            }
        }

        echo \'</div>\';
    }

    $link = get_the_permalink().\'?pg=%d\';
    $pagerContainer = \'<div style="width: 300px;">\';   
    if( $totalPages != 0 ) 
    {
      if( $page == 1 ) 
      { 
        $pagerContainer .= \'\'; 
      } 
      else 
      { 
        $pagerContainer .= sprintf( \'<a href="\' . $link . \'" style="color: #c00"> &#171; prev page</a>\', $page - 1 ); 
      }
      $pagerContainer .= \' <span> page <strong>\' . $page . \'</strong> from \' . $totalPages . \'</span>\'; 
      if( $page == $totalPages ) 
      { 
        $pagerContainer .= \'\'; 
      }
      else 
      { 
        $pagerContainer .= sprintf( \'<a href="\' . $link . \'" style="color: #c00"> next page &#187; </a>\', $page + 1 ); 
      }           
    }                   
    $pagerContainer .= \'</div>\';

    echo $pagerContainer;
    ?>