我最近创建了一个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>
答案 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_url和wp_login_form,$_SERVER['REQUEST_URI']
的工作原理为this Stack Overflow answer。我想您正在使用WordPress Codex页面中关于wp_login_form
的示例,如果未将WordPress安装到域的根目录,则该页面上提供的重定向参数将导致此行为。