Wordpress rewrite question

时间:2013-09-14 作者:user38063

我是新来的,对WordPress中的URL有一个问题。我的网站正面部分使用WordPress,这样我就可以使用CMS和博客进行SEO。我有一个用基本PHP编写的网站的房地产部分,我想看看是否有办法重写URL,以便我可以让客户访问:

http://mysite.com/RepfirstnameReplastname
而不是

http://mysite.com/?rep=RepfirstnameReplastname
当某人现在访问时:

http://mysite.com/?rep=RepfirstnameReplastname
我在顶部有一个标题向下浮动,并显示代表的详细信息。我想做的是让一个人转到像这样的URL:

http://mysite.com/RepfirstnameReplastname
我已将此代码放在WordPress主题头文件中(header.php) 我的主页有id[10]

if(is_page(10)){
                  $url = $_SERVER[\'REQUEST_URI\'];
                  $repurl2 = parse_url($url, PHP_URL_PATH);
                  $repurl = $_GET[\'rep\'];

                  $config = array(
                \'host\'      => \'xxx\',
                \'username\'  => \'xxxx\',
                \'password\'  => \'xxxxx\',
                \'dbname\'    => \'xxxxxx\'
            );

            $db = new PDO(\'sqlsrv:Server=\' . $config[\'host\'] . \';Database=\' . $config[\'dbname\'], $config[\'username\'], $config[\'password\']);
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $getInfo = $db->prepare("SELECT * FROM representatives WHERE Website = ?");
            $getInfo->bindValue(1, $repurl);
            $getInfo->execute();
            $rep = $getInfo->fetch(PDO::FETCH_ASSOC);
            if(isset($rep[\'DisplayName\'])){
                $_SESSION[\'repage\'] = $_GET[\'rep\'];
                $_SESSION[\'repphoto\'] = $rep[\'PhotographURL\'];
                $_SESSION[\'repname\'] = $rep[\'DisplayName\'];
                $_SESSION[\'reptext\'] = $rep[\'WelcomeText\'];

            }

}

if(isset($_SESSION[\'repage\'])){    
    ?>
    <div class="rep">
        <div class="container repinfo">
                <div class="row">
                <div class="span1"><img src="<?=$_SESSION[\'repphoto\'];?>"></div>
                <div class="span11"><strong><? echo $_SESSION[\'repname\']; ?></strong><br /><? echo $_SESSION[\'reptext\']; ?>
                </div>
                <!--<div class="span2">
                <table>
                        <tr><td>Name:</td><td>John Doe</td></tr>
                        <tr><td>Phone:</td><td>555-555-5555</td></tr>
                        <tr><td>Email:</td><td>[email protected]</td></tr>
                </table>
                </div>-->
        </div><!-- row -->
        </div><!-- rep info -->
    </div><!-- rep -->
    <?
}
?>
以上内容为代表从旧SQL server中获取我需要的信息,并正确显示他们的信息。我只想知道如何删除?rep= 超出URL。

1 个回复
SO网友:Milo

这是我在评论中提到的端点解决方案。首先,通过将此代码添加到主题的functions.php 文件:

function wpa_add_rep_endpoint(){
    add_rewrite_endpoint( \'rep\', EP_ROOT );
}
add_action( \'init\', \'wpa_add_rep_endpoint\' );
然后访问Settings > Permalinks 添加端点以刷新重写规则以便此端点生效后,在管理中创建一个页面。

现在,在模板中,您可以使用get_query_var():

$requested_rep = get_query_var( \'rep\' );
编辑这里有另一个选项,您可以使用它来检查404是否是针对某个代表的请求。我们把template_redirect 查询数据库后运行的操作,并查看is_404(). 您可以在此处插入代码以在自己的表中查询匹配的代表名称。如果它通过了您的测试,请发送OK status标题,然后加载显示rep的模板。这有点粗糙,但应该可以工作-

function wpa_check_rep(){
    if( is_404() ){
        global $wp_query;

        // this will contain the potential rep name
        // if the request matches the page rewrite pattern
        $request = $wp_query->query[\'pagename\'];

        $is_valid_rep_name = false;
        // your code to check if $request is a valid rep name here
        // if it is a valid rep name, make WP send a 200 instead of 404
        // and load your desired template
        if( true === $is_valid_rep_name ){
            status_header( \'200\' );
            $wp_query->is_404 = null;
            include( get_template_directory() . \'/rep-template.php\' );
            exit();
        }
    }
}
add_action( \'template_redirect\', \'wpa_check_rep\' );

结束