Sur la base de réponses comme celle-ci , j’ai créé un petit plugin pour afficher un thème affichant un thème "Bientôt disponible", tandis que notre équipe de rédacteurs peut remplir le thème final.
Cela a fonctionné hier, mais aujourd'hui, même si je suis connecté, je ne vois que le thème "attente". Je me suis déconnecté puis reconnecté, mais je vois quand même le thème "En attente", comme si la fonction is_user_logged_in()
avait renvoyé la valeur false. Ces crochets sont-ils trop tôt pour vérifier l'authentification de l'utilisateur?
<?php
add_filter('template', 'pxln_change_theme');
add_filter('stylesheet', 'pxln_change_theme');
function pxln_change_theme($theme) {
if ( ! is_user_logged_in() ) {
$theme = 'waiting';
}
return $theme;
}
Filtres , contrairement aux actions, ne s'exécutent pas à un moment donné, mais lorsque la fonction à laquelle elles sont attachées est également appelée. Le filtre modèle est appelé à partir de get_template
et le filtre de feuille de style à partir de get_stylesheet
.
En règle générale, ces fonctions sont appelées pour mettre en file d'attente les styles et les scripts à l'aide de wp_enqueue-scripts
, une action qui a lieu après la définition de l'utilisateur actuel. Cependant, il n'est pas rare de voir ces fonctions également appelées à partir d'une fonction associée à after_setup_theme
, qui est déclenchée avant que l'utilisateur actuel ait été défini.
Donc, vous devrez vérifier votre thème pour l'utilisation de get_template
et get_stylesheet
(ou une fonction qui les utilise, que vous pouvez trouver sous "utilisé par" dans les liens ci-dessus). Ensuite, vérifiez si la fonction est attachée à un crochet trop tôt.
Essayez de vous accrocher à tous ceux-ci:
(Mais je suppose que vous devriez le faire à partir d'un plugin, car le faire à partir du thème functions.php
pourrait être trop tard).
Par exemple.:
/*
Plugin Name: test
Description: switchtest
Version: 0.1.0
*/
add_filter( 'template', 'yourthing_switch_theme' );
add_filter( 'option_template', 'yourthing_switch_theme' );
add_filter( 'option_stylesheet', 'yourthing_switch_theme' );
add_filter( 'pre_option_stylesheet', 'yourthing_switch_theme' );
function yourthing_switch_theme( $theme )
{
if ( is_user_logged_in() ) {
return $theme;
}
else {
return 'waiting';
}
}