私はこれでほぼそこにいると思います、しかし、私は作成している著者のディレクトリのために示すためにページ付けリンクを得ることができません。
私のコードは以下のとおりですが、著者のページ間を移動するためのリンクを取得する方法がわかりません。誰かが私を手伝ってくれる?私はこれが役に立つかもしれないという感覚を持っています、しかし私はそれを実装する方法がわかりません:
ありがとう
大須
<?php
/* ****************************************************************** */
/* !LIST AUTHORS */
/* ****************************************************************** */
// THANKS TO:
// http://www.mattvarone.com/wordpress/list-users-with-wp_user_query/
// pagination
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Needed for pagination
$paged -= 1;
$limit = 2;
$offset = $paged * $limit;
// prepare arguments
$args = array(
// search only for Authors role
'role' => 'Subscriber',
// order results by display_name
'orderby' => 'display_name',
// return all fields
'fields' => 'all_with_meta',
'number' => $limit,
'offset' => $offset
);
// Create the WP_User_Query object
$wp_user_query = new WP_User_Query($args);
// Get the results
$authors = $wp_user_query->get_results();
// Check for results
if (!empty($authors))
{
echo '<div class="author-entry">';
// loop trough each author
foreach ($authors as $author)
{
$author_info = get_userdata($author->ID); ?>
<span style="float:left;padding:0 5px 0 0;"><?php echo get_avatar( $author->ID, 50 ); /* http://codex.wordpress.org/Function_Reference/get_avatar */ ?></span>
<span class="fn"><strong>First name</strong> : <?php echo $author_info->first_name; ?></span><br />
<span class="ln"><strong>Last name</strong> : <?php echo $author_info->last_name; ?></span><br />
<span class="em"><strong>Email address</strong> : <a href="mailto:<?php echo $author_info->user_email; ?>"><?php echo $author_info->user_email; ?></a></span><br />
<span class="we"><strong>Website</strong> : <a href="<?php echo $author_info->user_url; ?>"><?php echo $author_info->user_url; ?></a></span><br />
<span class="de"><strong>Bio</strong> :<br /><?php echo $author_info->description ; ?></span>
<div class="clear"> </div>
<?php
}
echo '</div>';
} else {
echo 'No authors found';
}
?>
<?php /* WHAT DO I PUT HERE TO CREATE THE PAGINATION LINKS? */ ?>
これであなたは本当に親密になるでしょう。テストはしていませんが、数回使用した設定とほぼ同じです。
/*
* We start by doing a query to retrieve all users
* We need a total user count so that we can calculate how many pages there are
*/
$count_args = array(
'role' => 'Subscriber',
'fields' => 'all_with_meta',
'number' => 999999
);
$user_count_query = new WP_User_Query($count_args);
$user_count = $user_count_query->get_results();
// count the number of users found in the query
$total_users = $user_count ? count($user_count) : 1;
// grab the current page number and set to 1 if no page number is set
$page = isset($_GET['p']) ? $_GET['p'] : 1;
// how many users to show per page
$users_per_page = 5;
// calculate the total number of pages.
$total_pages = 1;
$offset = $users_per_page * ($page - 1);
$total_pages = ceil($total_users / $users_per_page);
// main user query
$args = array(
// search only for Authors role
'role' => 'Subscriber',
// order results by display_name
'orderby' => 'display_name',
// return all fields
'fields' => 'all_with_meta',
'number' => $users_per_page,
'offset' => $offset // skip the number of users that we have per page
);
// Create the WP_User_Query object
$wp_user_query = new WP_User_Query($args);
// Get the results
$authors = $wp_user_query->get_results();
// check to see if we have users
if (!empty($authors))
{
echo '<div class="author-entry">';
// loop trough each author
foreach ($authors as $author)
{
$author_info = get_userdata($author->ID); ?>
<span style="float:left;padding:0 5px 0 0;"><?php echo get_avatar( $author->ID, 50 ); /* http://codex.wordpress.org/Function_Reference/get_avatar */ ?></span>
<span class="fn"><strong>First name</strong> : <?php echo $author_info->first_name; ?></span><br />
<span class="ln"><strong>Last name</strong> : <?php echo $author_info->last_name; ?></span><br />
<span class="em"><strong>Email address</strong> : <a href="mailto:<?php echo $author_info->user_email; ?>"><?php echo $author_info->user_email; ?></a></span><br />
<span class="we"><strong>Website</strong> : <a href="<?php echo $author_info->user_url; ?>"><?php echo $author_info->user_url; ?></a></span><br />
<span class="de"><strong>Bio</strong> :<br /><?php echo $author_info->description ; ?></span>
<div class="clear"> </div>
<?php
}
echo '</div>';
} else {
echo 'No authors found';
}
// grab the current query parameters
$query_string = $_SERVER['QUERY_STRING'];
// The $base variable stores the complete URL to our page, including the current page arg
// if in the admin, your base should be the admin URL + your page
$base = admin_url('your-page-path') . '?' . remove_query_arg('p', $query_string) . '%_%';
// if on the front end, your base is the current page
//$base = get_permalink( get_the_ID() ) . '?' . remove_query_arg('p', $query_string) . '%_%';
echo paginate_links( array(
'base' => $base, // the base URL, including query arg
'format' => '&p=%#%', // this defines the query parameter that will be used, in this case "p"
'prev_text' => __('« Previous'), // text for previous page
'next_text' => __('Next »'), // text for next page
'total' => $total_pages, // the total number of pages we have
'current' => $page, // the current page
'end_size' => 1,
'mid_size' => 5,
));
あなたは本当にPippinによる答えを使うべきではありません。クエリは非常に非効率的です。この例の$user_count_query
は、すべてのユーザーフィールドを使用して、データベースから最大999,999のユーザーをスクリプトに返すことができます。あなたのサイトが十分に大きくなったときに、これはPHPのメモリおよび/または時間制限にきっと当たります。
しかし、それが2012年の唯一の解決策だったのかもしれません。
これを実行するためのより良い方法です。この例では、私は 次と前のページ しか持っていませんが、番号付きページ付けが必要な場合は、それを構築するための変数があります。 WordPressには(私の知る限りでは)WP_User_Queryと互換性のあるページ区切り機能はありません。
<?php
// Pagination vars
$current_page = get_query_var('paged') ? (int) get_query_var('paged') : 1;
$users_per_page = 2; // RAISE THIS AFTER TESTING ;)
$args = array(
'number' => $users_per_page, // How many per page
'paged' => $current_page // What page to get, starting from 1.
);
$users = new WP_User_Query( $args );
$total_users = $users->get_total(); // How many users we have in total (beyond the current page)
$num_pages = ceil($total_users / $users_per_page); // How many pages of users we will need
?>
<h3>Page <?php echo $current_page; ?> of <?php echo $num_pages; ?></h3>
<p>Displaying <?php echo $users_per_page; ?> of <?php echo $total_users; ?> users</p>
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php
if ( $users->get_results() ) foreach( $users->get_results() as $user ) {
$firstname = $user->first_name;
$lastname = $user->last_name;
$email = $user->user_email;
?>
<tr>
<td><?php echo esc_html($firstname); ?></td>
<td><?php echo esc_html($lastname); ?></td>
<td><?php echo esc_html($email); ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<p>
<?php
// Previous page
if ( $current_page > 1 ) {
echo '<a href="'. add_query_arg(array('paged' => $current_page-1)) .'">Previous Page</a>';
}
// Next page
if ( $current_page < $num_pages ) {
echo '<a href="'. add_query_arg(array('paged' => $current_page+1)) .'">Next Page</a>';
}
?>
</p>
2ページ目の表示例
次の/前のページへのリンクの代わりに ページ番号 を使用する場合は、次のように設定します。数字をページリンクに置き換える必要があることに注意してください。この例ではクリックできません( https://stackoverflow.com/a/11274294/470480 に基づきます)。ページが実際にスキップされない限り、「...」は追加しないでください。
この目的のために再利用可能な関数を含む 私のGistファイル も見ることができます。
$current_page = 5; // Example
$num_pages = 10; // Example
$Edge_number_count = 2; // Change this, optional
$start_number = $current_page - $Edge_number_count;
$end_number = $current_page + $Edge_number_count;
// Minus one so that we don't split the start number unnecessarily, eg: "1 ... 2 3" should start as "1 2 3"
if ( ($start_number - 1) < 1 ) {
$start_number = 1;
$end_number = min($num_pages, $start_number + ($Edge_number_count*2));
}
// Add one so that we don't split the end number unnecessarily, eg: "8 9 ... 10" should stay as "8 9 10"
if ( ($end_number + 1) > $num_pages ) {
$end_number = $num_pages;
$start_number = max(1, $num_pages - ($Edge_number_count*2));
}
if ($start_number > 1) echo " 1 ... ";
for($i=$start_number; $i<=$end_number; $i++) {
if ( $i === $current_page ) echo " [{$i}] ";
else echo " {$i} ";
}
if ($end_number < $num_pages) echo " ... {$num_pages} ";
出力(1〜10ページ):
[1] 2 3 4 5 ... 10
1 [2] 3 4 5 ... 10
1 2 [3] 4 5 ... 10
1 2 3 [4] 5 ... 10
1 ... 3 4 [5] 6 7 ... 10
1 ... 4 5 [6] 7 8 ... 10
1 ... 6 [7] 8 9 10
1 ... 6 7 [8] 9 10
1 ... 6 7 8 [9] 10
1 ... 6 7 8 9 [10]
完全な功績は彼の答えのために@ radley-sustaireに行かなければなりません、しかし、私はここで答えの私のバージョンを共有しているので、私はそれで小さな欠陥を見つけました。
私のバージョンでは、場所やキーワードなどで結果を絞り込んでいたので、 '$ users_per_page'変数よりも結果が少ないページがありました。たとえば、1ページあたりのユーザー数が10に設定されていても、フィルタの結果が3人のユーザーしか返さない場合、ページの上部に「10人中3人のユーザーを表示」と表示されます。明らかにこれは意味がないので、結果のカウントが '$ users_per_page'変数よりも大きいかどうかをチェックするための単純な "if"ステートメントを追加しました。
Radley、あなたがあなたの答えをアップデートで編集した場合、私はそれがPippinの解決策よりも優れていると思うので、私はそれを正解として喜んで投票します。
だからこれはそれを望んでいる人のための最後のコードです。
<?php
// Pagination vars
$current_page = get_query_var('paged') ? (int) get_query_var('paged') : 1;
$users_per_page = 10;
$args = array(
'number' => $users_per_page, // How many per page
'paged' => $current_page // What page to get, starting from 1.
);
$users = new WP_User_Query( $args );
$total_users = $users->get_total(); // How many users we have in total (beyond the current page)
$num_pages = ceil($total_users / $users_per_page); // How many pages of users we will need
if ($total_users < $users_per_page) {$users_per_page = $total_users;}
?>
<h3>Page <?php echo $current_page; ?> of <?php echo $num_pages; ?></h3>
<p>Displaying <?php echo $users_per_page; ?> of <?php echo $total_users; ?> users</p>
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php
if ( $users->get_results() ) foreach( $users->get_results() as $user ) {
$firstname = $user->first_name;
$lastname = $user->last_name;
$email = $user->user_email;
?>
<tr>
<td><?php echo esc_html($firstname); ?></td>
<td><?php echo esc_html($lastname); ?></td>
<td><?php echo esc_html($email); ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<p>
<?php
// Previous page
if ( $current_page > 1 ) {
echo '<a href="'. add_query_arg(array('paged' => $current_page-1)) .'">Previous Page</a>';
}
// Next page
if ( $current_page < $num_pages ) {
echo '<a href="'. add_query_arg(array('paged' => $current_page+1)) .'">Next Page</a>';
}
?>
</p>