Wordpress站点在子目录中,注销功能失败

时间:2013-04-04 23:39:02

标签: wordpress logout directory-structure

我们在域的根目录中有Wordpress网站。我们使用的翻译插件附加了域(在我们的例子中为捷克语)/ cs - 这意味着我们可以运行多个翻译,但使用与主要英语网站相同的数据库和wp内容。

但是,添加的/ cs导致注销功能失败,因为它尝试使用当前目录作为从中提取实际网站内容的基础。

使用的实际代码是<?php echo wp_logout_url( $redirect ); ?>。我们尝试了一个简单的HTML href,但注销链接是动态的,需要一个唯一的nonce值来验证命令。

您对我们如何使用实际站点地址(mywebsite.com)的注销按钮而不是添加的“目录”(mywebsite.com/cs)有任何想法。到目前为止,我无法编辑 wp_logout_url 以在其之前添加/。有什么想法吗?

示例链接: 正确: http://www.mywebsite.com/backend?action=logout&redirect_to=index.php&_wpnonce=d8eaf8594a

不正确,导致404错误: http://www.mywebsite.com/cs/backend?action=logout&redirect_to=index.php&_wpnonce=d8eaf8594a

正在使用的实际代码(相关的注销代码是#bawlogout#part):

add_filter( 'wp_setup_nav_menu_item', 'bawllm_setup_nav_menu_item' );
function bawllm_setup_nav_menu_item( $item )
{
    global $pagenow;
    if( $pagenow!='nav-menus.php' && !defined('DOING_AJAX') && isset( $item->url ) && strstr( $item->url, '#baw' ) != '' ){
        $item_url = substr( $item->url, 0, strpos( $item->url, '#', 1 ) ) . '#';
        $item_redirect = str_replace( $item_url, '', $item->url );
        switch( $item_url ) {
            case '#bawloginout#' :  
                                    $item_redirect = explode( '|', $item_redirect );
                                    if( count( $item_redirect ) != 2 ) 
                                        $item_redirect[1] = $item_redirect[0];
                                    for( $i = 0; $i <= 1; $i++ ):
                                        if( $item_redirect[$i] == '%actualpage%')
                                            $item_redirect[$i] = $_SERVER['REQUEST_URI'];
                                    endfor;
                                    $item->url = is_user_logged_in() ? wp_logout_url( $item_redirect[1] ) : wp_login_url( $item_redirect[0] );
                                    $item->title = bawllm_loginout_title( $item->title ) ; break;
            case '#bawlogin#' :     $item->url = wp_login_url( $item_redirect ); break;
            case '#bawlogout#' :    $item->url = wp_logout_url( $item_redirect ); break;
            case '#bawregister#' :  if( is_user_logged_in() ) $item->title = '#bawregister#'; else $item->url = site_url( '/wp-login.php?action=register', 'login' ); break;
        }
        $item->url = esc_url( $item->url );
    }
    return $item;
}

2 个答案:

答案 0 :(得分:1)

我会将URL放入变量中,以便您可以在其上执行正则表达式,例如:

<?php

$url       = wp_logout_url( $redirect );
$fixed_url = preg_replace("/stuff_to_find/", "stuff_to_replace", $url);

?>

答案 1 :(得分:0)

最后,我采取了简单的方法,使用.htaccess中的重定向301将该注销链接重定向到/ cs /到/