我最近创建了一个wordpress主题,并希望在主页上有我自己的登录区域。我正在使用的代码如下所示,但由于某种原因,它并不完全工作。它允许我登录,但当我登录时,我被重定向到example.com/wordpress/wordpress/而不是example.com/wordpress/,我不知道额外的子目录是从哪里来的。代码‘工作’是因为如果我在获取404'd后手动更改URL,我就会登录,但我不知道它为什么要这样做。
<?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>发布于 2014-05-05 13:47:13
我假设您已经将WordPress安装到http://www.example.com/wordpress上了。代码中的问题是redirect数组的$args参数。你有:
'redirect' => site_url( $_SERVER['REQUEST_URI'] ),
site_url函数将返回您在WordPress中配置的基本URL,在本例中是http://www.example.com/wordpress,它将向它添加$_SERVER['REQUEST_URI']的内容,在本例中是/wordpress,所以您最终使用了http://www.example.com/wordpress/wordpress。
要解决这个问题,要传递给redirect的参数是要重定向到的/wordpress目录下的任何URL。示例:
'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的默认值将是从哪个页面调用该函数。
有关函数的更多信息,请参见url和表格关于WordPress代码的信息,关于$_SERVER['REQUEST_URI']如何工作的信息,请参阅这个堆栈溢出回答。我认为您正在使用WordPress Codex页面中有关wp_login_form的示例,如果没有将WordPress安装到域的根目录,则该页面上提供的重定向参数将导致这种行为。
https://stackoverflow.com/questions/23473824
复制相似问题