用户代替帖子:如何修改主查询?

时间:2017-05-27 作者:henrywright

我正在尝试创建用户档案。我的第一个想法是WP_User_Query 在页面内部创建辅助循环。

$wp_user_query = new WP_User_Query( $args );
// Loop here.
在我尝试访问第2、3、4页等之前,这似乎很有效。

主查询(处理分页)是针对页面的,因此主查询中只有1个“post”。这意味着有第一页:

示例。com/页面名称/。。。但在主要查询中,以下内容均不存在:

示例。com/page name/page/2示例。com/page name/page/3示例。正如您所看到的,我使用二次循环的方法并不好,因为分页失败。

My question

是否可以修改主循环以查询用户,而不是帖子?如果是,如何做到这一点?

如果你认为这是一个糟糕的方法,请说明原因(我很高兴听到其他选择)。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

Custom GET pagination parameter

我们可以使用自定义的GET分页参数,例如。upage 或者可能更独特wpse-user-page, 与您的WP_User_Query. 这样可以避免影响主post查询。

Generate pagination links with pageinate_links()

我们可以使用paginate_links() 要生成分页,请执行以下操作:

$args = array(
    \'base\'         => \'%_%\',
    \'format\'       => \'?upage=%#%\',
     \'total\'       => $total_pages,  // e.g. ceil( $total_users / $number ); 
     \'current\'     => $current_page, // from our custom GET pagination parameter
);

$paginate_html = sprintf( 
    \'<div class="users-pagination">%s</div>\', 
    paginate_links( $args ) 
);

Where to display the user archive?

例如,我们可以使用短代码或自定义页面模板将其显示在给定页面上。

Prettify the user archive\'s pagination url

以下是修饰自定义GET分页参数的几种方法:

A) 将其作为自定义端点添加到具有以下内容的页面:

add_rewrite_endpoint( \'upage\', EP_PAGES );
把它挂在init 操作,然后在保存永久链接后,从所有页面访问用户存档:

example.tld/authoes/upage/123/
example.tld/someotherpage/asubpage/upage/123/
... etc ...
然后,我们使用以下内容获取当前页面:

get_query_var( \'upage\', 1 );
B) 如果我们想针对给定的页段塞(例如。authors) 我们可以将以下内容连接到init 挂钩:

add_rewrite_rule( 
    \'^authors/upage/?([0-9]{1,})/?$\', 
    \'index.php?pagename=authors&upage=$matches[1]\', 
    \'top\'
);
然后注册upage 作为查询变量:

add_filter( \'query_vars\', function( $vars ) {
    $vars[] = \'upage\';
    return $vars;
} );
保存永久链接后,我们从以下位置访问用户存档:

example.tld/authors/upage/123/
C) 如果我们还可以覆盖page url部分,对应于paged 查询变量,带:

add_rewrite_rule( 
    \'^authors/page/?([0-9]{1,})/?$\', 
    \'index.php?pagename=authors&upage=$matches[1]\', 
    \'top\'
);
我们注册的地方upage 像以前一样作为查询变量。

保存永久链接后,我们可以从以下位置访问用户存档:

example.tld/authors/page/123/
D) 我们也可以使用page 的查询变量authors 通过以下方式分页并访问用户存档:

example.tld/authors/123/
其中当前页面为:

get_query_var( \'page\', 1 );
请注意,这会干扰内容分页,但对该查询变量没有限制检查。

E) 我们可以模拟core中如何处理注释分页,它使用如下重写:

(.?.+?)/comment-page-([0-9]{1,})/?$
在哪里cpage 是的相应注释分页查询变量([0-9]{1,}) 火柴

或者,还可以考虑使用RESTAPI和javascript方法。core随wp-api Backbone client library 可以处理例如用户集合。

希望有帮助!

结束

相关推荐

Custom Loop Event Page

我需要在事件页面中创建一个循环,每页分页10篇文章。我想用的方法有点复杂。例如,当前日期为2015年5月1日:2015年1月1日至2015年3月1日至2015年6月1日至2015年9月1日我想这样列出我的所有事件:(第一:ASC排序的未来事件)-(第二:DESC排序的过去事件)因此,循环的最终结果是:2015年6月1日至2015年9月1日/-2015年3月1日至2015年1月1日$current_date = current_time( \'timestamp\', true ); $page =