登录wordpress会在URL中添加一个子目录

时间:2014-05-05 13:33:12

标签: php wordpress

我最近创建了一个wordpress主题,并希望在主页面上拥有自己的登录区域。我使用的代码如下,但由于某种原因,它并没有完全奏效。它允许我登录,但是当我这样做时,我被重定向到example.com/wordpress/wordpress/而不是example.com/wordpress/,我无法确定额外子目录的来源。代码'工作'因为如果我在获得404后手动更改了网址,我已登录,但我无法弄清楚它为什么会这样做。

<?php $args = array(
        'echo'           => false,
        'redirect'       => site_url( $_SERVER['REQUEST_URI'] ), 
        'form_id'        => 'loginform',
        'label_username' => __( 'Username' ),
        'label_password' => __( 'Password' ),
        'label_remember' => __( 'Remember Me' ),
        'label_log_in'   => __( 'Log In' ),
        'id_username'    => 'user_login',
        'id_password'    => 'user_pass',
        'id_remember'    => 'rememberme',
        'id_submit'      => 'wp-submit',
        'remember'       => true,
        'value_username' => NULL,
        'value_remember' => false
    );
        wp_login_form( $args );  

    echo '<form name="' . $args['form_id'] . '" id="' . $args['form_id'] . '" action="' . esc_url( site_url( 'wp-login.php', 'login_post' ) ) . '" method="post">';
    ?>
    <table>
    <tr>
        <td>Username</td>
        <td>Password</td>
        <td></td>
    </tr>
    <tr>
        <td><?php echo '<input type="text" name="log" id="' . esc_attr( $args['id_username'] ) . '" class="input" value="' . esc_attr( $args['value_username'] ) . '" size="12" />'; ?></td>
        <td><?php echo '<input type="password" name="pwd" id="' . esc_attr( $args['id_password'] ) . '" class="input" value="" size="12" />'; ?></td>
        <td><?php echo '<input type="submit" name="wp-submit" id="' . esc_attr( $args['id_submit'] ) . '" class="button-primary" value="' . esc_attr( $args['label_log_in'] ) . '" />
                        <input type="hidden" name="redirect_to" value="' . esc_url( $args['redirect'] ) . '" />'; ?></td>
    </tr>
    </table>
    </form>

1 个答案:

答案 0 :(得分:0)

我假设您已将WordPress安装到http://www.example.com/wordpress。代码中的问题是redirect数组的$args参数。你有:

'redirect' => site_url( $_SERVER['REQUEST_URI'] ),

site_url函数将返回您在WordPress中配置的基本网址,在本例中为http://www.example.com/wordpress,并在结尾处添加$_SERVER['REQUEST_URI']的内容,在这种情况下为/wordpress,因此您最终得到http://www.example.com/wordpress/wordpress

要解决此问题,您要传递给redirect的参数是您要重定向到的/wordpress目录下的任何网址。例如:

'redirect' => site_url( '/some-example-page/' ),

将重定向到http://www.example.com/wordpress/some-example-page/

'redirect' => site_url(),

将重定向到WordPress安装的基础http://www.example.com/wordpress

如果从redirect数组中删除$args参数,则默认值redirect将是调用该函数的任何页面。

有关这些功能的详情,请参阅WordPress Codex上的site_urlwp_login_form$_SERVER['REQUEST_URI']的工作原理为this Stack Overflow answer。我想您正在使用WordPress Codex页面中关于wp_login_form的示例,如果未将WordPress安装到域的根目录,则该页面上提供的重定向参数将导致此行为。