我们在域的根目录中有 Wordpress 站点。我们使用的翻译插件将域附加到(在我们的捷克语中)/cs - 这意味着我们可以运行多个翻译,但使用与主要英语网站相同的数据库和 wp-content。
但是,添加的 /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# 部分):
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;
}