web-dev-qa-db-ja.com

非ログインユーザーのための特定のテーマ

ログインしていないユーザー向けに特定のテーマを作りたいのですが、テーマやテーマを変更するための機能やプラグインを作成する方法がわからず、ログインしているユーザー向けに別のテーマを残しました。

誰もがこれを行う方法を知っていますか?私が持っていた唯一の手がかりは、関数switch_themeis_user_logged_inですが、それらをどのようにしてこれを行うために動作させるのか分からないのです。

御時間ありがとうございます。

1
TheMadcore

機能 - ボンネットの下

is_user_logged_in()は、ゲストとログインした(したがって登録された)ユーザーの違いを判断するために使用できますが、switch_theme( $stylesheet ){$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() );

簡単な解決策:2つのスタイルシート。

だから私はそうすることをお勧めしません。ユーザー/ゲストベースで "テーマ"を切り替える - 読み込み:読み込まれたスタイルシート -

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

ご覧のとおり、私はcommons.cssの依存関係をスタイルシートに追加しています。これは、両方の間で共有されるすべての定義を持つ、もう1つの、以前に登録/エンキューされたスタイルシートです。

4
kaiser

WordPressが使用するテーマをtemplateおよび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