* * 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 morenews_setup() { /* * Make theme available for translation. * Translations can be filed in the /languages/ directory. * If you're building a theme based on MoreNews, use a find and replace * to change 'morenews' to the name of your theme in all the template files. */ // load_theme_textdomain('morenews', 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 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'); add_theme_support('rtl'); // Add featured image sizes add_image_size('morenews-large', 825, 575, true); // width, height, crop add_image_size('morenews-medium', 590, 410, true); // width, height, crop /* * Enable support for Post Formats on posts and pages. * * @link https://developer.wordpress.org/themes/functionality/post-formats/ */ add_theme_support('post-formats', array('image', 'video', 'gallery')); // This theme uses wp_nav_menu() in one location. register_nav_menus(array( 'aft-primary-nav' => esc_html__('Primary Menu', 'morenews'), 'aft-social-nav' => esc_html__('Social Menu', 'morenews'), 'aft-footer-nav' => esc_html__('Footer Menu', 'morenews'), )); /* * 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', )); // Set up the WordPress core custom background feature. add_theme_support('custom-background', apply_filters('morenews_custom_background_args', array( 'default-color' => 'eeeeee', 'default-image' => '', ))); // Add theme support for selective refresh for widgets. add_theme_support('customize-selective-refresh-widgets'); /** * Add support for core custom logo. * * @link https://codex.wordpress.org/Theme_Logo */ add_theme_support('custom-logo', array( 'flex-width' => true, 'flex-height' => true, )); // Add AMP support add_theme_support('amp'); /** * Add theme support for gutenberg block */ add_theme_support('align-wide'); add_theme_support('responsive-embeds'); add_theme_support('wp-block-styles'); add_theme_support('appearance-tools'); add_theme_support('custom-spacing'); add_theme_support('custom-units'); add_theme_support('custom-line-height'); add_theme_support('border'); add_theme_support('link-color'); } endif; add_action('after_setup_theme', 'morenews_setup'); function morenews_is_amp() { return function_exists('is_amp_endpoint') && is_amp_endpoint(); } /** * Set the content width in pixels, based on the theme's design and stylesheet. * * Priority 0 to make it available to lower priority callbacks. * * @global int $content_width */ function morenews_content_width() { $GLOBALS['content_width'] = apply_filters('morenews_content_width', 640); } add_action('after_setup_theme', 'morenews_content_width', 0); /** * ========================================================================== * FONT MANAGEMENT — Google, Local, or System * Optimized & GDPR-compliant for MoreNews Theme * ========================================================================== */ /** * Check whether Google Fonts are enabled. */ function morenews_is_google_fonts_enabled() { return morenews_get_option('global_font_family_type') === 'google'; } /** * Filter allowed font variants. */ function morenews_filter_font_variants($font) { if (strpos($font, ':') === false) { return $font; } list($font_name, $variants) = explode(':', $font); $allowed_variants = array('400', '700'); $font_variants = explode(',', $variants); $filtered_variants = array_intersect($font_variants, $allowed_variants); return !empty($filtered_variants) ? $font_name . ':' . implode(',', $filtered_variants) : $font_name; } /** * Build a single Google Fonts URL. */ function morenews_get_fonts_url() { static $cached_url = null; if ($cached_url !== null) { return $cached_url; } if (!morenews_is_google_fonts_enabled()) { $cached_url = ''; return ''; } $fonts_url = ''; $subsets = 'latin'; $site_title_font = morenews_get_option('site_title_font'); $primary_font = morenews_get_option('primary_font'); $secondary_font = morenews_get_option('secondary_font'); $all_fonts = array($site_title_font, $primary_font, $secondary_font); $theme_fonts = array_filter(array_map(function ($font) { if (empty($font)) return ''; if (stripos($font, 'oswald') !== false || stripos($font, 'open+sans') !== false || stripos($font, 'open sans') !== false) { return null; // Local fonts } return morenews_filter_font_variants($font); }, $all_fonts)); $unique_fonts = array_unique($theme_fonts); if (!empty($unique_fonts)) { $fonts_url = add_query_arg(array( 'family' => implode('|', $unique_fonts), 'subset' => $subsets, 'display' => 'swap', // ensures smooth rendering ), 'https://fonts.googleapis.com/css'); } $cached_url = $fonts_url; return $fonts_url; } /** * Add preconnect for Google Fonts domains (DNS + TLS warmup). */ function morenews_add_preconnect_links($urls, $relation_type) { if ('preconnect' === $relation_type && morenews_is_google_fonts_enabled()) { $fonts_url = morenews_get_fonts_url(); if (!empty($fonts_url)) { $urls[] = array('href' => 'https://fonts.googleapis.com', 'crossorigin' => 'anonymous'); $urls[] = array('href' => 'https://fonts.gstatic.com', 'crossorigin' => 'anonymous'); } } return $urls; } add_filter('wp_resource_hints', 'morenews_add_preconnect_links', 10, 2); /** * Preload Google or Local font stylesheets. */ function morenews_preload_fonts($urls, $relation_type) { if ($relation_type !== 'preload' || !morenews_is_google_fonts_enabled()) { return $urls; } $fonts_url = morenews_get_fonts_url(); $base_css = get_template_directory_uri() . '/assets/fonts/css/'; $site_title_font = morenews_get_option('site_title_font'); $primary_font = morenews_get_option('primary_font'); $secondary_font = morenews_get_option('secondary_font'); $fonts_in_use = array($site_title_font, $primary_font, $secondary_font); $load_oswald = false; $load_open_sans = false; foreach ($fonts_in_use as $font) { $font_clean = strtolower($font); if (strpos($font_clean, 'oswald') !== false) $load_oswald = true; if (strpos($font_clean, 'open+sans') !== false || strpos($font_clean, 'open sans') !== false) $load_open_sans = true; } if (!empty($fonts_url)) { $urls[] = array( 'href' => esc_url($fonts_url), 'as' => 'style', 'crossorigin' => 'anonymous', // ensures reuse of preload ); } if ($load_oswald) { $urls[] = array( 'href' => esc_url($base_css . 'oswald.css'), 'as' => 'style', ); } if ($load_open_sans) { $urls[] = array( 'href' => esc_url($base_css . 'open-sans.css'), 'as' => 'style', ); } return $urls; } add_filter('wp_resource_hints', 'morenews_preload_fonts', 10, 2); add_action('wp_head', function() { if (morenews_is_google_fonts_enabled()) { $fonts_url = morenews_get_fonts_url(); if ($fonts_url) { echo '<link rel="preload" href="' . esc_url($fonts_url) . '" as="style" crossorigin="anonymous">'; } } }, 0); /** * Enqueue Google or local fonts for frontend. */ function morenews_enqueue_fonts() { if (!morenews_is_google_fonts_enabled()) { return; // System fonts: skip all } $site_title_font = strtolower(trim(morenews_get_option('site_title_font'))); $primary_font = strtolower(trim(morenews_get_option('primary_font'))); $secondary_font = strtolower(trim(morenews_get_option('secondary_font'))); $fonts_url = morenews_get_fonts_url(); $base_css = get_template_directory_uri() . '/assets/fonts/css/'; $load_oswald = false; $load_open_sans = false; foreach (array($site_title_font, $primary_font, $secondary_font) as $font) { if (strpos($font, 'oswald') !== false) $load_oswald = true; if (strpos($font, 'open sans') !== false || strpos($font, 'open+sans') !== false) $load_open_sans = true; } if ($load_oswald) { wp_enqueue_style('morenews-font-oswald', $base_css . 'oswald.css', array(), null); } if ($load_open_sans) { wp_enqueue_style('morenews-font-open-sans', $base_css . 'open-sans.css', array(), null); } if (!empty($fonts_url)) { wp_enqueue_style('morenews-google-fonts', $fonts_url, array(), null); wp_style_add_data('morenews-google-fonts', 'crossorigin', 'anonymous'); // matches preload } } add_action('wp_enqueue_scripts', 'morenews_enqueue_fonts', 1); /** * Enqueue local editor fonts properly for block editor (no iframe warning) */ function morenews_enqueue_block_editor_fonts() { // Only load for block editor. $screen = function_exists('get_current_screen') ? get_current_screen() : null; if ( ! $screen || ! method_exists( $screen, 'is_block_editor' ) || ! $screen->is_block_editor() ) { return; } $global_font_type = morenews_get_option('global_font_family_type'); $primary_font = strtolower( trim( morenews_get_option('primary_font') ) ); $font_stack = "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', sans-serif"; $font_family = $font_stack; $css_file_url = ''; // Detect locally available fonts. if ( $global_font_type === 'google' && ! empty( $primary_font ) ) { if ( strpos( $primary_font, 'oswald' ) !== false ) { $font_family = "'Oswald', {$font_stack}"; $css_file_url = get_template_directory_uri() . '/assets/fonts/css/oswald.css'; } elseif ( strpos( $primary_font, 'open sans' ) !== false || strpos( $primary_font, 'open+sans' ) !== false ) { $font_family = "'Open Sans', {$font_stack}"; $css_file_url = get_template_directory_uri() . '/assets/fonts/css/open-sans.css'; } } // Enqueue local CSS file if found. if ( $css_file_url ) { wp_enqueue_style( 'morenews-editor-font', $css_file_url, array(), null ); } else { // Create an empty handle so inline CSS attaches safely. wp_register_style( 'morenews-editor-font', false ); wp_enqueue_style( 'morenews-editor-font' ); } // Add inline font-family styling. $inline_css = " body.editor-styles-wrapper, .editor-post-title__input, .wp-block { font-family: {$font_family}; line-height: 1.7; } /* Match frontend content typography */ .editor-styles-wrapper { font-size: 18px; } /* Match frontend link underline style */ .editor-styles-wrapper p a, .editor-styles-wrapper .wp-block-table a, .editor-styles-wrapper .wp-block-list a, .editor-styles-wrapper .wp-block-quote a, .editor-styles-wrapper .wp-block-heading a, .editor-styles-wrapper .wp-block-paragraph a, .editor-styles-wrapper .wp-block-code a, .editor-styles-wrapper .wp-block-preformatted a { border-bottom: 2px solid; text-decoration: none; } "; wp_add_inline_style( 'morenews-editor-font', $inline_css ); } add_action( 'enqueue_block_assets', 'morenews_enqueue_block_editor_fonts' ); /** * Load Init for Hook files. */ require get_template_directory() . '/inc/custom-style.php'; /** * Enqueue styles. */ add_action('wp_enqueue_scripts', 'morenews_style_files'); function morenews_style_files() { $min = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; $morenews_version = wp_get_theme()->get('Version'); // wp_enqueue_style('font-awesome-v5', get_template_directory_uri() . '/assets/font-awesome/css/all' . $min . '.css'); wp_enqueue_style('aft-icons', get_template_directory_uri() . '/assets/icons/style.css', array()); wp_enqueue_style('bootstrap', get_template_directory_uri() . '/assets/bootstrap/css/bootstrap' . $min . '.css'); wp_enqueue_style('slick', get_template_directory_uri() . '/assets/slick/css/slick' . $min . '.css'); wp_enqueue_style('sidr', get_template_directory_uri() . '/assets/sidr/css/jquery.sidr.dark.css'); wp_enqueue_style('magnific-popup', get_template_directory_uri() . '/assets/magnific-popup/magnific-popup.css'); $show_footer_checkbox = morenews_get_option('athfb_show_checkbox_footer'); $show_header_checkbox = morenews_get_option('athfb_show_checkbox_header'); if ($show_header_checkbox) { wp_register_style( 'morenew_header_builder', get_template_directory_uri() . '/assets/css/header-builder.css', array(), null, 'all' ); wp_enqueue_style('morenew_header_builder'); } if ($show_footer_checkbox) { wp_register_style( 'morenew_footer_builder', get_template_directory_uri() . '/assets/css/footer-builder.css', array(), null, 'all' ); wp_enqueue_style('morenew_footer_builder'); } /** * Load WooCommerce compatibility file. */ if (class_exists('WooCommerce')) { wp_enqueue_style('morenews-woocommerce-style', get_template_directory_uri() . '/woocommerce.css'); $font_path = WC()->plugin_url() . '/assets/fonts/'; $inline_font = '@font-face { font-family: "star"; src: url("' . $font_path . 'star.eot"); src: url("' . $font_path . 'star.eot?#iefix") format("embedded-opentype"), url("' . $font_path . 'star.woff") format("woff"), url("' . $font_path . 'star.ttf") format("truetype"), url("' . $font_path . 'star.svg#star") format("svg"); font-weight: normal; font-style: normal; }'; wp_add_inline_style('morenews-woocommerce-style', $inline_font); } // wp_enqueue_style('morenews-style', get_stylesheet_uri()); wp_enqueue_style('morenews-style', get_template_directory_uri() . '/style' . $min . '.css', array(), $morenews_version); wp_add_inline_style('morenews-style', morenews_custom_style()); } /** * Enqueue scripts. */ function morenews_scripts() { // if (morenews_is_amp()) { // return; // } $min = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; $morenews_version = wp_get_theme()->get('Version'); wp_enqueue_script('jquery'); wp_enqueue_script('jquery-cookie', get_template_directory_uri() . '/assets/jquery.cookie.js'); wp_enqueue_script('morenews-toggle-script', get_template_directory_uri() . '/assets/toggle-script.js', array('jquery-cookie'), $morenews_version, true); wp_enqueue_script('morenews-background-script', get_template_directory_uri() . '/assets/background-script.js', array('jquery'), $morenews_version); wp_enqueue_script('morenews-navigation', get_template_directory_uri() . '/js/navigation.js', array(), $morenews_version, true); wp_enqueue_script('morenews-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), $morenews_version, true); wp_enqueue_script('slick', get_template_directory_uri() . '/assets/slick/js/slick' . $min . '.js', array('jquery'), $morenews_version, true); wp_enqueue_script('bootstrap', get_template_directory_uri() . '/assets/bootstrap/js/bootstrap' . $min . '.js', array('jquery'), $morenews_version, array( 'in_footer' => true, // Because involves header. 'strategy' => 'defer', )); wp_enqueue_script('sidr', get_template_directory_uri() . '/assets/sidr/js/jquery.sidr' . $min . '.js', array('jquery'), $morenews_version, true); wp_enqueue_script('magnific-popup', get_template_directory_uri() . '/assets/magnific-popup/jquery.magnific-popup' . $min . '.js', array('jquery'), $morenews_version, true); wp_enqueue_script('matchheight', get_template_directory_uri() . '/assets/jquery-match-height/jquery.matchHeight' . $min . '.js', array('jquery'), $morenews_version, true); wp_enqueue_script('marquee', get_template_directory_uri() . '/admin-dashboard/dist/morenews_marque_scripts.build.js', array('jquery'), $morenews_version, true); $sticky_header = morenews_get_option('disable_sticky_header_option'); if ($sticky_header == false) { wp_enqueue_script('morenews-fixed-header-script', get_template_directory_uri() . '/assets/fixed-header-script.js', array('jquery'), '', 1); } wp_enqueue_script('morenews-script', get_template_directory_uri() . '/admin-dashboard/dist/morenews_scripts.build.js', array('jquery'), $morenews_version, true); $top_header_time_format = morenews_get_option('top_header_time_format'); $localized_time_format = array(); if ($top_header_time_format == 'en-US' || $top_header_time_format == 'en-GB') { $localized_time_format['format'] = $top_header_time_format; wp_localize_script('morenews-script', 'AFlocalizedTime', $localized_time_format); } if (is_singular() && comments_open() && get_option('thread_comments')) { wp_enqueue_script('comment-reply'); } } add_action('wp_enqueue_scripts', 'morenews_scripts'); /** * Enqueue admin scripts and styles. * * @since MoreNews 1.0.0 */ function morenews_admin_scripts($hook) { if ('widgets.php' === $hook) { wp_enqueue_media(); wp_enqueue_script('morenews-widgets', get_template_directory_uri() . '/assets/widgets.js', array('jquery'), '1.0.0', true); } wp_enqueue_style('morenews-notice', get_template_directory_uri() . '/assets/css/notice.css'); } add_action('admin_enqueue_scripts', 'morenews_admin_scripts'); add_action('elementor/editor/before_enqueue_scripts', 'morenews_admin_scripts'); /** * Custom template tags for this theme. */ require get_template_directory() . '/inc/template-tags.php'; /** * Custom Multi Author tags for this theme. */ require get_template_directory() . '/inc/multi-author.php'; /** * Custom template tags for this theme. */ require get_template_directory() . '/inc/template-images.php'; /** * Functions which enhance the theme by hooking into WordPress. */ require get_template_directory() . '/inc/template-functions.php'; /** * Customizer additions. */ require get_template_directory() . '/inc/customizer/customizer.php'; /** * Implement the Custom Header feature. */ require get_template_directory() . '/inc/custom-header.php'; /** * Customizer additions. */ require get_template_directory() . '/inc/init.php'; /** * Functions which enhance AMP Compatibility */ require get_template_directory() . '/inc/class-amp-compatible.php'; require get_template_directory() . '/inc/class-walker-menu.php'; /** * Load Jetpack compatibility file. */ if (defined('JETPACK__VERSION')) { require get_template_directory() . '/inc/jetpack.php'; } /** * Load WooCommerce compatibility file. */ if (class_exists('WooCommerce')) { require get_template_directory() . '/inc/woocommerce.php'; } /** * Descriptions on Header Menu * @author AF themes * @param string $item_output , HTML outputp for the menu item * @param object $item , menu item object * @param int $depth , depth in menu structure * @param object $args , arguments passed to wp_nav_menu() * @return string $item_output */ function morenews_header_menu_desc($item_output, $item, $depth, $args) { $show_primary_menu_desc = morenews_get_option('show_primary_menu_desc'); if ($show_primary_menu_desc) { if (isset($args->theme_location) && 'aft-primary-nav' == $args->theme_location && $item->description) $item_output = str_replace('</a>', '<span class="menu-description">' . $item->description . '</span></a>', $item_output); } return $item_output; } add_filter('walker_nav_menu_start_el', 'morenews_header_menu_desc', 10, 4); function morenews_menu_notitle($menu) { return $menu = preg_replace('/ title=\"(.*?)\"/', '', $menu); } add_filter('wp_nav_menu', 'morenews_menu_notitle'); add_filter('wp_page_menu', 'morenews_menu_notitle'); add_filter('wp_list_categories', 'morenews_menu_notitle'); function morenews_print_pre($args) { if ($args) { echo "<pre>"; print_r($args); echo "</pre>"; } else { echo "<pre>"; print_r('Empty'); echo "</pre>"; } } add_action('init', 'morenews_transltion_init', 99); function morenews_transltion_init() { load_theme_textdomain('morenews', get_template_directory() . '/languages'); } require_once get_template_directory() . '/inc/customizer/builder/options.php'; function athfb_load_files() { // Only load in admin or customizer context if (!is_admin() && !is_customize_preview()) { return; } // Include files in the correct order require_once get_template_directory() . '/inc/customizer/builder/class-header-footer-builder.php'; require_once get_template_directory() . '/inc/customizer/builder/class-header-footer-builder-control.php'; require_once get_template_directory() . '/inc/customizer/builder/class-block-toggle.php'; } // Load files when WordPress is ready and customizer classes are available add_action('customize_register', 'athfb_load_files', 1); function athfb_loadFiles() { $loadHeader = morenews_get_option('athfb_show_checkbox_header'); $loadFooter = morenews_get_option('athfb_show_checkbox_footer'); // if ($loadHeader || $loadFooter) { require_once get_template_directory() . '/inc/customizer/builder/builder-structure.php'; require_once get_template_directory() . '/inc/customizer/builder/header-builder-structure.php'; require_once get_template_directory() . '/inc/customizer/builder/footer-builder-structure.php'; // } } add_action('init', 'athfb_loadFiles'); /** * Always load theme integration for frontend */ /** * Initialize the Header Footer Builder */ function athfb_init() { // Only initialize if we're in the right context if (class_exists('Header_Footer_Builder')) { Header_Footer_Builder::get_instance(); } } add_action('admin_init', 'athfb_init'); <!doctype html> <html dir="rtl" lang="ar" prefix="og: https://ogp.me/ns#"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="profile" href="http://gmpg.org/xfn/11"> <title>وكـــالــــة درا للأنــبـــاء - تنتج المواد الإعلامية للمنابر الوطنية و الدولية