刚刚在我的多站点网络中创建了一个页面,用户可以在其中输入站点名称并重定向到该站点。这很好,但如果有输入错误或他们进入一个不存在的网站,它仍然会重定向他们。
是否可以在重定向之前对网络中的站点进行检查以查看其是否存在,如果不存在,则输出错误?
这就是我目前所拥有的:
<?php
if ( ! empty( $_POST[\'sitename\'] ) ) {
$main_site_url = network_site_url();
$domain = preg_replace( "/^https?:\\/\\/(www)?/", \'\', $main_site_url );
$domain = preg_replace( "/\\/u\\//", \'\', $domain );
$path = preg_replace( "/\\//", \'\', trim( $_POST[\'sitename\'] ) );
$path = preg_replace( "/^(.+)$/", "/u/$1/", $path );
$sub_site_url = "https://" . $domain . $path;
// If the sitename does not exist.
if ( ! $blog_id = get_blog_id_from_url( $domain, $path ) ) {
wp_die( \'Sitename does not exist.\' );
}
else {
wp_redirect( $sub_site_url );
exit();
}
} ?>
<form name="linkform" id="linkform" method="post" action="">
<p>
<label for="sitename">Site Name:</label>
<br><input type="text" name="sitename" id="sitename" value="" size="50"/>
</p>
<p class="submit">
<input id="submit" type="submit" name="Submit" class="submit" value="Go"/>
</p>
</form>
SO网友:filipecsweb
您可以通过以下方式执行验证:get_blog_id_from_url($domain, $path)
函数,假设您使用的是目录而不是子域。否则$path
不需要。请参见下面的代码和注释。
<?php
if ( ! empty( $_POST[\'sitename\'] ) ) {
$main_site_url = network_site_url( \'/\' );
$domain = preg_replace( "/^https?:\\/\\/(www)?/", \'\', $main_site_url );
$path = preg_replace( "/\\//", \'\', trim( $_POST[\'sitename\'] ) );
$path = preg_replace( "/^(.+)$/", "/$1/", $path );
// If the sitename does not exist.
if ( ! $blog_id = get_blog_id_from_url( $domain, $path ) ) {
// Perform whatever you want here...
wp_die( \'Sitename does not exist.\' );
} else {
wp_redirect( get_site_url( $blog_id ), 302 );
exit;
}
} ?>
<form name="linkform"
id="linkform"
method="post"
action="">
<p>
<label for="sitename">Site Name:</label>
<br><input type="text" name="sitename" id="sitename" value="" size="50"/>
</p>
<p class="submit">
<input id="submit" type="submit" name="Submit" class="submit" value="Go"/>
</p>
</form>
将PHP代码和表单HTML放在相同的位置/页面上。