如何使wp-pagenavi在基于表单提交的自定义查询上工作?

时间:2012-07-02 作者:rereradu

我还在wordpress支持论坛上发布了这篇文章,用于scribu的wp pagenavi插件:

http://wordpress.org/support/topic/plugin-wp-pagenavi-custom-query-form-submit-part-2?replies=1

我的情况:

我正在使用表单创建一个自定义查询,该查询显示与某个自定义字段匹配的自定义帖子类型存档中的帖子(例如:对于“自定义帖子类型”,仅显示从表单中选择了“自定义字段”值的帖子)。我知道,这叫做过滤:P

我的自定义帖子类型存档如下所示:

www.example.com/custom-post-type-archive

(请注意,我使用了“post name”permalink设置)

提交表单时,新url为:

www.example.com/custom-post-type-archive?key=value

自定义查询设置为仅显示具有自定义字段值的帖子:

$value = $_GET[\'value\'];
$paged = get_query_var(\'page\');
$args = array(
        \'post_type\' => \'custom-post-type\',
        \'meta_key\' => \'key\',
        \'meta_value\' => $value,
        \'paged\' => $paged,
        \'posts_per_page\' => 10
);
$my_query = new WP_Query($args);
循环之后,我有:

wp_pagenavi(array(\'query\' => $my_query));
wp_reset_postdata();
查询工作正常,我得到了正确的结果。但我在分页工作上有问题。当我转到下一页时,我会得到以下url:

www.example.com/custom-post-type-archive/page/2?key=value

但是分页仍然显示我在第一页,结果是一样的。

如果我手动输入:

www.example.com/custom-post-type-archive?key=value&page=2

我得到了正确的结果(第2页),但所有导航链接都与我在上面手动输入的url相同。

请提供帮助(提示、资源等)。

Thx、Radu

6 个回复
SO网友:swtshweta

您可以尝试为wp pagenavi插件实现基于ajax的分页(请参阅http://wordpressapi.com/2011/05/16/add-ajax-pagination-in-wordpress-blog/ 以供参考)。我想这会解决你的问题。

SO网友:helgatheviking

因为这是在搜索中出现的,所以我想指出,WP Page Navi(从2.74版开始)现在支持自定义查询。

这个WP_Pagenavi FAQ 链接到以下文章进行解释how to use the Pagenavi plugin with a secondary query 通过wp_pagenavi() 函数查询参数。

从教程中:

$my_query = new WP_Query();

while ( $my_query->have_posts() ) : $my_query->the_post();
    the_title();
    // more stuff here
endwhile;

wp_pagenavi( array( \'query\' => $my_query ) );

wp_reset_postdata();    // avoid errors further down the page

SO网友:Babar Al-Amin

问题可能已经在这里解决了:https://stackoverflow.com/a/13216165/1801379

你也可以从这里得到一些想法:https://wordpress.stackexchange.com/a/4131/23290

SO网友:rereradu

以下是我找到的解决方案(注意,我使用的是WP 3.3.2和WP Pagenavi 2.82):

Solution 1: 使用paged 而不是page 作为get_query_var 参数

Solution 2 使用基于ajax的导航,正如swtshweta在文章中指出的那样。(使用Ajax,分页可以正常工作,即使使用page 参数)。

SO网友:p.a.

奇怪的是,提议的答案在我的浏览器上没有显示任何内容。我有最新的WP和最新的Chrome浏览器。无论如何,谢谢你。

虽然wp\\u pagenavi显示正确,链接显示/page2/、/page3/等等,而且我已经在wp\\u查询中添加了$paged或$page属性,但始终会显示第一页。

SO网友:p.a.

Radu中,以下解决方案对我有效:我修改了一个标准分页代码,使其提交“&;page=xxx”,并捕获$page作为表单提交变量。现在它工作得很好。

请注意最后一行,这是进行修改的地方。

global $paged;
$paged = ($_GET["page"]) ? ($_GET["page"]) : 1; //this is where I catch the requested page

function pagenavi( $found_posts, $p = 2 ) { // pages will be show before and after current page
  if ( is_singular() ) return; // don\'t show in single page
  global $paged;
  $max_page =  intval($found_posts / 10) + 1;
  echo(\'max_page=\' . $max_page);
  if ( $max_page == 1 ) return; // don\'t show when only one page
  if ( empty( $paged ) ) $paged = 1;
  echo \'<span class="pages">Page: \' . $paged . \' of \' . $max_page . \' <BR></span> \'; // pages
  if ( $paged > $p + 1 ) p_link( 1, \'First\' );
  if ( $paged > $p + 2 ) echo \'... \';
  for( $i = $paged - $p; $i <= $paged + $p; $i++ ) { // Middle pages
    if ( $i > 0 && $i <= $max_page ) $i == $paged ? print "<span class=\'page-numbers current\'>{$i}</span> " : p_link( $i );
  }
  if ( $paged < $max_page - $p - 1 ) echo \'... \';
  if ( $paged < $max_page - $p ) p_link( $max_page, \'Last\' );
}
 function p_link( $i, $title = \'\' ) {
  if ( $title == \'\' ) $title = "Page {$i}";
  echo "<a class=\'page-numbers\' href=\'", esc_html( $_SERVER[\'REQUEST_URI\'] . \'&page=\' .$i ), "\' title=\'{$title}\'>{$i}</a> ";
}

结束

相关推荐

WP Query Returning All Posts

我有一个自定义的WP查询,它返回每个帖子,而不仅仅是查询指定的帖子。我似乎找不到代码有什么问题,所以我肯定遗漏了什么://Process incoming variable if(!empty($_REQUEST[\'region\'])){ $region = $_REQUEST[\'region\']; } else { $region = NULL; } if (empty($region)) { echo \"