web-dev-qa-db-ja.com

W3合計キャッシュでis_user_logged_in()を処理する方法

私はユーザ登録とログインを許可するが標準のwp-login.phpなどを介さないサイトを持っています - それはすべてテーマと少しのs2memberの中でもされます。

ページキャッシュが有効になっていると、コードにログインボタンまたは「アカウント」ボタンが表示され、キャッシュされた資料が表示されるという問題が発生しています。

正しいユーザーレベルのメンバーがログインしているかどうかに応じて、どのボタンを表示するかを決定するには、以下のコードを使用します。

<?php if (current_user_is("s2member_level1")) : ?>
    <?php
        $current_user = wp_get_current_user();
        $redirect = '&amp;redirect_to='.urlencode(wp_make_link_relative(get_option('siteurl')));
        $uri = wp_nonce_url( site_url("wp-login.php?action=logout$redirect", 'login'), 'log-out' );
    ?>
    <li class="dropdown">
        <a class="dropdown-toggle" data-toggle="dropdown">My Account</a>
        <ul class="dropdown-menu">
            <li><a href="<?= $uri; ?>">Logout</a></li>
            <li><a href="<?= get_permalink(x); ?>">Edit Account</a></li>
        </ul>
    </li>
<?php else : ?>
    <li class="login-button">
        <a class="btn-lg" href="<?= get_permalink(x); ?>">Member Login</a>
    </li>
<?php endif; ?>

ただし、ページキャッシュを有効にすると、これにはさまざまな問題があります。

W3TCのFAQセクションにあるFragment Cachingのメモを見ていましたが、大きな失敗があるようです。

WordPressの機能は利用できなくなりますのでご注意ください。

したがって、正しく理解していると、フラグメントキャッシングを使用できなくなります。

メンバーのログイン/アカウントボタンはサイトのメインナビゲーションに常時表示されているので、当面はページキャッシュを完全に無効にしました。

動的セクションを処理するための何らかの形のAJAXアプローチを統合する唯一の選択肢は、auth/guestステータスに依存しますか?

1
alexleonard

これは機能です。あなたはログインしているユーザーのためにキャッシュを無効にすることを試みることができますが、それがメインナビゲーションにあるならば、これはまだ設定画面によるように役に立たないでしょう:

ログインユーザーのページをキャッシュしない

認証されていないユーザーは、指定されたページの最後に認証されたユーザーのビューのキャッシュされたバージョンを見ることができます。このオプションを無効にすることはお勧めできません。

この問題について、これをさらに解決する可能性のある他の質問もいくつかあります。

ログアウト後にログインしたと表示される(W3 Total Cacheの問題)

https://stackoverflow.com/questions/19441226/w3-total-cache-still-cached-when-user-logging-by-nicety-login

2
kraftner