1

ドメインのルートにWordpressサイトがあります。私たちが使用する翻訳プラグインは、ドメインに (この場合はチェコ語の場合) /cs を追加します。つまり、複数の翻訳を実行できますが、メインの英語の Web サイトと同じデータベースと wp-content を使用できます。

ただし、/cs を追加すると、実際のサイト コンテンツの取得元として現在のディレクトリを使用しようとするため、ログアウト機能が失敗します。

実際に使用されているコードは<?php echo wp_logout_url( $redirect ); ?>. シンプルな HTML href を試しましたが、ログアウト リンクは動的であり、コマンドを検証するために一意の nonce 値が必要です。

追加された「ディレクトリ」(mywebsite.com/cs) ではなく、実際のサイト アドレス (mywebsite.com) を使用するログアウト ボタンを作成する方法について何かアイデアはありますか。これまでのところ、wp_logout_urlを編集してその前に / を追加することができませんでした。何か案は?

リンク例: 正解: http://www.mywebsite.com/backend?action=logout&redirect_to=index.php&_wpnonce=d8eaf8594a

正しくないため、404 ERROR が発生します: 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;
}
4

2 に答える 2