web-dev-qa-db-fra.com

Thème spécifique pour les utilisateurs non connectés

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.

1
TheMadcore

Fonctions - sous le capot

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() );

Solution simple: deux feuilles de style.

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.

4
kaiser

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' );
3
TheDeadMedic