custom wordpress rewrite

时间:2012-06-19 作者:seoppc

我正在尝试自定义重写以下url。。。

http://www.domain.com/lp/1
它将使用

lp.php?p=1
我试过跟踪。。。

add_action( \'init\', \'aagt_rewrite_add_rewrites\' );
function aagt_rewrite_add_rewrites()
{
    add_rewrite_rule(
        \'^lp/(\\d+)/?$\', // p followed by a slash, a series of one or more digits and maybe another slash
        \'lp.php?p=$matches[1]\',
        \'top\'
    );
}
但如果我尝试url(http://www.domain.com/lp/1) 在上面的代码之后,它就不起作用了。如果我遗漏了什么,我已经尝试刷新htaccess规则。请帮忙,谢谢。

2 个回复
SO网友:Milo

WordPress有两种重写规则-内部和外部。内部规则由WordPress解析并路由到index.php. 外部重写写入。htaccess和未定向到WordPress。

现在,您的规则是内部规则和外部规则的混合-您将其结构化为内部规则,但您将其错误地指向index.php.

如果您想在接收此重写规则的代码中使用WordPress环境,则它应该是内部重写。如果希望这是WordPress未处理的外部规则,则需要更改规则以使用$1 而不是$matches[1].

EDIT

这里有两种方法,第一种是快速脏方法-

两种方法的第一步都是添加一个查询变量lpid 到已识别查询变量的WordPress数组:

function wpa55759_query_vars( $query_vars ){
    $query_vars[] = \'lpid\';
    return $query_vars;
}
add_filter( \'query_vars\', \'wpa55759_query_vars\' );
步骤2,将重写规则添加到仅设置lpid 当我们的规则匹配时:

function wpa55759_rewrites(){
    add_rewrite_rule(
        \'lp/(\\d+)/?$\',
        \'index.php?lpid=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'wpa55759_rewrites\' );  
步骤3,挂钩parse_request 并检查是否设置了查询变量。如果是,加载lp.php 从模板目录中,然后退出:

function wpa55759_parse_request( $request ){
    if( isset( $request->query_vars[\'lpid\'] ) ):
        include( get_template_directory() . "/lp.php" );
        exit();
    endif;
    return $request;
}
add_action( \'parse_request\', \'wpa55759_parse_request\' );
获取的值lpid 在…内lp.php:

global $wp;
echo $wp->query_vars[\'lpid\'];
基本上,我们正在检查我们的查询var并尽早退出。WordPress从不运行数据库查询来加载帖子或页面。不确定这可能有什么副作用。

方法二第二种方法是在WordPress中创建页面,lp, 并指出我们的规则,同时传递查询变量:

function wpa55759_rewrites(){
    add_rewrite_rule(
        \'lp/(\\d+)/?$\',
        \'index.php?pagename=lp&lpid=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'wpa55759_rewrites\' );
现在可以创建模板page-lp.php 和访问权限lpid 使用:

echo get_query_var( \'lpid\' );
第二种方法的另一个选项是过滤template_redirect 并在模板层次结构中设置快捷方式,加载您自己的自定义文件:

function wpa55759_template_redirect(){
    global $wp_query;
    if( $wp_query->get( \'lpid\' ) ):
        include( get_template_directory() . "/lp.php" );
        exit();
    endif;
}
add_filter( \'template_redirect\', \'wpa55759_template_redirect\' );

SO网友:Gembel Intelek

转到wp admin/options permalink。php

除了“保存更改”外,无需其他操作

结束

相关推荐

Encoding Method for URLs?

WordPress是否有一种编码URL的方法或API,类似于在URL中使用标题时生成部分URL的方式?我正在编写一个生成URL的插件,并希望使用与其他所有插件相同的方法。例如,我在标题中键入“这是我的博客文章”,然后生成“这是我的博客文章”。