创建重定向到网络中站点的表单?

时间:2019-02-28 作者:joq3

刚刚在我的多站点网络中创建了一个页面,用户可以在其中输入站点名称并重定向到该站点。这很好,但如果有输入错误或他们进入一个不存在的网站,它仍然会重定向他们。

是否可以在重定向之前对网络中的站点进行检查以查看其是否存在,如果不存在,则输出错误?

这就是我目前所拥有的:

<?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>

1 个回复
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放在相同的位置/页面上。