<?php use WoWPress\Database\CreateCacheTable; use WoWPress\Database\CreateCharacterTable; use WoWPress\Database\CreateRaidTable; use WoWPress\Models\Character; ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); setlocale(LC_TIME, 'de_DE.UTF8'); require_once('vendor/autoload.php'); /** * WowPress functions and definitions * * @link https://developer.wordpress.org/themes/basics/theme-functions/ * * @package WowPress */ if (!defined('WOWPRESS_VERSION')) { /* * Set the theme’s version number. * * This is used primarily for cache busting. If you use `npm run bundle` * to create your production build, the value below will be replaced in the * generated zip file with a timestamp, converted to base 36. */ define('WOWPRESS_VERSION', '0.1.0'); } if (!defined('WOWPRESS_TYPOGRAPHY_CLASSES')) { /* * Set Tailwind Typography classes for the front end, block editor and * classic editor using the constant below. * * For the front end, these classes are added by the `wowpress_content_class` * function. You will see that function used everywhere an `entry-content` * or `page-content` class has been added to a wrapper element. * * For the block editor, these classes are converted to a JavaScript array * and then used by the `./javascript/block-editor.js` file, which adds * them to the appropriate elements in the block editor (and adds them * again when they’re removed.) * * For the classic editor (and anything using TinyMCE, like Advanced Custom * Fields), these classes are added to TinyMCE’s body class when it * initializes. */ define( 'WOWPRESS_TYPOGRAPHY_CLASSES', 'prose prose-wowpress max-w-none prose-a:text-primary' ); } if (!function_exists('wowpress_setup')) : /** * Sets up theme defaults and registers support for various WordPress features. * * Note that this function is hooked into the after_setup_theme hook, which * runs before the init hook. The init hook is too late for some features, such * as indicating support for post thumbnails. */ function wowpress_setup() { /* * Make theme available for translation. * Translations can be filed in the /languages/ directory. * If you're building a theme based on WowPress, use a find and replace * to change 'wowpress' to the name of your theme in all the template files. */ load_theme_textdomain('wowpress', get_template_directory() . '/languages'); // Add default posts and comments RSS feed links to head. add_theme_support('automatic-feed-links'); /* * Let WordPress manage the document title. * By adding theme support, we declare that this theme does not use a * hard-coded <title> tag in the document head, and expect WordPress to * provide it for us. */ add_theme_support('title-tag'); /* * Enable support for Post Thumbnails on posts and pages. * * @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/ */ add_theme_support('post-thumbnails'); // This theme uses wp_nav_menu() in two locations. register_nav_menus( array( 'menu-1' => __('Primary', 'wowpress'), 'menu-2' => __('Footer Menu', 'wowpress'), ) ); /* * Switch default core markup for search form, comment form, and comments * to output valid HTML5. */ add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'style', 'script', ) ); // Add theme support for selective refresh for widgets. add_theme_support('customize-selective-refresh-widgets'); // Add support for editor styles. add_theme_support('editor-styles'); // Enqueue editor styles. add_editor_style('style-editor.css'); add_editor_style('style-editor-extra.css'); // Add support for responsive embedded content. add_theme_support('responsive-embeds'); // Remove support for block templates. remove_theme_support('block-templates'); } endif; if (!function_exists('wowpress_database')) : function wowpress_database() { global $wpdb; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta([ CreateCharacterTable::sql(), CreateCacheTable::sql(), CreateRaidTable::sql(), ]); } endif; add_action('after_setup_theme', 'wowpress_setup'); add_action('after_switch_theme', 'wowpress_database'); /** * Register widget area. * * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar */ function wowpress_widgets_init() { register_sidebar( array( 'name' => __('Header', 'wowpress'), 'id' => 'top-widgets', 'description' => __('Add widgets here to appear on the header.', 'wowpress'), 'before_widget' => '<section id="%1$s" class="widget %2$s">', 'after_widget' => '</section>', 'before_title' => '<h2 class="widget-title">', 'after_title' => '</h2>', ) ); register_sidebar( array( 'name' => __('Linke Seite', 'wowpress'), 'id' => 'left-widgets', 'description' => __('Add widgets here to appear on the left side.', 'wowpress'), 'before_widget' => '<section id="%1$s" class="widget %2$s">', 'after_widget' => '</section>', 'before_title' => '<h2 class="widget-title">', 'after_title' => '</h2>', ) ); register_sidebar( array( 'name' => __('Rechte Seite', 'wowpress'), 'id' => 'right-widgets', 'description' => __('Add widgets here to appear on the right side.', 'wowpress'), 'before_widget' => '<section id="%1$s" class="widget %2$s">', 'after_widget' => '</section>', 'before_title' => '<h2 class="widget-title">', 'after_title' => '</h2>', ) ); register_sidebar( array( 'name' => __('Footer', 'wowpress'), 'id' => 'bottom-widgets', 'description' => __('Add widgets here to appear in your footer.', 'wowpress'), 'before_widget' => '<section id="%1$s" class="widget %2$s">', 'after_widget' => '</section>', 'before_title' => '<h2 class="widget-title">', 'after_title' => '</h2>', ) ); } add_action('widgets_init', 'wowpress_widgets_init'); /** * Enqueue scripts and styles. */ function wowpress_scripts() { wp_enqueue_style('wowpress-style', get_stylesheet_uri(), array(), WOWPRESS_VERSION); wp_enqueue_script('wowpress-script', get_template_directory_uri() . '/js/script.min.js', array(), WOWPRESS_VERSION, true); if (is_singular() && comments_open() && get_option('thread_comments')) { wp_enqueue_script('comment-reply'); } } add_action('wp_enqueue_scripts', 'wowpress_scripts'); /** * Enqueue the block editor script. */ function wowpress_enqueue_block_editor_script() { wp_enqueue_script( 'wowpress-editor', get_template_directory_uri() . '/js/block-editor.min.js', array( 'wp-blocks', 'wp-edit-post', ), WOWPRESS_VERSION, true ); } add_action('enqueue_block_editor_assets', 'wowpress_enqueue_block_editor_script'); /** * Enqueue the script necessary to support Tailwind Typography in the block * editor, using an inline script to create a JavaScript array containing the * Tailwind Typography classes from WOWPRESS_TYPOGRAPHY_CLASSES. */ function wowpress_enqueue_typography_script() { if (is_admin()) { wp_enqueue_script( 'wowpress-typography', get_template_directory_uri() . '/js/tailwind-typography-classes.min.js', array( 'wp-blocks', 'wp-edit-post', ), WOWPRESS_VERSION, true ); wp_add_inline_script('wowpress-typography', "tailwindTypographyClasses = '" . esc_attr(WOWPRESS_TYPOGRAPHY_CLASSES) . "'.split(' ');", 'before'); } } add_action('enqueue_block_assets', 'wowpress_enqueue_typography_script'); /** * Add the Tailwind Typography classes to TinyMCE. * * @param array $settings TinyMCE settings. * @return array */ function wowpress_tinymce_add_class($settings) { $settings['body_class'] = WOWPRESS_TYPOGRAPHY_CLASSES; return $settings; } add_filter('tiny_mce_before_init', 'wowpress_tinymce_add_class'); /** * Custom template tags for this theme. */ require get_template_directory() . '/inc/template-tags.php'; /** * Functions which enhance the theme by hooking into WordPress. */ require get_template_directory() . '/inc/template-functions.php'; require get_template_directory() . '/inc/config-functions.php'; require get_template_directory() . '/plugins/wowpress-navwalker.php'; require get_template_directory() . '/plugins/wowpress-icons.php'; /** * Hide Admin Bar */ add_filter('show_admin_bar', '__return_false'); /** * Variable initialization */ // Show Widgets $GLOBALS['wowpress']['sidebar'] = [ 'left' => true, 'right' => true, 'top' => true, 'bottom' => true, ]; // Colors $GLOBALS['wowpress']['theme'] = json_decode(file_get_contents(get_template_directory() . "/theme.json"), true); /** * Custom rewrite rules */ require get_template_directory() . '/inc/config-routing.php'; /** * Neue Werte für Kategorien */ function wowpress_color_picker_scripts() { wp_enqueue_style('wp-color-picker'); wp_enqueue_script('cp-active', get_template_directory_uri() . "/plugins/cp-active.js", array('wp-color-picker'), false, true); } add_action('admin_enqueue_scripts', 'wowpress_color_picker_scripts'); add_action('category_add_form_fields', 'wowpress_add_category_meta', 10, 2); function wowpress_add_category_meta($taxonomy) { $colors = $GLOBALS['wowpress']['theme']['settings']['color']['palette']; ?><div class="form-field term-group"> <label for="color"><?php _e('Farbe', 'wowpress'); ?></label> <input type="text" name="color" id="color" class="color-picker"> </div><?php } add_action('created_category', 'wowpress_save_category_meta', 10, 2); function wowpress_save_category_meta($term_id, $tt_id) { if (isset($_POST['color']) && '' !== $_POST['color']) { $color = sanitize_title($_POST['color']); add_term_meta($term_id, 'color', $color, true); } } add_action('category_edit_form_fields', 'wowpress_edit_category_meta', 10, 2); function wowpress_edit_category_meta($term, $taxonomy) { $colors = $GLOBALS['wowpress']['theme']['settings']['color']['palette']; // get current group $selected_color = get_term_meta($term->term_id, 'color', true); ?><tr class="form-field term-group-wrap"> <th scope="row"><label for="color"><?php _e('Farbe', 'wowpress'); ?></label></th> <td> <input type="text" name="color" id="color" class="color-picker" value="#<?= $selected_color ?>"> </td> </tr><?php } add_action('edited_category', 'wowpress_update_category_meta', 10, 2); function wowpress_update_category_meta($term_id, $tt_id) { if (isset($_POST['color']) && '' !== $_POST['color']) { $color = sanitize_title($_POST['color']); update_term_meta($term_id, 'color', $color); } } //* Theme Options Page **/ require_once(get_stylesheet_directory() . '/options/api.php'); /** Global Helper functions */ function translate_string($string, $lang = "deu") { $dict_path = get_template_directory() . "/lang/$lang.json"; if (!file_exists($dict_path)) return $string; $dict = json_decode(file_get_contents($dict_path), true); if (key_exists($string, $dict)) { return $dict[$string]; } return $string; } function format_date($timestamp = "NOW", $format = "dd.MM.yyyy") { return datefmt_format(\IntlDateFormatter::create( 'de_DE.UTF-8', \IntlDateFormatter::NONE, \IntlDateFormatter::NONE, \date_default_timezone_get(), \IntlDateFormatter::GREGORIAN, $format, ), is_numeric($timestamp) ? $timestamp : strtotime($timestamp)); } function dd(...$vars) { echo "<pre>"; var_dump($vars); echo "</pre>"; exit; } function set_sidebar_status($location, bool $active = true) { switch ($location) { case 'top': $GLOBALS['wowpress']['sidebar']['top'] = $active; break; case 'left': $GLOBALS['wowpress']['sidebar']['left'] = $active; break; case 'right': $GLOBALS['wowpress']['sidebar']['right'] = $active; break; case 'bottom': $GLOBALS['wowpress']['sidebar']['bottom'] = $active; break; } } function get_sidebar_status($location) { switch ($location) { case 'top': return $GLOBALS['wowpress']['sidebar']['top']; break; case 'left': return $GLOBALS['wowpress']['sidebar']['left']; break; case 'right': return $GLOBALS['wowpress']['sidebar']['right']; break; case 'bottom': return $GLOBALS['wowpress']['sidebar']['bottom']; break; } return false; } /** Roles */ set_roles();