Modificando WP_LIST_AUTHOR Funções para exibir todos os usuários em uma grade (e Paginate)

O título diz tudo.

Eu tenho tomado WP_LIST_AUTHOR e modificá-lo para criar mais de um diretório de membros do que apenas uma lista de autores, deixando muitas opções originais intactas (e eu vou adicionar mais na linha). Minha primeira tarefa foi construir uma paginação, o que consegui fazer com sucesso (código abaixo) [embora ainda não seja muito bonito].

Agora eu quero que ele construa esta informação em tabelas (provavelmente 15 resultados por página, em uma grade de 3×5. Célula de célula de célula de linha, célula de célula de célula de linha, etc.). Eu não tenho muita certeza sobre a melhor maneira de fazer isso, ou se isso pode ser feito com a maneira atual como o código é construído, qualquer conselho ou resources vinculados serão muito apreciados! Eu realmente estou apenas pirateando coisas juntas;) Observe também; O site usa o plugin s2member e qualquer código precisará não mexer com essa funcionalidade.

<?php /////////////////////// ///// SEXY TIME ///// /////////////////////// /** * CUSTOM FUNCTIONS BY DUIWEL * We are taking the regular wp_list_authors and forcing it to always display all * the authors, as well as have pagination and a better format * * This is my first attempt at a WordPress Hack such as this * * 5/28/2011 * * I have left most of the original function text intact, including the comments below * * I used a lot of code from Crayon Violent at PHPFREAKS * http://www.phpfreaks.com/tutorial/basic-pagination * Most of his/her comments also remain intact * */ //ORIGINAL WP COMMENTS for wp_list_authors /** * List all the authors of the blog, with several options available. * * 
    *
  • optioncount (boolean) (false): Show the count in parenthesis next to the * author's name.
  • *
  • exclude_admin (boolean) (true): Exclude the 'admin' user that is * installed bydefault.
  • *
  • show_fullname (boolean) (false): Show their full names.
  • *
  • hide_empty (boolean) (true): Don't show authors without any posts.
  • *
  • feed (string) (''): If isn't empty, show links to author's feeds.
  • *
  • feed_image (string) (''): If isn't empty, use this image to link to * feeds.
  • *
  • echo (boolean) (true): Set to false to return the output, instead of * echoing.
  • *
  • style (string) ('list'): Whether to display list of authors in list form * or as a string.
  • *
  • html (bool) (true): Whether to list the items in html form or plaintext. *
  • *
* * @link http://codex.wordpress.org/Template_Tags/wp_list_authors * @since 1.2.0 * @param array $args The argument array. * @return null|string The output, if echo is set to false. */ //THE FUNCTION function duiwel_custom_list_users($args = '') { global $wpdb; // HIDE_EMPTY ORIGINALLY TRUE, now FALSE $defaults = array( 'orderby' => 'name', 'order' => 'ASC', 'number' => '', 'optioncount' => false, 'exclude_admin' => true, 'show_fullname' => false, 'hide_empty' => false, 'feed' => 'feed', 'feed_image' => '', 'feed_type' => 'rss2', 'echo' => true, 'style' => 'list', 'html' => true ); $args = wp_parse_args( $args, $defaults ); extract( $args, EXTR_SKIP ); $return = ''; $query_args = wp_array_slice_assoc( $args, array( 'orderby', 'order', 'number' ) ); $query_args['fields'] = 'ids'; $authors = get_users( $query_args ); // FYI This is the post count of each author, not the total count of authors $author_count = array(); 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 ) $author_count[$row->post_author] = $row->count; // need to count 'authors' here $totalusers = count($authors); ////////////////////////////// ////// PAGINATION //////////// ////////////////////////////// $numrows = $totalusers; // number of rows to show per page $rowsperpage = 10; // find out total pages $totalpages = ceil($numrows / $rowsperpage); // get the current page or set a default if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) { // cast var as int $currentpage = (int) $_GET['currentpage']; } else { // default page num $currentpage = 1; } // end if // if current page is greater than total pages... if ($currentpage > $totalpages) { // set current page to last page $currentpage = $totalpages; } // end if // if current page is less than first page... if ($currentpage display_name ) continue; $posts = isset( $author_count[$author->ID] ) ? $author_count[$author->ID] : 0; if ( !$posts && $hide_empty ) continue; $link = ''; if ( $show_fullname && $author->first_name && $author->last_name ) $name = "$author->first_name $author->last_name"; else $name = $author->display_name; if ( !$html ) { $return .= $name . ', '; continue; // No need to go further to process HTML. } if ( 'list' == $style ) { $return .= '
  • '; } //some extra Avatar stuff $avatar = 'wavatar'; $link = get_avatar($author->user_email, '80', $avatar); $link .= '
    ' . ' ID, $author->user_nicename ) . '" title="' . esc_attr( sprintf(__("Posts by %s"), $author->display_name) ) . '">' . $name . ''; if ( !empty( $feed_image ) || !empty( $feed ) ) { $link .= ' '; if ( empty( $feed_image ) ) { //Line breaking for RSS formatting (testing mostly) $link .= '
    ('; } $link .= 'ID ) . '"'; $alt = $title = ''; if ( !empty( $feed ) ) { $title = ' title="' . esc_attr( $feed ) . '"'; $alt = ' alt="' . esc_attr( $feed ) . '"'; $name = $feed; $link .= $title; } $link .= '>'; if ( !empty( $feed_image ) ) $link .= ''; else $link .= $name; $link .= ''; if ( empty( $feed_image ) ) $link .= ')'; } if ( $optioncount ) $link .= ' ('. $posts . ')'; $return .= $link; $return .= ( 'list' == $style ) ? '
  • ' : ', '; } $return = rtrim($return, ', '); if ( !$echo ) return $return; echo $return; ///////////////////////////////////////// ////// END WP_LIST_AUTHOR NORMALCY ////// ///////////////////////////////////////// // little spacer echo "

    "; ////////////////////////////// ////// PAGINATION LINKS ////// ////////////////////////////// /****** build the pagination links ******/ // range of num links to show $range = 3; // if not on page 1, don't show back links if ($currentpage > 1) { // show << link to go back to page 1 echo " << "; // get previous page num $prevpage = $currentpage - 1; // show < link to go back to 1 page echo " < "; } // end if // loop to show links to range of pages around current page for ($x = ($currentpage - $range); $x 0) && ($x <= $totalpages)) { // if we're on current page... if ($x == $currentpage) { // 'highlight' it but don't make a link echo " [$x] "; // if not current page... } else { // make it a link echo " $x "; } // end else } // end if } // end for // if not on last page, show forward and last page links if ($currentpage != $totalpages) { // get next page $nextpage = $currentpage + 1; // echo forward link for next page echo " > "; // echo forward link for lastpage echo " >> "; } // end if /****** end build pagination links ******/ ////////////////////////////////// ////// END PAGINATION LINKS ////// ////////////////////////////////// } /////////////////////////// ///// END SEXY TIME ///// /////////////////////////// ?>

    Solutions Collecting From Web of "Modificando WP_LIST_AUTHOR Funções para exibir todos os usuários em uma grade (e Paginate)"

    Seu trecho é um pouco detalhado demais para seguir (e está atrasado), então é mais uma tomada alternativa. Eu acho que forking wp_list_author() pode ser um exagero aqui. Seria mais elegante engatar dentro da busca do usuário e cortar com precisão a parte dos autores que você precisa.

    Aqui está um exemplo de código que eu criei:

     add_action('pre_user_query','offset_authors'); $authors_per_page = 1; $current_page = absint(get_query_var('page')); function offset_authors( $query ) { global $current_page, $authors_per_page; $offset = empty($current_page) ? 0 : ($current_page - 1) * $authors_per_page; $query->query_limit = "LIMIT {$offset},{$authors_per_page}"; } wp_list_authors(); 

    Verifique também a function paginate_links() para construir paginação.