How to use/enable Pagination?

时间:2013-05-05 作者:Enoque

我正在创建一个快捷码,以显示WordPress中具有特定配置文件的用户列表。

但我无法启用或显示分页。我的网站上有25个用户,希望每页显示5个配置文件用户,并包括分页。

我为学生档案添加了一个新角色student和多个使用高级自定义字段的自定义字段。

因此,我需要显示一个学生列表作为适当的字段。到目前为止,问题是我无法启用的分页。

下面是我的代码示例:

add_shortcode(\'list-users\', \'list_users\');

function list_users($atts){

global $wpdb;

$args = array(
    \'blog_id\'      => \'\',
    \'role\'         => \'student\',
    \'meta_key\'     => \'pw_user_status\', //I\'m using the New User Approve Plugin
    \'meta_value\'   => \'approved\',//If user is denied, he is not appears in the list
    \'meta_compare\' => \'\',
    \'meta_query\'   => array(),
    \'include\'      => array(),
    \'exclude\'      => array(),
    \'orderby\'      => \'display_name\',
    \'order\'        => \'ASC\',
    \'offset\'       => \'\',
    \'search\'       => \'\',
    \'number\'       => \'2\',
    \'count_total\'  => true,
    \'fields\'       => \'all\',
    \'who\'          => \'\'
);

$students = get_users($args);

if(is_user_logged_in()){

$content = "<div id=\'list-of-users\'>";

   foreach($students as $student){

    $content .= "<li>";
    $content .= "<div class=\\"edit-profile\\">";
    if(current_user_can(\'administrator\')){
       $link_of_profile_of_user = get_edit_user_link($aluno->ID);
       $content .= "<a href=".$link_of_profile_of_user." class=\\"edit-profile\\">"."Edit this profile"."</a>";
     }
    $content .= "</div>";
    $content .= get_avatar($student->ID);
    $content .= "<span class=\'item\'>Name: </span>" . get_the_author_meta(\'display_name\', $student->ID) . "<br />";
    $content .= "<span class=\'item\'>Date of Birth: </span>" . get_the_author_meta(\'date_of_birth_acf_student\', $student->ID) . "<br />";
    $content .= "<span class=\'item\'>Course: </span>" . get_the_author_meta(\'course_acf_student\', $aluno->ID) . "<br />"
    $content .= "<span class=\'item\'>Email: </span>" . get_the_author_meta(\'user_email\', $student->ID) . "<br />";
    $content .= "<span class=\'item\'>Phone: </span>" . get_the_author_meta(\'phone_acf_student\', $student->ID) . "<br />";
    $content .= "<span class=\'item\'>City: </span>" . get_the_author_meta(\'city_acf_student\', $student->ID) . "<br />";
    $content .= "</li>";

   }//close foreach

$content .= "</div>";

    return $content;

}//close the conditional for user logged

}//close function

2 个回复
最合适的回答,由SO网友:Brian Barnes 整理而成

我知道您说过不能启用用户分页,但如果您不知道如何启用,可以在args数组中传递“number”和“offset”。

在您的示例中,要获取用户的第2页,请将“number”设置为“5”,将“offset”设置为“5”。

如果使用这些变量不合适,您可以始终使用带有计数的for循环(而不是foreach),并每5次迭代插入一个中断,例如。

for ($i = 0; $i < count($students); $i++) {
    // some code here
    if ($i % 5 == 0 && $i != 0 && $i != count($students)) {
        // insert page break code here
    }
}

SO网友:Charles Clarkson

我不经常在WordPress帖子或页面中使用页面,所以我首先用这个手写标记做了一个测试。我使用了26个用户,有目的地获得最后一个页面,页面上只有不到5个学生。只是想确定一下。

<ul>
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
    <li>E</li>
</ul>

<!--nextpage-->

<ul>
    <li>F</li>
    <li>G</li>
    <li>H</li>
    <li>I</li>
    <li>J</li>
</ul>

<!--nextpage-->

<ul>
    <li>K</li>
    <li>L</li>
    <li>M</li>
    <li>N</li>
    <li>O</li>
</ul>

<!--nextpage-->

<ul>
    <li>P</li>
    <li>Q</li>
    <li>R</li>
    <li>S</li>
    <li>T</li>
</ul>

<!--nextpage-->

<ul>
    <li>U</li>
    <li>V</li>
    <li>W</li>
    <li>X</li>
    <li>Y</li>
</ul>

<!--nextpage-->

<ul>
    <li>Z</li>
</ul>
WordPress生成6个页面,页面和帖子编辑器中都有链接。您没有指定正在使用的。

为了用PHP生成此标记,我用此代码创建了虚拟学生列表(A-Z),因为我无法生成您的列表。

// Change this to change the number of students per page.
$students_per_page = 5;

// Set up a dummy user list. (26)
$students = str_split( \'ABCDEFGHIJKLMNOPQRSTUVWXYZ\' );

// Break the whole list in page sized chunks.
$student_chunks = array_chunk( $students, $students_per_page );

// Cycle through each page.
foreach ( $student_chunks as $student_chunk )
    $pages[] = wpse_98352_get_student_page( $student_chunk );

// Add page breaks and echo post or page.
echo join( "\\n<!--nextpage-->\\n", $pages );

/**
 * This code should be replaced with the actual code for each students
 * page.
 *
 * @param array $students A page worth of students.
 * @return string. Text of for this page.
 */
function wpse_98352_get_student_page( $students ) {

    $return .= \'<ul>\';

    foreach ( $students as $student )
        $return .= "<li>$student</li>";

    $return .= \'</ul>\';

    return $return;
}
我得到了这个:

<ul><li>A</li><li>B</li><li>C</li><li>D</li><li>E</li></ul>
<!--nextpage-->
<ul><li>F</li><li>G</li><li>H</li><li>I</li><li>J</li></ul>
<!--nextpage-->
<ul><li>K</li><li>L</li><li>M</li><li>N</li><li>O</li></ul>
<!--nextpage-->
<ul><li>P</li><li>Q</li><li>R</li><li>S</li><li>T</li></ul>
<!--nextpage-->
<ul><li>U</li><li>V</li><li>W</li><li>X</li><li>Y</li></ul>
<!--nextpage-->
<ul><li>Z</li></ul>
我将其粘贴到页面中进行测试。

然后我调整了$students_per_page 变量至6, 这让我想到:

<ul><li>A</li><li>B</li><li>C</li><li>D</li><li>E</li><li>F</li></ul>
<!--nextpage-->
<ul><li>G</li><li>H</li><li>I</li><li>J</li><li>K</li><li>L</li></ul>
<!--nextpage-->
<ul><li>M</li><li>N</li><li>O</li><li>P</li><li>Q</li><li>R</li></ul>
<!--nextpage-->
<ul><li>S</li><li>T</li><li>U</li><li>V</li><li>W</li><li>X</li></ul>
<!--nextpage-->
<ul><li>Y</li><li>Z</li></ul>
因此,该算法似乎可以在每页不同的学生身上运行,即使最后一页小于一整页。

NOTE: 您需要更改wpse_98352_get_student_page() 函数生成页面数据。我只是用这个标记使测试成为可能。您还必须将所有这些内容填充到shortcode函数中。

结束

相关推荐

Optimize shortcode callbacks

我创建了一个插件,在我的WordPress站点中添加了一些短代码。但我是一个PHP新手,所以我相信它可能有一些错误或优化它的方法。它工作正常,显然没有问题。内存使用率为00.04MB。你能看看吗?非常感谢!add_action( \'wp_enqueue_scripts\', \'prefix_add_my_stylesheet\' ); function prefix_add_my_stylesheet() { // Respects SSL, Styl