我是新来的,对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。
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\' );