URL rewrites and pagination

时间:2011-10-11 作者:John

我必须说,我完全是Wordpress自定义URL重写的nooby。在过去的几天里,我一直在寻找如何确定和编写正确的URL重写模式的清晰解释。我有一个自定义页面模板,它使用传递给它的查询变量,例如。http://example.com/pagename?user=username. 在这里,“pagename”指的是自定义页面模板,“user”指的是自定义查询变量。我需要使用URL来表示它http://example.com/pagename/username.

我还需要上面的内容进行分页。所以http://example.com/pagename/username/page/2 应该能够代表http://example.com/pagename/page/2?user=username

如果有人能为我提供一个工作示例,并解释我应该如何确定和编写正确的URL重写模式,那就太好了。

你好,约翰

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

延伸斯蒂芬·哈里斯(StephenHarris)的优秀答案,我会选择;

add_action( \'generate_rewrite_rules\', \'my_rewrite_rules\' );
function my_rewrite_rules( $wp_rewrite )
{
    $wp_rewrite->rules = array(
        \'mypageslug/([^/]+)/page/?([0-9]{1,})/?$\' => $wp_rewrite->index . \'?pagename=mypageslug&user=\' . $wp_rewrite->preg_index( 1 ) . \'&paged=\' . $wp_rewrite->preg_index( 2 ),
        \'mypageslug/([^/]+)/?$\' => $wp_rewrite->index . \'?pagename=mypageslug&user=\' . $wp_rewrite->preg_index( 1 )

    ) + $wp_rewrite->rules;
}
这遵循WordPress core中使用的实际regex标准。Stephen的代码示例的主要变化是$wp_rewrite->index 确保重写传递给WordPress(否则可能会添加到“外部”重写列表)。

其次,也是最重要的,通过pagename 查询字符串中的var-这意味着WordPress的行为就像通常加载带有slug的页面一样mypageslug.

UPDATE: 我忘了添加,请确保user 是公共查询变量,否则WordPress不会从URL映射它。要么用query_vars 或者使用全局$wp;

add_filter( \'query_vars\', \'my_query_vars\' );
function my_query_vars( $vars )
{
    $vars[] = \'user\';
}

// my preferred method - make sure you run this only after \'init\' has fired!
$GLOBALS[\'wp\']->add_query_var( \'user\' );

// then once the request has been parsed (anything after the action \'parse_request\')
$user = get_query_var( \'user\' );

SO网友:Stephen Harris

我遇到了一个类似的问题,并成功地解决了它。事实上我最近写过this blog post 使用此解决方案的。

WordPress使用规则使URL美观,其想法是使用过滤器调用添加规则的函数(然后在进入设置>永久链接并单击保存后,应添加规则)。代码如下:

add_action(\'generate_rewrite_rules\', \'my_rewrite_rules\');
function my_rewrite_rules( $wp_rewrite ) {
  $new_rules = array(
     \'pagename/(.+)\' => \'pagename?user=\'.$wp_rewrite->preg_index(1),
       );

  // Add the new rewrite rule into the top of the global rules array
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
想法是WordPress检查url的格式是否为www.example。com/pagename/something,并使用该内容设置用户变量。

要使分页正常工作,您需要将以下规则添加到$new\\u rules数组中-above 规则已经存在(这是因为WordPress按顺序检查规则)。

    \'pagename/(.+)/page/?([0-9]{1,})\' => \'pagename?user=\'.$wp_rewrite->preg_index(1).\'&paged=\'.$wp_rewrite->preg_index(2),
类似地,这将检查www.example。com/pagename/something/page/2说出并解释为示例。com/pagename?用户=用户名(&U);分页=2。(Paged是WordPress识别的查询变量,用于确定分页中的页面)。

希望这有帮助!

结束

相关推荐

Pagination with custom loop

我的问题可能是Pagination not working with custom loop, 但有一种不同。我使用自定义循环来显示flash游戏。我想按类别在游戏页面上分页。类别php:<?php if ($cat) { $cols = 2; $rows = 4; $paged = ((\'paged\')) ? get_query_var(\'paged\') : 1; $post_per_page = $cols * $rows; // -1 s