', __( 'Address (URL) of "Settings -> General" is not set to SSL (https://). Please check the setting.', 'luxeritas' ), '

'; }); } } // CSS の構文チェック $path = TPATH === SPATH ? TPATH : SPATH; foreach( ['style.min.css', 'style-amp.min.css'] as $value ) { if( file_exists( $path . DSEP . $value ) === true ) { $css_check = thk_fgc( $path . DSEP . $value ); if( substr_count( $css_check, '{' ) !== substr_count( $css_check, '}' ) ) { add_action( 'admin_notices', function() { echo '

', __( 'The compression is incomplete because there is a syntax error in CSS.', 'luxeritas' ), '

'; }); } } } // 子テーマのファイル存在チェック(存在してなかったら親からコピー) if( TPATH !== SPATH ) { $files = array( 'add-amp-analytics.php', 'add-amp-body.php', 'add-analytics.php', 'add-analytics-head.php', 'add-footer.php', 'add-header.php', ); foreach( $files as $val ) { if( file_exists( SPATH . DSEP . $val ) === false ) { thk_filesystem_init(); global $wp_filesystem; $wp_filesystem->copy( TPATH . DSEP . $val, SPATH . DSEP . $val ); //@copy( TPATH . DSEP . $val, SPATH . DSEP . $val ); } } } // ajax 処理 if( isset( $_POST ) ) { require( INC . 'admin-ajax.php' ); } // WP 4.9 以降で追加された(勝手な推測による)ウィジェットマッピングへの対抗処置 if( stripos( $_SERVER['REQUEST_URI'], 'wp-admin/themes.php' ) !== false ) { $luxe_widget = get_theme_admin_mod( 'thk_sidebars_widgets', null ); if( isset( $_REQUEST['activated'] ) ) { // 他テーマから移行してきた完全なご新規さんの場合の処理 (前テーマのウィジェット配置からマッピング) $old_theme = trim( (string)get_option( 'theme_switched' ) ); if( empty( $old_theme ) && defined( 'WP_DEFAULT_THEME' ) !== false ) { $old_theme = WP_DEFAULT_THEME; } $old_theme_mods = get_option( 'theme_mods_' . $old_theme ); // Luxeritas -> 他テーマ -> Luxeritas の場合は何もしない if( isset( $old_theme_mods['sidebars_widgets']['data'] ) && empty( $luxe_widget ) ) { $luxe_widget = $old_theme_mods['sidebars_widgets']['data']; $probabilities = array( 'header' => array(), 'footer' => array(), 'sidebar' => array() ); if( $old_theme !== 'luxeritas' && $old_theme !== 'luxech' ) { foreach( (array)$luxe_widget as $key => $val ) { if( $key === 'wp_inactive_widgets' ) { continue; } elseif( stripos( $key, 'header' ) !== false || stripos( $key, 'top' ) !== false ) { $probabilities['header'] += $val; } elseif( stripos( $key, 'footer' ) !== false || stripos( $key, 'bottom' ) !== false ) { $probabilities['footer'] += $val; } else { $probabilities['sidebar'] += $val; } $luxe_widget[$key] = array(); } $luxe_widget['side-h3'] = $probabilities['sidebar']; $luxe_widget['head-under'] = $probabilities['header']; $luxe_widget['footer-left'] = $probabilities['footer']; } set_theme_admin_mod( 'thk_sidebars_widgets', $luxe_widget ); } } add_action( 'shutdown', function() use( $luxe_widget ) { if( !empty( $luxe_widget ) ) { update_option( 'sidebars_widgets', $luxe_widget ); } }); } // オプションに変更があったらウィジェットの配置をバックアップ add_action( 'updated_option', function() { $luxe_widget = get_option( 'sidebars_widgets' ); set_theme_admin_mod( 'thk_sidebars_widgets', $luxe_widget ); }, 70 ); }); /*--------------------------------------------------------------------------- * WordPress 管理画面に「Luxeritas」を追加する *---------------------------------------------------------------------------*/ add_action( 'admin_menu', function() { get_template_part( 'inc/customize' ); $customize = new luxe_customize(); $linefeed = get_locale() === 'ja' ? ' ' : '
'; luxe_menu_page( 'Luxeritas ' . __( 'Customizer', 'luxeritas' ), 'Luxeritas', 'manage_options', 'luxe', array( $customize, 'luxe_custom_form' ), 'dashicons-layout', 59 ); luxe_submenu_page( 'luxe', 'Luxeritas ' . __( 'Customizer', 'luxeritas' ), __( 'Customize', 'luxeritas' ), 'manage_options', 'luxe', array( $customize, 'luxe_custom_form' ) ); luxe_submenu_page( 'luxe', 'Luxeritas Customize', __( 'Customize', 'luxeritas' ) . $linefeed .'(' . __( 'Appearance', 'luxeritas' ) . ')', 'manage_options', 'customize.php?return=' . rawurlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ) . '&luxe=custom', '' ); luxe_submenu_page( 'luxe', 'Luxeritas ' . __( 'Management features', 'luxeritas' ), __( 'Management features', 'luxeritas' ), 'manage_options', 'luxe_man', array( $customize, 'luxe_custom_form' ) ); /* luxe_submenu_page( 'luxe', 'Luxeritas ' . __( 'Registration phrases', 'luxeritas' ), __( 'Registration phrases', 'luxeritas' ), 'manage_options', 'luxe_phrase', array( $customize, 'luxe_custom_form' ) ); */ luxe_submenu_page( 'luxe', 'Luxeritas ' . __( 'Registration pattern', 'luxeritas' ), __( 'Registration pattern', 'luxeritas' ), 'manage_options', 'luxe_pattern', array( $customize, 'luxe_custom_form' ) ); luxe_submenu_page( 'luxe', 'Reusable Blocks', __( 'Reusable Blocks', 'luxeritas' ), 'manage_options', 'edit.php?post_type=wp_block', '' ); luxe_submenu_page( 'luxe', 'Design select', __( 'Design select', 'luxeritas' ), 'manage_options', 'luxe_design', array( $customize, 'luxe_custom_form' ) ); luxe_submenu_page( 'luxe', __( 'Speed settings', 'luxeritas' ), __( 'Speed settings', 'luxeritas' ), 'manage_options', 'luxe_fast', array( $customize, 'luxe_custom_form' ) ); luxe_submenu_page( 'luxe', 'SNS ' . __( 'Counter', 'luxeritas' ), 'SNS ' . __( 'Counter', 'luxeritas' ), 'manage_options', 'luxe_sns', array( $customize, 'luxe_custom_form' ) ); luxe_submenu_page( 'luxe', __( 'Child Theme Editor', 'luxeritas' ), __( 'Child Theme Editor', 'luxeritas' ), 'manage_options', 'luxe_edit', array( $customize, 'luxe_custom_form' ) ); }); /*--------------------------------------------------------------------------- * カスタマイズ内容の変更反映 *---------------------------------------------------------------------------*/ add_action( 'admin_init', function() { global $luxe, $luxe_defaults; if( isset( $_REQUEST['page'] ) && isset( $_POST['_wpnonce'] ) && isset( $_POST['option_page'] ) && ( $_GET['page'] === 'luxe' || substr( $_REQUEST['page'], 0, 5 ) === 'luxe_' ) ) { if( $_POST['option_page'] === 'sns_get' || isset( $_POST['init_process'] ) ) { return true; } if( TPATH === SPATH ) { if( $_REQUEST['page'] === 'luxe_design' || $_REQUEST['page'] === 'luxe_pattern' || $_REQUEST['page'] === 'luxe_high' || $_REQUEST['page'] === 'luxe_edit' ) { add_settings_error( 'luxe-custom', $_POST['option_page'], __( 'The theme selected is not the child theme, but the parent theme', 'luxeritas' ), 'error' ); return false; } } // options.php を経由してないので、ここで nonce のチェック if( check_admin_referer( $_POST['option_page'] . '-options', '_wpnonce' ) ) { $conf = new defConfig(); //$luxe_defaults = $conf->default_variables(); $luxe_defaults = wp_parse_args( $conf->default_variables(), $conf->custom_variables() ); $luxe_defaults = wp_parse_args( $conf->admin_variables(), $luxe_defaults ); $err = false; if( $_POST['option_page'] === 'seo' ) { // SEO thk_customize_result_set( 'canonical_enable', 'checkbox' ); thk_customize_result_set( 'next_prev_enable', 'checkbox' ); thk_customize_result_set( 'rss_feed_enable', 'checkbox' ); thk_customize_result_set( 'atom_feed_enable', 'checkbox' ); thk_customize_result_set( 'top_description', 'text' ); thk_customize_result_set( 'site_name_type', 'radio' ); thk_customize_result_set( 'site_logo', 'text' ); thk_customize_result_set( 'organization_type', 'select' ); thk_customize_result_set( 'organization_logo', 'radio' ); thk_customize_result_set( 'org_logo', 'text' ); thk_customize_result_set( 'meta_keywords', 'radio' ); thk_customize_result_set( 'published', 'select' ); thk_customize_result_set( 'category_or_tag_index', 'radio' ); thk_customize_result_set( 'nextpage_index', 'checkbox' ); } if( $_POST['option_page'] === 'ogp' ) { // OGP thk_customize_result_set( 'facebook_ogp_enable', 'checkbox' ); thk_customize_result_set( 'facebook_admin', 'text' ); thk_customize_result_set( 'facebook_app_id', 'text' ); thk_customize_result_set( 'twitter_card_enable', 'checkbox' ); thk_customize_result_set( 'twitter_card_type', 'select' ); thk_customize_result_set( 'twitter_id', 'text' ); thk_customize_result_set( 'og_img', 'text' ); thk_customize_result_set( 'disable_jetpack_ogp', 'checkbox' ); } elseif( $_POST['option_page'] === 'title' ) { // Title thk_customize_result_set( 'title_sep', 'radio' ); thk_customize_result_set( 'title_top_list', 'radio' ); thk_customize_result_set( 'title_front_page', 'radio' ); thk_customize_result_set( 'title_other', 'radio' ); } elseif( $_POST['option_page'] === 'pagination' ) { // Title thk_customize_result_set( 'items_home', 'radio' ); thk_customize_result_set( 'items_home_num', 'number' ); thk_customize_result_set( 'items_category', 'radio' ); thk_customize_result_set( 'items_category_num', 'number' ); thk_customize_result_set( 'items_archive', 'radio' ); thk_customize_result_set( 'items_archive_num', 'number' ); thk_customize_result_set( 'items_search', 'radio' ); thk_customize_result_set( 'items_search_num', 'number' ); } elseif( $_POST['option_page'] === 'amp' ) { // AMP thk_customize_result_set( 'amp_enable', 'checkbox' ); thk_customize_result_set( 'amp_hidden_comments', 'checkbox' ); if( function_exists( 'get_plugins' ) === false ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $all_plugins = get_plugins(); foreach( (array)$all_plugins as $key => $val ) { //if( is_plugin_active( $key ) === true ) { thk_customize_result_set( 'amp_plugin_' . strlen( $key ) . '_' . md5( $key ), 'checkbox' ); //} } thk_customize_result_set( 'amp_logo_same', 'radio' ); thk_customize_result_set( 'amp_logo', 'text' ); } elseif( $_POST['option_page'] === 'pwa' ) { // PWA thk_customize_result_set( 'pwa_theme_color', 'text' ); thk_customize_result_set( 'pwa_bg_color', 'text' ); thk_customize_result_set( 'pwa_manifest', 'checkbox' ); thk_customize_result_set( 'pwa_enable', 'checkbox' ); //thk_customize_result_set( 'pwa_mobile', 'checkbox' ); thk_customize_result_set( 'pwa_name', 'text' ); thk_customize_result_set( 'pwa_short_name', 'text' ); thk_customize_result_set( 'pwa_description', 'text' ); thk_customize_result_set( 'pwa_install_mibile', 'checkbox' ); thk_customize_result_set( 'pwa_install_widget', 'checkbox' ); thk_customize_result_set( 'pwa_start_url', 'select' ); thk_customize_result_set( 'pwa_offline_enable', 'checkbox' ); thk_customize_result_set( 'pwa_offline_page', 'select' ); thk_customize_result_set( 'pwa_install_button', 'checkbox' ); thk_customize_result_set( 'pwa_display', 'select' ); thk_customize_result_set( 'pwa_orientation', 'select' ); thk_customize_result_set( 'pwa_dynamic_files', 'checkbox' ); thk_customize_result_set( 'pwa_admin_cache_delete', 'checkbox' ); } elseif( $_POST['option_page'] === 'optimize' ) { // HTML thk_customize_result_set( 'html_compress', 'select' ); thk_customize_result_set( 'child_css_compress', 'select' ); thk_customize_result_set( 'child_js_compress', 'select' ); thk_customize_result_set( 'child_js_file_1', 'text' ); thk_customize_result_set( 'child_js_file_2', 'text' ); thk_customize_result_set( 'child_js_file_3', 'text' ); } elseif( $_POST['option_page'] === 'style' ) { // Mode select thk_customize_result_set( 'luxe_mode_select', 'radio' ); // Inline Style thk_customize_result_set( 'css_to_style', 'checkbox' ); thk_customize_result_set( 'wp_block_library_load', 'select' ); thk_customize_result_set( 'css_to_plugin_style', 'checkbox' ); // Child CSS thk_customize_result_set( 'child_css', 'checkbox' ); // Syntax highlighter thk_customize_result_set( 'highlighter_css', 'select' ); // Widget CSS $widget_css = array( 'css_search', 'css_archive', 'css_archive_drop', 'css_calendar', 'css_tagcloud', 'css_new_post', 'css_rcomments', 'css_adsense', 'css_follow_button', 'css_rss_feedly', 'css_qr_code', 'css_pwa_install_box', ); $widget_no_amp = array( 'css_search' => true, ); foreach( $widget_css as $val ) { thk_customize_result_set( $val, 'checkbox' ); if( !isset( $widget_no_amp[$val] ) ) { thk_customize_result_set( 'amp_' . $val, 'checkbox' ); } } } elseif( $_POST['option_page'] === 'script' ) { // jQuery thk_customize_result_set( 'jquery_load', 'select' ); thk_customize_result_set( 'jquery_migrate_load', 'checkbox' ); // jQuery defer thk_customize_result_set( 'jquery_defer', 'checkbox' ); // Bootstrap Plugin thk_customize_result_set( 'bootstrap_js_load_type', 'select' ); // Other Javascript thk_customize_result_set( 'child_script', 'checkbox' ); //thk_customize_result_set( 'html5shiv_load_type', 'checkbox' ); //thk_customize_result_set( 'respondjs_load_type', 'checkbox' ); thk_customize_result_set( 'thk_emoji_disable', 'checkbox' ); thk_customize_result_set( 'thk_embed_disable', 'checkbox' ); } elseif( $_POST['option_page'] === 'lazyload' ) { // Lazy Load thk_customize_result_set( 'lazyload_type', 'radio' ); thk_customize_result_set( 'lazyload_thumbs', 'checkbox' ); thk_customize_result_set( 'lazyload_contents', 'checkbox' ); thk_customize_result_set( 'lazyload_sidebar', 'checkbox' ); thk_customize_result_set( 'lazyload_footer', 'checkbox' ); thk_customize_result_set( 'lazyload_avatar', 'checkbox' ); thk_customize_result_set( 'disable_jetpack_lazyload', 'checkbox' ); thk_customize_result_set( 'lazyload_noscript', 'checkbox' ); thk_customize_result_set( 'lazyload_effect', 'radio' ); } elseif( $_POST['option_page'] === 'icon' ) { // Icon fonts thk_customize_result_set( 'material_load', 'checkbox' ); thk_customize_result_set( 'material_add_rounded', 'checkbox' ); thk_customize_result_set( 'material_add_sharp', 'checkbox' ); thk_customize_result_set( 'material_add_two_tone', 'checkbox' ); thk_customize_result_set( 'material_load_async', 'select' ); thk_customize_result_set( 'awesome_load', 'checkbox' ); thk_customize_result_set( 'awesome_version', 'radio' ); thk_customize_result_set( 'awesome_load_async', 'select' ); thk_customize_result_set( 'awesome_type', 'radio' ); thk_customize_result_set( 'awesome_4_support', 'checkbox' ); } elseif( $_POST['option_page'] === 'search' ) { thk_customize_result_set( 'search_extract', 'radio' ); thk_customize_result_set( 'search_match_method', 'radio' ); thk_customize_result_set( 'comment_search', 'checkbox' ); thk_customize_result_set( 'autocomplete', 'checkbox' ); thk_customize_result_set( 'search_highlight', 'checkbox' ); thk_customize_result_set( 'highlight_bold', 'checkbox' ); thk_customize_result_set( 'highlight_oblique', 'checkbox' ); thk_customize_result_set( 'highlight_bg', 'checkbox' ); thk_customize_result_set( 'highlight_bg_color', 'text' ); thk_customize_result_set( 'search_extract_length', 'text' ); thk_customize_result_set( 'highlight_radius', 'text' ); } elseif( $_POST['option_page'] === 'captcha' ) { thk_customize_result_set( 'captcha_enable', 'radio' ); thk_customize_result_set( 'recaptcha_site_key', 'text' ); thk_customize_result_set( 'recaptcha_secret_key', 'text' ); thk_customize_result_set( 'recaptcha_login_user_disable', 'checkbox' ); thk_customize_result_set( 'recaptcha_v3_score', 'number' ); thk_customize_result_set( 'recaptcha_v3_ptop', 'select' ); thk_customize_result_set( 'recaptcha_theme', 'select' ); thk_customize_result_set( 'recaptcha_size', 'select' ); thk_customize_result_set( 'recaptcha_type', 'select' ); thk_customize_result_set( 'secimg_image_width', 'text' ); thk_customize_result_set( 'secimg_image_height', 'text' ); thk_customize_result_set( 'secimg_start_length', 'text' ); thk_customize_result_set( 'secimg_end_length', 'text' ); thk_customize_result_set( 'secimg_charset', 'select' ); thk_customize_result_set( 'secimg_font_ratio', 'range' ); thk_customize_result_set( 'secimg_color', 'select' ); thk_customize_result_set( 'secimg_bg_color', 'select' ); thk_customize_result_set( 'secimg_perturbation', 'range' ); thk_customize_result_set( 'secimg_noise_level', 'range' ); thk_customize_result_set( 'secimg_noise_color', 'select' ); thk_customize_result_set( 'secimg_num_lines', 'text' ); thk_customize_result_set( 'secimg_line_color', 'select' ); } elseif( $_POST['option_page'] === 'copyright' ) { thk_customize_result_set( 'copyright_since', 'text' ); thk_customize_result_set( 'copyright_auth', 'text' ); thk_customize_result_set( 'copyright_type', 'radio' ); thk_customize_result_set( 'copyright_text', 'textarea' ); } elseif( $_POST['option_page'] === 'others' ) { thk_customize_result_set( 'not404', 'select' ); thk_customize_result_set( 'buffering_enable', 'checkbox' ); thk_customize_result_set( 'add_role_attribute', 'checkbox' ); thk_customize_result_set( 'remove_hentry_class', 'checkbox' ); thk_customize_result_set( 'enable_mb_slug', 'checkbox' ); thk_customize_result_set( 'disable_jetpack_lazyload', 'checkbox' ); //thk_customize_result_set( 'media_alt_auto_input', 'checkbox' ); thk_customize_result_set( 'prevent_tel_links', 'checkbox' ); thk_customize_result_set( 'prevent_email_links', 'checkbox' ); thk_customize_result_set( 'prevent_address_links', 'checkbox' ); thk_customize_result_set( 'prevent_comment_links', 'checkbox' ); thk_customize_result_set( 'allow_self_pingback', 'checkbox' ); thk_customize_result_set( 'smooth_scroll_off', 'checkbox' ); thk_customize_result_set( 'smooth_scroll_hash', 'checkbox' ); thk_customize_result_set( 'user_scalable', 'radio' ); thk_customize_result_set( 'hide_luxe_adminbar', 'checkbox' ); thk_customize_result_set( 'block_based_widgets_enable', 'checkbox', 'admin' ); thk_customize_result_set( 'categories_a_inner', 'checkbox' ); thk_customize_result_set( 'archives_a_inner', 'checkbox' ); thk_customize_result_set( 'parent_css_uncompress', 'checkbox', 'admin' ); thk_customize_result_set( 'measures_against_waf', 'checkbox', 'admin' ); } elseif( $_POST['option_page'] === 'editor' ) { thk_customize_result_set( 'block_editor_off', 'checkbox', 'admin' ); thk_customize_result_set( 'luxe_block_toolbar_off', 'checkbox', 'admin' ); thk_customize_result_set( 'luxe_blocks_off', 'checkbox', 'admin' ); $color_palette = thk_block_editor_color_palette(); $i = 0; foreach( $color_palette as $val ) { thk_customize_result_set( 'block_palette_color_' . $i, 'text', 'admin' ); thk_customize_result_set( 'block_palette_name_' . $i, 'text', 'admin' ); thk_customize_result_set( 'block_palette_slug_' . $i, 'text', 'admin' ); ++$i; } for( $j = 0; 6 > $j; ++$j ) { thk_customize_result_set( 'block_palette_color_' . $i, 'text', 'admin' ); thk_customize_result_set( 'block_palette_name_' . $i, 'text', 'admin' ); thk_customize_result_set( 'block_palette_slug_' . $i, 'text', 'admin' ); ++$i; } } elseif( $_POST['option_page'] === 'thumbnail' ) { require_once( INC . 'thumbnail-images.php' ); $custom_image_sizes = thk_custom_image_sizes::regist_image_sizes(); foreach( $custom_image_sizes as $key => $val ) { // チェックが付いてる方がデフォルトなので checked の結果を反転させる( DB の無駄を無くすため ) if( !isset( $_POST['not_' . $key] ) ) { $_POST['not_' . $key] = true; } else { unset( $_POST['not_' . $key] ); } thk_customize_result_set( 'not_' . $key, 'checkbox' ); } thk_customize_result_set( 'thumb_u1', 'text' ); thk_customize_result_set( 'thumb_u1_a', 'checkbox' ); thk_customize_result_set( 'thumb_u1_w', 'number' ); thk_customize_result_set( 'thumb_u1_h', 'number' ); thk_customize_result_set( 'thumb_u1_c', 'checkbox' ); thk_customize_result_set( 'thumb_u1_s', 'checkbox' ); thk_customize_result_set( 'thumb_u2', 'text' ); thk_customize_result_set( 'thumb_u2_a', 'checkbox' ); thk_customize_result_set( 'thumb_u2_w', 'number' ); thk_customize_result_set( 'thumb_u2_h', 'number' ); thk_customize_result_set( 'thumb_u2_c', 'checkbox' ); thk_customize_result_set( 'thumb_u2_s', 'checkbox' ); thk_customize_result_set( 'thumb_u3', 'text' ); thk_customize_result_set( 'thumb_u3_a', 'checkbox' ); thk_customize_result_set( 'thumb_u3_w', 'number' ); thk_customize_result_set( 'thumb_u3_h', 'number' ); thk_customize_result_set( 'thumb_u3_c', 'checkbox' ); thk_customize_result_set( 'thumb_u3_s', 'checkbox' ); } elseif( $_POST['option_page'] === 'widget' ) { // Widget global $wp_widget_factory; $thk_widget = array(); $widget_bodys = thk_widget_prefix( 'body' ); foreach( $wp_widget_factory->widgets as $key => $val ) { $id_base = $val->id_base; if( !isset( $thk_widget[$id_base] ) ) { $thk_widget[$id_base] = $val->name; } } foreach( (array)$thk_widget as $key => $val ) { foreach( $widget_bodys as $value ) { thk_customize_result_set( $value . $key, 'checkbox' ); } } // Widget Area //global $wp_registered_sidebars; $widgets = thk_widget_areas(); $widget_areas = thk_widget_prefix( 'area' ); foreach( $widgets as $val ) { foreach( $widget_areas as $value ) { thk_customize_result_set( $value . $val['id'], 'checkbox' ); } } unset( $widgets ); thk_customize_result_set( 'block_based_widgets_enable', 'checkbox', 'admin' ); } elseif( $_POST['option_page'] === 'restore' || $_POST['option_page'] === 'restore_appearance' ) { require( INC . 'restore.php' ); } elseif( $_POST['option_page'] === 'reset' ) { thk_customize_result_set( 'all_clear', 'checkbox', 'admin' ); thk_customize_result_set( 'sns_count_cache_cleanup', 'checkbox' ); thk_customize_result_set( 'blogcard_cache_cleanup', 'checkbox' ); thk_customize_result_set( 'blogcard_cache_expire_cleanup', 'checkbox' ); } elseif( $_POST['option_page'] === 'pattern' || $_POST['option_page'] === 'pattern_options' ) { if( $_POST['option_page'] === 'pattern' ) { require( INC . 'block-pattern-regist.php' ); } } elseif( $_POST['option_page'] === 'phrase' || $_POST['option_page'] === 'phrase_options' ) { if( $_POST['option_page'] === 'phrase' ) { require( INC . 'phrase-regist.php' ); } } elseif( $_POST['option_page'] === 'shortcode' || $_POST['option_page'] === 'shortcode_options') { if( $_POST['option_page'] === 'shortcode' ) { require( INC . 'shortcode-regist.php' ); } } elseif( $_POST['option_page'] === 'phrase_sample' || $_POST['option_page'] === 'shortcode_sample' ) { if( $_POST['option_page'] === 'phrase_sample' ) { require( INC . 'phrase-sample.php' ); } elseif( $_POST['option_page'] === 'shortcode_sample' ) { require( INC . 'shortcode-sample.php' ); } thk_customize_result_set( 'balloon_enable', 'checkbox' ); thk_customize_result_set( 'balloon_max_width', 'number' ); thk_customize_result_set( 'balloon_left_color', 'text' ); thk_customize_result_set( 'balloon_left_bg_color', 'text' ); thk_customize_result_set( 'balloon_left_shadow_color', 'text' ); thk_customize_result_set( 'balloon_left_border_color', 'text' ); thk_customize_result_set( 'balloon_left_border_width', 'number' ); thk_customize_result_set( 'balloon_right_color', 'text' ); thk_customize_result_set( 'balloon_right_bg_color', 'text' ); thk_customize_result_set( 'balloon_right_shadow_color', 'text' ); thk_customize_result_set( 'balloon_right_border_color', 'text' ); thk_customize_result_set( 'balloon_right_border_width', 'number' ); } elseif( $_POST['option_page'] === 'design_upload' ) { require( INC . 'design-upload.php' ); } elseif( $_POST['option_page'] === 'design_select' && isset( $_POST['design_select'] ) ) { require( INC . 'appearance-settings.php' ); $appearance_design = Appearance::design(); if( empty( $_POST['design_select'] ) ) { remove_theme_mod( 'design_file' ); foreach( $appearance_design as $key => $val ) { remove_theme_mod( $key ); } } else { set_theme_mod( 'design_file', (string)$_POST['design_select'] ); $json_file = SPATH . DSEP . 'design' . DSEP . $_POST['design_select'] . DSEP . 'luxe-appearance.json'; if( file_exists( $json_file ) === true ) { thk_filesystem_init(); global $wp_filesystem; $json = $wp_filesystem->get_contents( $json_file ); $json = (array)@json_decode( $json ); $json_error = json_error_code_to_msg( json_last_error() ); foreach( $appearance_design as $key => $val ) { remove_theme_mod( $key ); if( isset( $json[$key] ) ) { set_theme_mod( $key, $json[$key] ); } } } else { foreach( $appearance_design as $key => $val ) { remove_theme_mod( $key ); } } } } elseif( ( $_POST['option_page'] === 'design_delete' && isset( $_POST['design_delete'] ) ) || ( $_POST['option_page'] === 'design_reset' && isset( $_POST['design_reset'] ) && $_POST['design_reset'] === 'default-template' ) ) { thk_filesystem_init(); global $wp_filesystem; $del_base = isset( $_POST['design_reset'] ) ? 'default-template' : $_POST['design_delete']; $del_dir = SPATH . DSEP . 'design' . DSEP . $del_base . DSEP; if( $wp_filesystem->delete( $del_dir, true ) === false ) { add_settings_error( 'luxe-custom', $_POST['option_page'], 'An attempt to delete the directory failed.', 'error' ); } if( isset( $_POST['design_reset'] ) && $_POST['design_reset'] === 'default-template' ) { $src = TPATH . DSEP . 'default-template'; $dst = SPATH . DSEP . 'design'; if( $wp_filesystem->is_dir( $src ) === true && $wp_filesystem->is_dir( $dst ) === true ) { $dst .= DSEP . 'default-template'; if( $result = $wp_filesystem->mkdir( $dst, FS_CHMOD_DIR ) === true ) { $result = copy_dir( $src, $dst ); $wp_filesystem->copy( $src . DSEP . 'screenshot-en_US.png', $dst . DSEP . 'screenshot.png' ); } } } else { $current_design = get_theme_mod( 'design_file', null ); if( $current_design === $_POST['design_delete'] ) { require( INC . 'appearance-settings.php' ); $appearance_design = Appearance::design(); remove_theme_mod( 'design_file' ); foreach( $appearance_design as $key => $val ) { remove_theme_mod( $key ); } } } } elseif( $_POST['option_page'] === 'design_create' ) { if( TPATH === SPATH ) { add_settings_error( 'luxe-custom', $_POST['option_page'], __( 'The theme selected is not the child theme, but the parent theme', 'luxeritas' ) . '
' . __( 'This feature can only be used when the child theme is selected.', 'luxeritas' ), 'error' ); } else { if( empty( $_POST['design_name'] ) ) { add_settings_error( 'luxe-custom', $_POST['option_page'], __( 'Filename is not entered.', 'luxeritas' ), 'error' ); } else { if( preg_match( '/^[0-9a-zA-Z-_]+$/', $_POST['design_name'] ) === 1 ) { if( class_exists('thk_create_design') === false ) { require( INC . 'design-create.php' ); } $create_design = new thk_create_design(); $create_design->create_design(); } else { add_settings_error( 'luxe-custom', $_POST['option_page'], __( 'The filename contains characters that can't be used.', 'luxeritas' ), 'error' ); } } } $err = true; } elseif( $_POST['option_page'] === 'fast' ) { thk_customize_result_set( 'html_compress', 'select' ); thk_customize_result_set( 'child_css_compress', 'select' ); thk_customize_result_set( 'child_js_compress', 'select' ); thk_customize_result_set( 'css_to_style', 'checkbox' ); thk_customize_result_set( 'wp_block_library_load', 'select' ); thk_customize_result_set( 'jquery_load', 'select' ); thk_customize_result_set( 'jquery_defer', 'checkbox' ); thk_customize_result_set( 'buffering_enable', 'checkbox' ); thk_customize_result_set( 'lazyload_type', 'radio' ); thk_customize_result_set( 'lazyload_thumbs', 'checkbox' ); thk_customize_result_set( 'lazyload_contents', 'checkbox' ); thk_customize_result_set( 'lazyload_sidebar', 'checkbox' ); thk_customize_result_set( 'lazyload_footer', 'checkbox' ); thk_customize_result_set( 'lazyload_avatar', 'checkbox' ); thk_customize_result_set( 'disable_jetpack_lazyload', 'checkbox' ); thk_customize_result_set( 'sns_count_cache_enable', 'checkbox' ); thk_customize_result_set( 'sns_count_cache_force', 'checkbox' ); thk_customize_result_set( 'sns_count_cache_expire', 'select' ); } elseif( $_POST['option_page'] === 'sns_setting' ) { thk_customize_result_set( 'sns_count_cache_enable', 'checkbox' ); thk_customize_result_set( 'sns_count_cache_force', 'checkbox' ); thk_customize_result_set( 'sns_count_cache_expire', 'select' ); thk_customize_result_set( 'sns_count_weekly_cleanup', 'select' ); thk_customize_result_set( 'sns_count_cache_cleanup', 'checkbox' ); } elseif( $_POST['option_page'] === 'edit_style' || $_POST['option_page'] === 'edit_script' || $_POST['option_page'] === 'edit_header' || $_POST['option_page'] === 'edit_footer' || $_POST['option_page'] === 'edit_analytics' || $_POST['option_page'] === 'edit_analytics_head' || $_POST['option_page'] === 'edit_functions' || $_POST['option_page'] === 'edit_amp_body' || $_POST['option_page'] === 'edit_amp' || $_POST['option_page'] === 'edit_editor' || $_POST['option_page'] === 'design_style' || $_POST['option_page'] === 'design_amp' ) { if( TPATH === SPATH ) return false; $filesystem = thk_filesystem_init(); global $wp_filesystem; $save_file = null; $save_content = ''; switch( $_POST['option_page'] ) { case 'edit_style': $save_file = SPATH . DSEP . 'style.css'; break; case 'edit_script': $save_file = SPATH . DSEP . 'luxech.js'; break; case 'edit_header': $save_file = SPATH . DSEP . 'add-header.php'; break; case 'edit_footer': $save_file = SPATH . DSEP . 'add-footer.php'; break; case 'edit_analytics': thk_customize_result_set( 'analytics_position', 'radio' ); $save_file = SPATH . DSEP . 'add-analytics.php'; break; case 'edit_analytics_head': $save_file = SPATH . DSEP . 'add-analytics-head.php'; break; case 'edit_functions': $save_file = SPATH . DSEP . 'functions.php'; break; case 'edit_amp_body': thk_customize_result_set( 'amp_body_position', 'radio' ); $save_file = SPATH . DSEP . 'add-amp-body.php'; break; case 'edit_amp': $save_file = SPATH . DSEP . 'style-amp.css'; break; case 'edit_editor': $save_file = SPATH . DSEP . 'editor-style.css'; break; case 'design_style': if( isset( $luxe['design_file'] ) ) { $save_file = SPATH . DSEP . 'design' . DSEP . $luxe['design_file'] . DSEP . 'style.css'; } break; case 'design_amp': if( isset( $luxe['design_file'] ) ) { $save_file = SPATH . DSEP . 'design' . DSEP . $luxe['design_file'] . DSEP . 'style-amp.css'; } break; default: break; } if( isset( $save_file ) ) { $save_content .= isset( $_POST['newcontent'] ) ? $_POST['newcontent'] : ''; $save_content = str_replace( "\r\n", "\n", $save_content ); $save_content = stripslashes_deep( thk_convert( $save_content ) ); $theme = wp_get_theme( get_stylesheet() ); if( $_POST['option_page'] === 'edit_style' && $theme->errors() ) { add_settings_error( 'luxe-custom', $_POST['option_page'], __( 'This theme is broken.', 'luxeritas' ) . ' ' . $theme->errors()->get_error_message(), 'error' ); $err = true; } if( $filesystem->file_save( $save_file, $save_content ) === false ) { add_settings_error( 'luxe-custom', $_POST['option_page'], __( 'Error saving file.', 'luxeritas' ), 'error' ); $err = true; } } else { // エラーメッセージ初期化 global $wp_settings_errors; $wp_settings_errors = array(); $err = true; } // CodeMirror の設定 thk_customize_result_set( 'cm_line_numbers', 'checkbox', 'admin' ); thk_customize_result_set( 'cm_autocomplete', 'checkbox', 'admin' ); thk_customize_result_set( 'cm_lint', 'checkbox', 'admin' ); thk_customize_result_set( 'cm_auto_indent', 'checkbox', 'admin' ); thk_customize_result_set( 'cm_close_brackets', 'checkbox', 'admin' ); thk_customize_result_set( 'cm_active_line', 'checkbox', 'admin' ); thk_customize_result_set( 'cm_line_wrapping', 'checkbox', 'admin' ); thk_customize_result_set( 'cm_indent_with_tabs', 'radio', 'admin' ); thk_customize_result_set( 'cm_tab_size', 'number', 'admin' ); } if( $_POST['option_page'] === 'backup_child' ) { if( TPATH === SPATH ) { add_settings_error( 'luxe-custom', $_POST['option_page'], __( 'The theme selected is not the child theme, but the parent theme', 'luxeritas' ) . '
' . __( 'This feature can only be used when the child theme is selected.', 'luxeritas' ), 'error' ); } $err = true; } /* * ショートコードの中で CSS や Javascript が必要なもの */ $shortcodes = get_pattern_list( 'shortcode', false, true ); // 吹き出し if( isset( $shortcodes['balloon_left'] ) || isset( $shortcodes['balloon_right'] ) ) { $_POST['balloon_enable'] = true; set_theme_mod( 'balloon_enable', true ); } if( $err === false ) { add_settings_error( 'luxe-custom', $_POST['option_page'], __( 'Changes are properly reflected', 'luxeritas' ), 'updated' ); } thk_regenerate_files(); thk_cleanup(); } } if( isset( $_GET['page'] ) && ( $_GET['page'] === 'luxe' || substr( $_GET['page'], 0, 5 ) === 'luxe_' ) ) { if( isset( $_POST['site_logo'] ) || get_theme_mod( 'site_logo', null ) !== null ) { $site_logo = ''; if( isset( $_POST['site_logo'] ) ) { $site_logo = $_POST['site_logo']; } else { $site_logo = get_theme_mod( 'site_logo', null ); } $logo_info = thk_get_image_size( $site_logo ); if( ( isset( $logo_info[0] ) && (int)$logo_info[0] > 600 ) || ( isset( $logo_info[1] ) && (int)$logo_info[1] > 60 ) ) { add_settings_error( 'luxe-custom', 'site-logo', sprintf( __( 'The %s logo is too large.', 'luxeritas' ), __( 'Site', 'luxeritas' ) ) . ' (' . __( '* the image must be within 600px width, height 60px.', 'luxeritas' ) . ')', 'error' ); } } if( isset( $_POST['amp_logo_same'] ) || get_theme_mod( 'amp_logo_same', 'smae' ) !== 'same' ) { if( isset( $_POST['amp_logo'] ) || get_theme_mod( 'amp_logo', null ) !== null ) { $amp_logo = ''; if( isset( $_POST['amp_logo'] ) ) { $amp_logo = $_POST['amp_logo']; } else { $amp_logo = get_theme_mod( 'amp_logo', null ); } $logo_info = thk_get_image_size( $amp_logo ); if( ( isset( $logo_info[0] ) && (int)$logo_info[0] > 600 ) || ( isset( $logo_info[1] ) && (int)$logo_info[1] > 60 ) ) { add_settings_error( 'luxe-custom', 'amp-logo', sprintf( __( 'The %s logo is too large.', 'luxeritas' ), 'AMP' ) . ' (' . __( '* the image must be within 600px width, height 60px.', 'luxeritas' ) . ')', 'error' ); } } } } /* * file permission and owner check */ add_action( 'admin_notices', function() { global $luxe, $wp_actions; $filesystem = null; $dir_check = true; // directories if( ( isset( $luxe['pwa_enable'] ) || isset( $luxe['pwa_manifest'] ) ) && !isset( $luxe['pwa_dynamic_files'] ) && wp_is_writable( ABSPATH ) === false ) { _is_writable_error_msg( ABSPATH ); } if( wp_is_writable( TPATH ) === false ) { _is_writable_error_msg( TPATH ); $dir_check = false; } else { if( wp_is_writable( TPATH . DSEP . 'js' ) === false ) { _is_writable_error_msg( TPATH . DSEP . 'js' ); $dir_check = false; } } if( TDEL !== SDEL ) { if( wp_is_writable( SPATH ) === false ) { _is_writable_error_msg( SPATH ); $dir_check = false; } } // files if( $dir_check === true ) { $files = array( TPATH . DSEP . 'style.min.css', TPATH . DSEP . 'style.async.min.css', TPATH . DSEP . 'js' . DSEP . 'luxe.min.js', TPATH . DSEP . 'js' . DSEP . 'ladmin.min.js', //TPATH . DSEP . 'js' . DSEP . 'luxe.async.min.js' ); // AMP if( isset( $luxe['amp_enable'] ) ) { $files[] = TPATH . DSEP . 'style-amp.min.css'; } // 子テーマ if( TDEL !== SDEL ) { if( isset( $luxe['child_css'] ) ) { // 子テーマ CSS if( $luxe['child_css_compress'] !== 'none' ) $files[] = SPATH . DSEP . 'style.min.css'; } if( !isset( $luxe['child_script'] ) ) { // 子テーマ Javascript if( $luxe['child_js_compress'] !== 'none' ) $files[] = SPATH . DSEP . 'luxech.min.js'; } if( isset( $luxe['amp_enable'] ) ) { // 子テーマ AMP $files[] = SPATH . DSEP . 'style-amp.min.css'; } } // jQuery if( $luxe['jquery_load'] === 'luxeritas' ) { $files[] = TPATH . DSEP . 'js' . DSEP . 'jquery.luxe.min.js'; } foreach( $files as $val ) { if( file_exists( $val ) === false ) { thk_filesystem_init(); global $wp_filesystem; $wp_filesystem->touch( $val ); if( file_exists( $val ) === false || ( file_exists( $val ) === true && wp_is_writable( $val ) === false ) ) { _is_writable_error_msg( $val ); } if( file_exists( $val ) === true ) $wp_filesystem->delete( $val ); } elseif( file_exists( $val ) === true && wp_is_writable( $val ) === false ) { _is_writable_error_msg( $val ); } } } // パーマリンク設定が「基本」になってる場合は、PWA のファイル出力は「動的」にはできないため警告を出す if( isset( $_GET['page'] ) && $_GET['page'] === 'luxe' && isset( $_GET['active'] ) && $_GET['active'] === 'pwa' ) { if( isset( $luxe['pwa_dynamic_files'] ) ) { $rules = get_option( 'rewrite_rules' ); if( empty( $rules ) ) { echo '

', __( 'File output cannot be "Dynamic" because the permalink setting is set to "Plain".', 'luxeritas' ), '

'; } } } if( isset( $_POST['amp_enable'] ) || get_theme_mod( 'amp_enable', false ) === true ) { $amp_css_size = 0; if( file_exists( TPATH . DSEP . 'style-amp.min.css' ) === true ) { $amp_css_size += (int)filesize( TPATH . DSEP . 'style-amp.min.css' ); } if( TPATH !== SPATH && file_exists( SPATH . DSEP . 'style-amp.min.css' ) === true ) { $amp_css_size += (int)filesize( SPATH . DSEP . 'style-amp.min.css' ); } if( isset( $_POST['hide_mobile_sidebar'] ) || get_theme_mod( 'hide_mobile_sidebar', false ) === true ) { // サイドバー非表示時の body #main{flex:none;float:none;max-width:100%;} 分の 49byte をプラス $amp_css_size += 49; } if( isset( $_POST['hide_mobile_footer'] ) || get_theme_mod( 'hide_mobile_footer', false ) === true ) { // フッター非表示時の body #foot-in{padding:0} 分の 25byte をプラス $amp_css_size += 25; } if( $amp_css_size > 75000 ) { //add_settings_error( 'luxe-custom', 'amp-css', sprintf( __( 'Stylesheet for AMP is too long. we saw %s bytes where as the limit is 75000 bytes.', 'luxeritas' ), $amp_css_size ), 'error' ); echo '

', sprintf( 'Stylesheet for AMP is too long. we saw %s bytes where as the limit is %s bytes.', number_format($amp_css_size), number_format('75000') ), '

'; } } // Luxeritas と Jetpack の LazyLoad が競合してる場合に管理画面で警告を出す foreach( $wp_actions as $key => $value ) { if( stripos( $key, 'jetpack_' ) === 0 ) { $luxe['fucking_jetpack'] = true; break; } } if( isset( $luxe['fucking_jetpack'] ) ) { $jetpack_active_modules = get_option('jetpack_active_modules'); if( in_array( 'lazy-images', (array)$jetpack_active_modules, true ) === true ) { $jetpack_lazy_images = true; } if( isset( $jetpack_lazy_images ) ) { if( !isset( $luxe['disable_jetpack_lazyload'] ) && ( isset( $luxe['lazyload_thumbs'] ) || isset( $luxe['lazyload_contents'] ) || isset( $luxe['lazyload_avatar'] ) || isset( $luxe['lazyload_sidebar'] ) || isset( $luxe['lazyload_footer'] ) ) ) { echo '

', __( 'Jetpack plugin and Luxeritas theme's Lazy Load function conflict.', 'luxeritas' ), '

'; } } if( !isset( $luxe['disable_jetpack_ogp'] ) && ( isset( $luxe['facebook_ogp_enable'] ) || isset( $luxe['twitter_card_enable'] ) ) ) { echo '

', __( 'Jetpack plugin and Luxeritas theme's OGP conflict.', 'luxeritas' ), '

'; } } else { remove_theme_mod( 'disable_jetpack_ogp' ); remove_theme_mod( 'disable_jetpack_lazyload' ); } }); }, 10 ); add_action( 'init', function() { if( isset( $_GET['page'] ) && isset( $_POST['_wpnonce'] ) && isset( $_POST['option_page'] ) && ( $_GET['page'] === 'luxe_man' || $_GET['page'] === 'luxe_design' || ( $_GET['page'] === 'luxe' && $_POST['option_page'] === 'amp' ) ) ) { if( check_admin_referer( $_POST['option_page'] . '-options', '_wpnonce' ) ) { // AMP のリライトルール追加 if( $_POST['option_page'] === 'amp' ) { require( INC . 'rewrite-rules.php' ); thk_add_endpoint(); } if( $_POST['option_page'] === 'backup' || $_POST['option_page'] === 'backup_appearance' || $_POST['option_page'] === 'backup_child' ) { require( INC . 'backup.php' ); } // サムネイル一括再構築 if( $_POST['option_page'] === 'thumbnail' && isset( $_POST['init_process'] ) ) { if( isset( $_POST['regen_thumbs'] ) ) { add_action( 'shutdown', function() { echo ''; }, 90 ); require( INC . 'regenerate-thumbnail.php' ); $regenerate = new thk_regenerate_thumbs(); $regenerate->regen_thumbs(); } } } } if( isset( $_GET['page'] ) && $_GET['page'] === 'luxe_sns' && isset( $_POST['_wpnonce'] ) && isset( $_POST['option_page'] ) ) { if( check_admin_referer( $_POST['option_page'] . '-options', '_wpnonce' ) ) { // SNS カウントキャッシュ CSV ダウンロード if( $_POST['option_page'] === 'sns_csv' ) { thk_filesystem_init(); global $wp_filesystem; $lst = array(); $feed = 0; $wp_upload_dir = wp_upload_dir(); $cache_dir = $wp_upload_dir['basedir'] . '/luxe-sns/'; foreach( glob( $cache_dir. '*' ) as $val ) { $content = $wp_filesystem->get_contents( $val ); $content = str_replace( "\n", ',', $content ); $content = str_replace( home_url('/'), '/', $content ); if( stripos( $content, ',' . 'r:' ) !== false ) { $tmp = explode( 'r:', $content ); $feed = isset( $tmp[1] ) ? trim( $tmp[1], ',' ) : 0; } else { $content = str_replace( array( ',f:', ',g:', ',h:', ',l:', ',p:' ), ',', $content ); $lst[] = $content; } } sort( $lst ); $file = 'luxe-sns-count.csv'; @ob_start(); @header( 'Content-Description: File Transfer' ); @header( 'Content-Type: text/csv; charset=' . get_option( 'blog_charset' ) ); @header( 'Content-Disposition: attachment; filename=' . basename( $file ) ); echo "URL,Facebook,Pinterest,LinkedIn,Hatena,Poket,Feedly\n"; foreach( $lst as $val ) { echo $val . $feed . "\n"; } @ob_end_flush(); exit; } // SNS カウントキャッシュ一括取得 if( $_POST['option_page'] === 'sns_get' ) { if( isset( $_POST['sns_get'] ) ) { add_action( 'shutdown', function() { echo ''; }, 90 ); require( INC . 'sns-cache-all-get.php' ); $all_get = new sns_cache_all_get(); $all_get->sns_cache_list(); } } } } }, 11 ); /*--------------------------------------------------------------------------- * テーマ無効化時に AMP のリライトルール削除 & manifest 削除 *---------------------------------------------------------------------------*/ add_action( 'switch_theme', function() { global $wp_rewrite, $wp_filesystem; foreach( $wp_rewrite->endpoints as $key => $val ) { if ( $val === 'amp' ) { unset( $wp_rewrite->endpoints[$key] ); } } $wp_rewrite->flush_rules(); if( file_exists( ABSPATH . 'luxe-manifest.json' ) === true ) { thk_filesystem_init(); global $wp_filesystem; $wp_filesystem->delete( ABSPATH . 'luxe-manifest.json' ); } }); /*--------------------------------------------------------------------------- * カスタマイズ内容の変更を DB に書き込む (サニタイズ込み) *---------------------------------------------------------------------------*/ if( function_exists( 'thk_customize_result_set' ) === false ): function thk_customize_result_set( $key, $type, $target = null ) { global $luxe_defaults; $set_theme_mod = 'set_theme_mod'; $remove_theme_mod = 'remove_theme_mod'; if( $target === 'admin' ) { $set_theme_mod = 'set_theme_admin_mod'; $remove_theme_mod = 'remove_theme_admin_mod'; } elseif( $target === 'phrase' ) { $set_theme_mod = 'set_theme_phrase_mod'; $remove_theme_mod = 'remove_theme_phrase_mod'; } if( $type === 'checkbox' ) { if( isset( $_POST[$key] ) && $luxe_defaults[$key] != true ) { $set_theme_mod( $key, true ); } elseif( !isset( $_POST[$key] ) && $luxe_defaults[$key] != false ) { $set_theme_mod( $key, false ); } else { $remove_theme_mod( $key ); } } elseif( $type === 'text' || $type === 'number' || $type === 'range' || $type === 'textarea' || $type === 'radio' || $type === 'select' ) { $post_key = isset( $_POST[$key] ) ? $_POST[$key] : ''; if( $type === 'range' || $type === 'number' ) { if( is_numeric( $post_key ) === true ) { if( $key === 'recaptcha_v3_score' ) { $post_key = (float)$post_key; } else { $post_key = round( $post_key ); } } else { $post_key = ''; } } if( $post_key != $luxe_defaults[$key] ) { $post_key = stripslashes( $post_key ); if( $type === 'textarea' ) { // 覚書:HTML が書けるフィールドの場合は、戻すときに wp_kses_post 必須。 $set_theme_mod( $key, esc_textarea( $post_key ) ); } else { $set_theme_mod( $key, esc_attr( $post_key ) ); } } else { $remove_theme_mod( $key ); } } } endif; /*--------------------------------------------------------------------------- * value の値 (もしくは checked や selected) をチェックして HTML に挿入 *---------------------------------------------------------------------------*/ if( function_exists( 'thk_value_check' ) === false ): function thk_value_check( $key, $type, $default = null, $echo = true ) { global $luxe; $ret = ''; if( isset( $_POST['init_process'] ) ) unset( $_POST ); if( $type === 'checkbox' ) { if( isset( $_POST[$key] ) ) { $ret = ' checked="checked"'; } elseif( !isset( $_POST[$key] ) && isset( $_POST['action'] ) ) { $ret = ''; } elseif( isset( $luxe[$key] ) ) { $ret = ' checked="checked"'; } elseif( isset( $_REQUEST['active'] ) && $_REQUEST['active'] === 'widget' ) { if( get_theme_mod( $key, null ) ) { $ret = ' checked="checked"'; } } } elseif( $type === 'radio' || $type === 'select' ) { if( isset( $_POST['action'] ) ) { if( isset( $_POST[$key] ) && $_POST[$key] == $default ) { $ret = $type === 'radio' ? ' checked="checked"' : ' selected="selected"'; } } else { if( isset( $luxe[$key] ) && $luxe[$key] == $default ) { $ret = $type === 'radio' ? ' checked="checked"' : ' selected="selected"'; } } } elseif( $type === 'text' || $type === 'number' || $type === 'range' || $type === 'hidden' ) { if( isset( $_POST[$key] ) ) { $ret = $type === 'text' ? stripslashes( $_POST[$key] ) : $_POST[$key]; } else { $ret = isset( $luxe[$key] ) ? $luxe[$key] : ''; } $ret = esc_attr( $ret ); } elseif( $type === 'textarea' ) { if( isset( $_POST[$key] ) ) { $ret = stripslashes( $_POST[$key] ); } else { $ret = isset( $luxe[$key] ) ? str_replace( '
', "\n", $luxe[$key] ) : ''; } $ret = esc_attr( $ret ); } if( $echo === false ) return $ret; echo $ret; } endif; /*--------------------------------------------------------------------------- * ZIP ファイルのダウンロード *---------------------------------------------------------------------------*/ if( function_exists( 'thk_zip_file_download' ) === false ): function thk_zip_file_download( $path, $fname, $path_del = false ) { require_once( ABSPATH . 'wp-admin/includes/file.php' ); $zip_file = ''; //$temp = tempnam( sys_get_temp_dir(), 'luxe' ); //$temp = tempnam( get_temp_dir(), 'luxe' ); $temp = wp_tempnam( 'luxe' ); if( file_exists( $temp ) === false ) { echo '

', __( 'Failed to create temporary file with PHP. Check the setting of "upload_tmp_dir" in PHP.', 'luxeritas' ) . '
' . $temp, '

'; } else { thk_filesystem_init(); require( INC . 'thk-zip.php' ); global $wp_filesystem; $zip = new thk_zip_compress(); $success = $zip->all_zip( $path, $temp ); if( $success === true ) { $zip_file = $wp_filesystem->get_contents( $temp ); $wp_filesystem->delete( $temp ); // ファイル名に使えない文字があったら置換 $fname = preg_replace( '/\\s/u', '_', $fname ); $fname = str_replace( array( '\\','/',':','*','?','"','<','>','|' ), '_', $fname ); mb_http_output("pass"); @ob_start(); @header( 'Content-Description: File Transfer' ); //@header( 'Content-Type: application/zip;' . get_option( 'blog_charset' ) ); @header( 'Content-Type: application/zip' ); @header( "Content-Disposition: attachment; filename*=UTF-8''" . rawurlencode( $fname ) ); echo $zip_file; @ob_end_flush(); if( $path_del === true ) { $wp_filesystem->delete( $path, true ); } exit; } else { if( $path_del === true ) { $wp_filesystem->delete( $path, true ); } echo '

', $success, '

'; } } } endif; /*--------------------------------------------------------------------------- * 管理画面で Widget などに変更が加わった時の処理 * $hook * 'updated_option' : Widget 等の option 変更時 * 'wp_update_nav_menu' : メニュー保存時 *---------------------------------------------------------------------------*/ if( function_exists( 'thk_options_modify' ) === false ): function thk_options_modify( $hook = 'updated_option' ) { global $luxe; require( INC . 'custom-css.php' ); require( INC . 'compress.php' ); add_filter( $hook, 'thk_compress', 75 ); add_filter( $hook, 'thk_parent_css_bind', 80 ); add_filter( $hook, 'thk_child_js_comp', 80 ); add_filter( $hook, 'thk_create_inline_style', 85 ); } endif; /*--------------------------------------------------------------------------- * admin_enqueue_scripts *---------------------------------------------------------------------------*/ add_action( 'admin_enqueue_scripts', function() { if( isset( $_GET['page'] ) && ( $_GET['page'] === 'luxe_man' ) ) { // エディタ設定画面で必要な CSS 等 if( !isset( $_GET['active'] ) || ( isset( $_GET['active'] ) && $_GET['active'] === 'old_editor' ) ) { wp_enqueue_script( 'thk-sortable', TURI . '/js/sortable.min.js' ); wp_enqueue_style( 'editor', site_url('/') . WPINC . '/css/editor.min.css' ); wp_enqueue_style( 'tinymce', site_url('/') . WPINC . '/js/tinymce/skins/lightgray/skin.min.css' ); } } }); /*--------------------------------------------------------------------------- * wp_head ( by Block-based Widgets ) *---------------------------------------------------------------------------*/ if( stripos( $_SERVER['REQUEST_URI'], 'wp-admin/widgets.php' ) !== false ) { // WP 5.8 以上 if( version_compare( $GLOBALS['wp_version'], '5.7', '>' ) === true ) { add_action( 'wp_head', function() { global $luxe; if( isset( $luxe['block_based_widgets_enable'] ) ) { global $awesome, $widget_concat; require( INC . 'icons.php' ); require( INC . 'load-block-styles.php' ); // style.css $style = 'body{ background:none!important }'; $style_file = SPATH . DSEP . 'style.min.css'; if( SPATH === TPATH ) { // 親のみ $style_file_parent = TPATH . DSEP . 'style.min.css'; if( file_exists( $style_file_parent ) === false ) $style_file_parent = TPATH . DSEP . 'style.css'; if( file_exists( $style_file_parent ) !== false ) { $style .= thk_fgc( $style_file_parent ); } } else { if( $luxe['child_css_compress'] !== 'bind' ) { // 親 $style_file_parent = TPATH . DSEP . 'style.min.css'; if( file_exists( $style_file_parent ) === false ) $style_file_parent = TPATH . DSEP . 'style.css'; if( file_exists( $style_file_parent ) !== false ) { $style .= thk_fgc( $style_file_parent ); } } // 子 $style_file_child = SPATH . DSEP . 'style.replace.min.css'; if( file_exists( $style_file_child ) === false ) $style_file_child = SPATH . DSEP . 'style.css'; if( file_exists( $style_file_child ) !== false ) { $style .= thk_fgc( $style_file_child ); } } // icomoon のパス置換 $style = str_replace( './fonts/icomoon', TDEL . '/fonts/icomoon', $style ); // block editor 用 style thk_widget_concat(); $block_styles = new thk_block_styles(); $style .= $block_styles->block_styles(); // Material icons or Font Awesom if( isset( $luxe['material_load'] ) ) { wp_enqueue_style( 'material-cdn', $awesome['material']['uri'] . $awesome['material']['css'], array(), false, 'all' ); } if( isset( $luxe['awesome_load'] ) ) { wp_enqueue_style( 'awesome-cdn', $awesome['awesome']['uri'] . $awesome['awesome']['css'], array(), false, 'all' ); } echo ''; /* カテゴリとアーカイブの件数 A タグを内側にするかどうかのやつ */ if( isset( $luxe['categories_a_inner'] ) ) { add_filter( 'wp_list_categories', 'thk_list_categories_archives', 10, 2 ); } if( isset( $luxe['archives_a_inner'] ) ) { add_filter( 'get_archives_link', 'thk_list_categories_archives', 10, 2 ); } } }); } } /*--------------------------------------------------------------------------- * admin_head *---------------------------------------------------------------------------*/ add_action( 'admin_head', function() { global $luxe; // TinyMCE settings (旧エディタ使用時のみ読み込み) if( stripos( $_SERVER['REQUEST_URI'], 'wp-admin/post' ) !== false ) { if( _is_block_editor() === false ) { if( get_user_option( 'rich_editing' ) === 'true' ) { require( INC . 'tinymce-settings.php' ); } } } // Web フォント CSS の存在チェック /* if( isset( $_GET['page'] ) && ( $_GET['page'] === 'luxe' || substr( $_GET['page'], 0, 5 ) === 'luxe_' ) ) { if( !isset( $luxe['all_clear'] ) ) { require_once( INC . 'web-font.php' ); $web_font_dir = TPATH . DSEP . 'webfonts' . DSEP . 'd' . DSEP; if( isset( Web_Font::$webfont[$luxe['font_alphabet']] ) ) { if( file_exists( $web_font_dir . $luxe['font_alphabet'] ) === false ) { if( function_exists( 'add_settings_error' ) === true ) { add_settings_error( 'luxe-custom', '', sprintf( __( 'Web font CSS Not Found.
%s It seems that CSS download of the font failed. Please reset web font.', 'luxeritas' ), $luxe['font_alphabet'] ) ); } } } if( isset( Web_Font::$webfont[$luxe['font_japanese']] ) ) { if( file_exists( $web_font_dir . $luxe['font_japanese'] ) === false ) { if( function_exists( 'add_settings_error' ) === true ) { add_settings_error( 'luxe-custom', '', sprintf( __( 'Web font CSS Not Found.
%s It seems that CSS download of the font failed. Please reset web font.', 'luxeritas' ), $luxe['font_japanese'] ) ); } } } } } */ $admin_inline_styles = ''; /* メニューのアイコンを青くするスタイル */ $admin_inline_styles .= thk_add_admin_inline_css( TPATH . '/css/admin-menu.css' ); /* luxeritas のカスタマイズ画面を開いた時だけ読み込み */ if( isset( $_GET['page'] ) && ( strpos( $_GET['page'], 'luxe' ) !== false || strpos( $_GET['page'], 'luxe_edit' ) !== false ) ) { $admin_inline_styles .= thk_add_admin_inline_css( TPATH . '/css/admin-customize.css' ); } /* デザインファイルのページを開いたときだけ読み込み */ if( isset( $_GET['page'] ) && $_GET['page'] === 'luxe_design' ) { $admin_inline_styles .= thk_add_admin_inline_css( TPATH . '/css/design.css' ); } /* SNS カウンターのページを開いたときだけ読み込み */ if( isset( $_GET['page'] ) && $_GET['page'] === 'luxe_sns' ) { $admin_inline_styles .= thk_add_admin_inline_css( TPATH . '/css/admin-sns-view.css' ); } /* Code Mirror */ if( isset( $_GET['page'] ) && ( $_GET['page'] === 'luxe_edit' || ( $_GET['page'] === 'luxe_design' && isset( $_GET['active'] ) && ( $_GET['active'] === 'design_style' || $_GET['active'] === 'design_amp' ) ) ) ) { $admin_inline_styles .= thk_add_admin_inline_css( TPATH . '/css/thk-codemirror.css' ); if( version_compare( $GLOBALS['wp_version'], '4.9', '>=' ) === true ) { wp_enqueue_editor(); wp_enqueue_script( 'wp-theme-plugin-editor' ); $codemirror = array( 'tabSize' => 8, 'indentUnit' => 8, 'indentWithTabs' => true, 'inputStyle' => 'contenteditable', 'lineNumbers' => true, 'lineWrapping' => false, 'styleActiveLine' => true, 'continueComments' => true, 'extraKeys' => array( 'Ctrl-Space' => 'autocomplete', 'Ctrl-Alt-/' => 'toggleComment', 'Ctrl-Alt-F' => 'findPersistent', 'Ctrl-Alt-D' => 'replace', 'Ctrl-Z' => 'undo', 'Ctrl-Y' => 'redo', ), 'direction' => 'ltr', //'gutters' => array(), ); if( !isset( $luxe['cm_line_numbers'] ) ) $codemirror['lineNumbers'] = false; if( !isset( $luxe['cm_lint'] ) ) $codemirror['lint'] = false; if( !isset( $luxe['cm_indent_with_tabs'] ) ) $codemirror['indentWithTabs'] = false; if( !isset( $luxe['cm_auto_indent'] ) ) $codemirror['smartIndent'] = false; if( !isset( $luxe['cm_close_brackets'] ) ) $codemirror['autoCloseBrackets']= false; if( !isset( $luxe['cm_active_line'] ) ) $codemirror['styleActiveLine'] = false; if( isset( $luxe['cm_line_wrapping'] ) ) $codemirror['lineWrapping'] = true; if( isset( $luxe['cm_indent_with_tabs'] ) && $luxe['cm_indent_with_tabs'] !== 'tabs' ) { $codemirror['indentWithTabs'] = false; } if( isset( $luxe['cm_tab_size'] ) && $luxe['cm_tab_size'] !== 8 ) { $codemirror['tabSize'] = $luxe['cm_tab_size']; $codemirror['indentUnit'] = $luxe['cm_tab_size']; } if( !isset( $luxe['cm_autocomplete'] ) ) { echo '', "\n"; } $args = array( 'type' => 'text/css', 'codemirror' => $codemirror, ); if( isset( $_GET['active'] ) ) { switch( $_GET['active'] ) { case 'edit_header': case 'edit_footer': case 'edit_analytics': case 'edit_analytics_head': case 'edit_amp_body': case 'edit_functions': $args['type'] = 'application/x-httpd-php'; break; case 'edit_script': $args['type'] = 'application/javascript'; break; default: break; } } $settings = wp_enqueue_code_editor( $args ); wp_add_inline_script( 'wp-theme-plugin-editor', sprintf( 'jQuery( function( $ ) { wp.themePluginEditor.init( $( "#template" ), %s ); } );', wp_json_encode( $settings ) ) ); wp_add_inline_script( 'wp-theme-plugin-editor', 'wp.themePluginEditor.themeOrPlugin = "theme";' ); } } echo ''; // Site Icon if( has_site_icon() === false ) { // ファビコン $icon = 'fav' . 'icon.ico'; if( file_exists( SPATH . DSEP . 'images' . DSEP . $icon ) ) { ?> is_dir( WPMU_PLUGIN_DIR ) === false ) { $wp_filesystem->mkdir( WPMU_PLUGIN_DIR, FS_CHMOD_DIR ); } } } if( $wp_filesystem->copy( $src, $dst ) === false ) { return false; } } } endif; /*--------------------------------------------------------------------------- * Mime type 追加 *---------------------------------------------------------------------------*/ add_filter( 'upload' . '_mimes', function( $mimes ) { $mimes['json'] = 'application/json'; //$mimes['webp'] = 'image/webp'; return $mimes; }); /*--------------------------------------------------------------------------- * ファイル/ディレクトリに書き込み権限がない場合のエラーメッセージ *---------------------------------------------------------------------------*/ if( function_exists( '_is_writable_error_msg' ) === false ): function _is_writable_error_msg( $file_name, $echo = true ) { $msg = __( 'You do not have permission to create and save files.', 'luxeritas' ) . '
' . __( 'Please check the owner and permissions of the following file or directory.', 'luxeritas' ) . '
' . $file_name ; if( $echo === true ) { printf( '

%s

', $msg ); } else { return $msg; } } endif; /*--------------------------------------------------------------------------- * JSON のエラーメッセージ ( json_last_error_msg だと日本語返してくれんから ) *---------------------------------------------------------------------------*/ if( function_exists( 'json_error_code_to_msg' ) === false ): function json_error_code_to_msg( $code ) { switch( $code ) { case JSON_ERROR_DEPTH: return ' : ' . __( 'Maximum stack depth exceeded.', 'luxeritas' ); break; case JSON_ERROR_STATE_MISMATCH: return ' : ' . __( 'Underflow or the modes mismatch.', 'luxeritas' ); break; case JSON_ERROR_CTRL_CHAR: return ' : ' . __( 'Unexpected control character found.', 'luxeritas' ); break; case JSON_ERROR_SYNTAX: return ' : ' . __( 'Syntax error, malformed JSON.', 'luxeritas' ); break; case JSON_ERROR_UTF8: return ' : ' . __( 'Malformed UTF-8 characters, possibly incorrectly encoded.', 'luxeritas' ); break; } if( version_compare( PHP_VERSION, '5.5.0', '>=' ) === true ) { switch( $code ) { case JSON_ERROR_RECURSION: return ' : ' . __( 'One or more recursive references in the value to be encoded.', 'luxeritas' ); break; case JSON_ERROR_INF_OR_NAN: return ' : ' . __( 'One or more NAN or INF values in the value to be encoded.', 'luxeritas' ); break; case JSON_ERROR_UNSUPPORTED_TYPE: return ' : ' . __( 'A value of a type that cannot be encoded was given.', 'luxeritas' ); break; } } return JSON_ERROR_NONE; } endif; /*--------------------------------------------------------------------------- * add menu page -> luxe menu page *---------------------------------------------------------------------------*/ if( function_exists( 'luxe_menu_page' ) === false ): function luxe_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = null ) { $func = 'add_' . 'menu_' . 'page'; $hookname = $func( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position ); return $hookname; } endif; /*--------------------------------------------------------------------------- * add submenu page -> luxe submenu page *---------------------------------------------------------------------------*/ if( function_exists( 'luxe_submenu_page' ) === false ): function luxe_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { $func = 'add_' . 'submenu_' . 'page'; $hookname = $func( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function ); return $hookname; } endif; /*--------------------------------------------------------------------------- * dummy function *---------------------------------------------------------------------------*/ require_once( INC . 'code-change.php' ); if( function_exists('d_init') === false ): function d_init() { //add_theme_support( 'post-formats' ); add_theme_support( 'custom-header' ); add_theme_support( 'custom-background' ); get_post_format(); } endif; if( function_exists( 'd_pagination' ) === false ): function d_pagination() { //add_editor_style(); posts_nav_link(); next_comments_link(); previous_comments_link(); paginate_comments_links(); } endif;