web-dev-qa-db-fra.com

Comment gérer is_user_logged_in () avec le cache total w3

J'ai un site qui permet aux utilisateurs de s'inscrire et de se connecter mais pas via le wp-login.php standard, etc. - tout est fait dans le thème et un peu de s2member également.

J'ai rencontré des problèmes où, avec la mise en cache des pages activée, mon code affiche un bouton de connexion ou un bouton "votre compte", affichant les éléments mis en cache.

J'utilise le code ci-dessous pour décider quel bouton est affiché selon que le membre de niveau utilisateur approprié est connecté ou non.

<?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; ?>

Cependant, avec la mise en cache des pages activée, cela pose toutes sortes de problèmes.

Je regardais les notes sur la mise en cache des fragments dans la sectionFAQ du W3TC, mais il semble qu'il y ait un problème majeur: il dit:

Sachez que les fonctions WordPress ne seront pas disponibles.

Donc, si je comprends bien, cela m'empêche de pouvoir utiliser la mise en cache de fragments.

Comme le bouton de connexion/mon compte de membre est omniprésent dans le navigateur principal du site, je viens de désactiver la mise en cache des pages pour le moment.

La seule option pour moi d’intégrer une forme d’approche AJAX pour la gestion des sections dynamiques dépend-elle du statut auth/guest?

1
alexleonard

Ceci est une fonctionnalité. Vous pouvez essayer de désactiver la mise en cache pour les utilisateurs connectés, mais si cela se trouve dans la navigation principale, cela ne vous aidera pas, selon les paramètres de l'écran:

Ne cachez pas les pages des utilisateurs connectés

Les utilisateurs non authentifiés peuvent afficher une version en cache de la dernière vue d'un utilisateur authentifié sur une page donnée. Désactiver cette option n'est pas recommandé.

Il existe également d'autres questions sur cette question qui pourraient éclaircir ceci davantage:

Affichage de la connexion après la déconnexion (problème W3 Total Cache)

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

2
kraftner