Je souhaite créer un thème spécifique pour les utilisateurs non connectés, mais je ne sais pas comment créer la fonction ou le plug-in qui leur permet de changer de thème et laisse un autre thème spécifique aux utilisateurs connectés.
Est-ce que quelqu'un sait comment faire cela? Les seuls indices que j’ai eu sont les fonctions switch_theme
et is_user_logged_in
, mais vous ne savez pas comment les utiliser pour le faire.
Merci pour votre temps.
Alors que is_user_logged_in()
peut être utilisé pour déterminer la différence entre un invité et un utilisateur connecté (et donc enregistré), switch_theme( $stylesheet )
modifie les entrées réelles de la base de données dans la table {$wpdb->options}
:
update_option( 'template', $template );
update_option( 'stylesheet', $stylesheet );
update_option( 'current_theme', $new_name );
if ( count( $wp_theme_directories ) > 1 ) {
update_option( 'template_root', get_raw_theme_root( $template, true ) );
update_option( 'stylesheet_root', get_raw_theme_root( $stylesheet, true ) );
} else {
delete_option( 'template_root' );
delete_option( 'stylesheet_root' );
}
update_option( 'theme_switched', $old_theme->get_stylesheet() );
Par conséquent, je ne recommanderais pas de le faire. Changez simplement de "thèmes" - lisez: les feuilles de style chargées - utilisateur/invité
$stylesheet = plugins_dir_url( __FILE__ ).'assets/';
$stylesheet .= is_user_logged_in()
? 'style-user.css'
: 'style-guest.css;
wp_enqueue_style(
'main-stylesheet',
$stylesheet
array( 'commons.css' )
1.0
);
Comme vous pouvez le constater, j’ajoute une dépendance de commons.css
à la feuille de style. Ce serait une autre feuille de style, précédemment enregistrée/mise en file d'attente, contenant toutes les définitions partagées entre les deux.
Vous pouvez remplacer le thème utilisé par WordPress avec les filtres template
et stylesheet
:
/**
* Override the current theme to show non-logged in users.
*
* @link http://wordpress.stackexchange.com/q/142418/1685
*
* @param string $theme
* @return string
*/
function wpse_142418_nopriv_theme( $theme ) {
if ( ! is_user_logged_in() )
$theme = 'mythemefoldername';
return $theme;
}
add_filter( 'stylesheet', 'wpse_142418_nopriv_theme' );
add_filter( 'template', 'wpse_142418_nopriv_theme' );