<?php /** * DigitalEdu Premium Theme Functions * Integrates: Booking System, AI Article Generator, Affiliate System, * Community/Discord, Dashboard, Products, Gamification, * Member Dashboard, Payment Gateway, AI Writer * * Overhaul v2.1.0 — hardened security, plugin-independent booking, * auto-created service pages, rate-limited AJAX, RankMath-aware schema. */ // ----- THEME SETUP ----- function digitaledu_setup() { add_theme_support('post-thumbnails'); add_theme_support('title-tag'); add_theme_support('html5', array('search-form', 'comment-form', 'comment-list', 'gallery', 'caption')); add_theme_support('custom-logo', array( 'height' => 60, 'width' => 200, 'flex-height' => true, 'flex-width' => true, )); register_nav_menus(array( 'primary' => __('Primary Menu', 'digitaledu'), 'footer' => __('Footer Menu', 'digitaledu'), )); } add_action('after_setup_theme', 'digitaledu_setup'); // ============================================================ // RATE LIMITING HELPER — prevents brute-force / spam on AJAX endpoints // ============================================================ function de_rate_limit($key = 'default', $limit = 10, $window = 3600) { $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'unknown'; $transient_key = 'de_rl_' . md5($key . '_' . $ip); $attempts = (int) get_transient($transient_key); if ($attempts >= $limit) { return true; // rate limited } set_transient($transient_key, $attempts + 1, $window); return false; // OK to proceed } // ============================================================ // AUTO-CREATE ALL REQUIRED PAGES ON THEME ACTIVATION // ============================================================ add_action('after_switch_theme', 'de_create_required_pages'); function de_create_required_pages() { $pages = array( 'login' => array('title' => 'Login', 'template' => 'page-login.php'), 'dashboard' => array('title' => 'Dashboard', 'template' => ''), 'services' => array('title' => 'Services', 'template' => 'page-services.php'), 'about' => array('title' => 'About', 'template' => 'page-about.php'), 'contact' => array('title' => 'Contact', 'template' => 'page-contact.php'), 'community' => array('title' => 'Community', 'template' => 'page-community.php'), 'articles' => array('title' => 'Articles', 'template' => 'page-articles.php'), 'tools' => array('title' => 'Free Tools', 'template' => 'page-tools.php'), 'checkout' => array('title' => 'Checkout', 'template' => 'page-checkout.php'), 'funnel' => array('title' => 'Get Started', 'template' => 'page-funnel.php'), 'ai-writer' => array('title' => 'AI Article Writer', 'template' => 'page-ai-writer.php'), 'ai-dashboard' => array('title' => 'AI Writer Dashboard', 'template' => 'page-ai-writer-dashboard.php'), 'case-studies' => array('title' => 'Case Studies', 'template' => 'page-case-studies.php'), 'privacy' => array('title' => 'Privacy Policy', 'template' => 'page-privacy.php'), 'terms' => array('title' => 'Terms of Service', 'template' => 'page-terms.php'), 'cookies' => array('title' => 'Cookies Policy', 'template' => 'page-cookies.php'), 'landing' => array('title' => 'Book a Call', 'template' => 'page-landing.php'), 'partners' => array('title' => 'Partners', 'template' => 'page-partners.php'), 'courses' => array('title' => 'Courses', 'template' => 'page-courses.php'), 'ai-automation-guide' => array('title' => 'AI Automation Guide', 'template' => 'page-ai-automation-guide.php'), 'ai-resources' => array('title' => 'AI Resource Center', 'template' => 'page-ai-resources.php'), 'lead-scraper' => array('title' => 'Lead Scraper & AI Outreach', 'template' => 'page-lead-scraper.php'), 'my-account' => array('title' => 'My Account', 'template' => 'page-my-account.php'), 'shop' => array('title' => 'Shop', 'template' => 'page-shop.php'), // Individual service pages 'web-development' => array('title' => 'Web Development', 'template' => 'page-service-web-development.php'), 'ai-automation' => array('title' => 'AI & Automation', 'template' => 'page-service-ai-automation.php'), 'digital-marketing' => array('title' => 'Digital Marketing', 'template' => 'page-service-digital-marketing.php'), 'ux-ui-design' => array('title' => 'UX/UI Design', 'template' => 'page-service-ux-ui-design.php'), 'mobile-apps' => array('title' => 'Mobile Apps', 'template' => 'page-service-mobile-apps.php'), 'brand-strategy' => array('title' => 'Brand Strategy', 'template' => 'page-service-brand-strategy.php'), 'workflow-automation' => array('title' => 'Workflow Automation', 'template' => 'page-service-workflow-automation.php'), ); foreach ($pages as $slug => $page) { $existing = get_posts(array( 'name' => $slug, 'post_type' => 'page', 'post_status' => 'publish', 'posts_per_page' => 1, )); if (empty($existing)) { wp_insert_post(array( 'post_title' => $page['title'], 'post_name' => $slug, 'post_content' => $page['content'] ?? '', 'post_status' => 'publish', 'post_type' => 'page', 'page_template' => $page['template'], )); } } } // ============================================================ // REDIRECT wp-login.php → CUSTOM LOGIN PAGE // ============================================================ add_action('login_init', 'de_redirect_wp_login_to_custom'); function de_redirect_wp_login_to_custom() { if (!empty($_POST)) return; $allowed = array('logout', 'lostpassword', 'rp', 'resetpass'); if (isset($_GET['action']) && in_array($_GET['action'], $allowed)) return; wp_redirect(home_url('/login/')); exit; } // ============================================================ // REDIRECT UNATHENTICATED /dashboard/ → /login/ // ============================================================ add_action('template_redirect', 'de_redirect_dashboard_to_login'); function de_redirect_dashboard_to_login() { if (!is_user_logged_in()) { $request = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); if ($request === 'dashboard') { wp_redirect(home_url('/login/')); exit; } } } // ============================================================ // OVERRIDE LOGIN URLs → CUSTOM PAGE // ============================================================ add_filter('login_url', 'de_custom_login_url', 10, 3); function de_custom_login_url($url, $redirect, $force_reauth) { $login_url = home_url('/login/'); if (!empty($redirect)) { $login_url = add_query_arg('redirect_to', $redirect, $login_url); } return $login_url; } // ----- ENQUEUE SCRIPTS ----- function digitaledu_enqueue_scripts() { wp_enqueue_style('digitaledu-fonts', 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Space+Grotesk:wght@400;500;600;700&display=swap', array(), null); wp_enqueue_style('font-awesome', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css', array(), '6.4.0'); wp_enqueue_style('digitaledu-theme', get_stylesheet_uri(), array(), '2.1.1'); wp_enqueue_script('digitaledu-theme', get_template_directory_uri() . '/assets/js/theme.js', array(), '2.1.1', true); wp_localize_script('digitaledu-theme', 'digitaledu', array( 'ajaxUrl' => admin_url('admin-ajax.php'), 'restUrl' => rest_url(), 'nonce' => wp_create_nonce('digitaledu_nonce'), 'homeUrl' => home_url(), 'isUserLoggedIn' => is_user_logged_in(), 'currentUserId' => get_current_user_id(), 'googleClientId' => get_option('de_google_auth_client_id', ''), )); // Calendly embed widget for booking forms wp_enqueue_script('calendly-widget', 'https://assets.calendly.com/assets/external/widget.js', array(), null, true); wp_enqueue_script('google-platform', 'https://accounts.google.com/gsi/client', array(), null, true); add_filter('script_loader_tag', function($tag, $handle) { if ('google-platform' === $handle) { return str_replace(' src=', ' defer src=', $tag); } return $tag; }, 10, 2); } add_action('wp_enqueue_scripts', 'digitaledu_enqueue_scripts'); // ----- INCLUDE MODULES ----- require_once get_template_directory() . '/inc/plugin-integrations.php'; require_once get_template_directory() . '/de-payment-gateway.php'; require_once get_template_directory() . '/inc/google-auth.php'; require_once get_template_directory() . '/inc/community.php'; // ============================================================ // PLUGIN LOADING NOTICE (admin only) // ============================================================ function de_check_plugins() { $required_plugins = array( 'booking-system-plugin/digitaledu-booking-system.php' => 'DigitalEdu Booking System', 'ai-article-generator/de-ai-article-generator.php' => 'AI Article Generator', 'affiliate-system/de-affiliate-system.php' => 'Affiliate System', 'digitaledu-ai-writer-plugin/digitaledu-ai-writer.php' => 'AI Writer', 'digitaledu-dashboard/de-dashboard.php' => 'Dashboard', 'digitaledu-products/de-products.php' => 'Products Manager', 'payment-gateway/de-payment-gateway.php' => 'Payment Gateway', 'member-dashboard/de-member-dashboard.php' => 'Member Dashboard', 'gamification-system/de-gamification.php' => 'Gamification System', 'community-discord/de-discord.php' => 'Discord Community', ); $missing = array(); foreach ($required_plugins as $path => $name) { if (!file_exists(WP_PLUGIN_DIR . '/' . $path)) { $missing[] = $name; } } if (!empty($missing) && current_user_can('activate_plugins')) { echo '<div class="notice notice-warning is-dismissible"><p><strong>DigitalEdu Theme:</strong> Install these plugins from <code>digitaledu-premium/</code>: ' . implode(', ', $missing) . '</p></div>'; } } add_action('admin_notices', 'de_check_plugins'); // ============================================================ // SHORTCODES // ============================================================ // Booking form (powered by Calendly inline widget) function de_booking_form_shortcode() { ob_start(); ?> <div class="de-booking-widget" style="max-width:850px;margin:0 auto;background:var(--de-bg-card);border:var(--de-border-medium);border-radius:var(--de-radius-xl);padding:2rem"> <h3 style="text-align:center;margin-bottom:0.5rem;color:var(--de-text-primary);font-size:1.3rem">Book a Free 30-Minute Strategy Call</h3> <p style="text-align:center;margin-bottom:1.5rem;color:var(--de-text-muted);font-size:0.9rem">Pick a time that works for you — no account needed</p> <div class="calendly-inline-widget" data-url="https://calendly.com/digitaleduguides/30min" style="position:relative;min-width:320px;height:700px;"></div> <script type="text/javascript"> if (typeof Calendly !== 'undefined' && document.querySelector('.calendly-inline-widget[data-url]') && !document.querySelector('.calendly-inline-widget[data-url]').hasAttribute('data-processed')) { Calendly.initInlineWidget({ url: 'https://calendly.com/digitaleduguides/30min', parentElement: document.querySelector('.calendly-inline-widget[data-url]') }); document.querySelector('.calendly-inline-widget[data-url]').setAttribute('data-processed', 'true'); } </script> </div> <?php return ob_get_clean(); } add_shortcode('de_booking', 'de_booking_form_shortcode'); // Products grid function de_products_shortcode($atts) { $atts = shortcode_atts(array('category' => '', 'limit' => 6), $atts); global $wpdb; $table = $wpdb->prefix . 'de_products'; $where = "WHERE status='active'"; if ($atts['category']) $where .= $wpdb->prepare(" AND category=%s", $atts['category']); $products = $wpdb->get_results("SELECT * FROM $table $where ORDER BY featured DESC, sort_order ASC LIMIT " . intval($atts['limit'])); if (!$products) return '<p style="text-align:center;color:var(--de-text-muted)">Products coming soon.</p>'; ob_start(); ?> <div class="de-products-grid" style="display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem"> <?php foreach ($products as $p): $price_html = $p->sale_price ? '<span style="text-decoration:line-through;color:var(--de-text-muted);font-size:0.8rem">$'.number_format($p->price,2).'</span> <span style="color:#34d399;font-size:1.2rem">$'.number_format($p->sale_price,2).'</span>' : '<span style="font-size:1.2rem">$'.number_format($p->price,2).'</span>'; ?> <div class="de-service-card" style="cursor:pointer"> <div class="sc-icon"><i class="fas <?php echo esc_attr($p->icon ?: 'fa-box'); ?>"></i></div> <h3><?php echo esc_html($p->name); ?></h3> <p><?php echo esc_html($p->short_description); ?></p> <div style="margin-top:1rem;display:flex;align-items:center;justify-content:space-between"> <div style="font-weight:700"><?php echo $price_html; ?></div> <button class="de-btn-primary" style="padding:0.5rem 1.2rem;font-size:0.8rem">Buy Now</button> </div> </div> <?php endforeach; ?> </div><?php return ob_get_clean(); } add_shortcode('de_products', 'de_products_shortcode'); // ============================================================ // CUSTOM PAGE TEMPLATES // ============================================================ function digitaledu_page_templates($templates) { $pages = array( 'page-home.php' => __('Homepage', 'digitaledu'), 'page-services.php' => __('Services', 'digitaledu'), 'page-about.php' => __('About', 'digitaledu'), 'page-contact.php' => __('Contact', 'digitaledu'), 'page-community.php' => __('Community', 'digitaledu'), 'page-articles.php' => __('Articles', 'digitaledu'), 'page-tools.php' => __('Tools', 'digitaledu'), 'page-shop.php' => __('Shop', 'digitaledu'), 'page-login.php' => __('Login', 'digitaledu'), 'page-case-studies.php' => __('Case Studies', 'digitaledu'), 'page-careers.php' => __('Careers', 'digitaledu'), 'page-privacy.php' => __('Privacy Policy', 'digitaledu'), 'page-terms.php' => __('Terms of Service', 'digitaledu'), 'page-cookies.php' => __('Cookies Policy', 'digitaledu'), 'page-ai-writer.php' => __('AI Writer', 'digitaledu'), 'page-ai-writer-dashboard.php' => __('AI Writer Dashboard', 'digitaledu'), 'page-checkout.php' => __('Checkout', 'digitaledu'), 'page-courses.php' => __('Courses', 'digitaledu'), 'page-funnel.php' => __('Funnel / Quiz', 'digitaledu'), 'page-landing.php' => __('Landing / Founder', 'digitaledu'), 'page-partners.php' => __('Partners', 'digitaledu'), 'page-service-web-development.php' => __('Service - Web Development', 'digitaledu'), 'page-service-ai-automation.php' => __('Service - AI Automation', 'digitaledu'), 'page-service-digital-marketing.php' => __('Service - Digital Marketing', 'digitaledu'), 'page-service-ux-ui-design.php' => __('Service - UX/UI Design', 'digitaledu'), 'page-service-mobile-apps.php' => __('Service - Mobile Apps', 'digitaledu'), 'page-service-brand-strategy.php' => __('Service - Brand Strategy', 'digitaledu'), 'page-service-workflow-automation.php' => __('Service - Workflow Automation', 'digitaledu'), 'page-lead-scraper.php' => __('Lead Scraper & AI Outreach', 'digitaledu'), 'page-ai-automation-guide.php' => __('AI Automation Guide', 'digitaledu'), 'page-ai-resources.php' => __('AI Resource Center', 'digitaledu'), 'page-dashboard.php' => __('Dashboard', 'digitaledu'), 'page-my-account.php' => __('My Account', 'digitaledu'), ); return array_merge($templates, $pages); } add_filter('theme_page_templates', 'digitaledu_page_templates'); // ============================================================ // WIDGET AREAS // ============================================================ function digitaledu_widgets_init() { register_sidebar(array( 'name' => __('Sidebar', 'digitaledu'), 'id' => 'sidebar-1', 'before_widget' => '<div id="%1$s" class="de-widget %2$s">', 'after_widget' => '</div>', 'before_title' => '<h3 class="de-widget-title">', 'after_title' => '</h3>', )); } add_action('widgets_init', 'digitaledu_widgets_init'); // ============================================================ // AJAX: FRONT-END LOGIN (no wp-login.php redirect) // ============================================================ add_action('wp_ajax_nopriv_de_ajax_login', 'de_ajax_login'); function de_ajax_login() { check_ajax_referer('digitaledu_nonce', 'nonce'); if (de_rate_limit('login', 5, 300)) { wp_send_json_error(array('message' => 'Too many attempts. Try again in 5 minutes.')); } $login = trim($_POST['email'] ?? ''); $password = $_POST['password'] ?? ''; $remember = !empty($_POST['remember']); if (empty($login) || empty($password)) { wp_send_json_error(array('message' => 'Please fill in all fields.')); } // Accept either email or username $user = get_user_by('email', $login); if (!$user) { $user = get_user_by('login', $login); } if (!$user || !wp_check_password($password, $user->user_pass, $user->ID)) { wp_send_json_error(array('message' => 'Invalid email/username or password.')); } wp_set_current_user($user->ID); wp_set_auth_cookie($user->ID, $remember); do_action('wp_login', $user->user_login, $user); wp_send_json_success(array( 'message' => 'Welcome back!', 'redirect' => home_url('/dashboard/'), )); } // ============================================================ // AJAX: FRONT-END REGISTRATION // ============================================================ add_action('wp_ajax_nopriv_de_ajax_register', 'de_ajax_register'); function de_ajax_register() { check_ajax_referer('digitaledu_nonce', 'nonce'); if (de_rate_limit('register', 3, 900)) { wp_send_json_error(array('message' => 'Too many attempts. Try again in 15 minutes.')); } $name = sanitize_text_field($_POST['name'] ?? ''); $email = sanitize_email($_POST['email'] ?? ''); $password = $_POST['password'] ?? ''; if (empty($name) || empty($email) || empty($password)) { wp_send_json_error(array('message' => 'Please fill in all fields.')); } if (!is_email($email)) { wp_send_json_error(array('message' => 'Enter a valid email address.')); } if (strlen($password) < 6) { wp_send_json_error(array('message' => 'Password must be at least 6 characters.')); } if (email_exists($email)) { wp_send_json_error(array('message' => 'Account already exists. Sign in instead.')); } $username = sanitize_user(str_replace(' ', '_', $name), true); if (username_exists($username)) { $username .= '_' . substr(md5($email), 0, 6); } $user_id = wp_create_user($username, $password, $email); if (is_wp_error($user_id)) { wp_send_json_error(array('message' => 'Registration failed: ' . $user_id->get_error_message())); } wp_update_user(array('ID' => $user_id, 'display_name' => $name)); wp_set_current_user($user_id); wp_set_auth_cookie($user_id, true); wp_send_json_success(array( 'message' => 'Account created! Welcome to DigitalEdu.', 'redirect' => home_url('/dashboard/'), )); } // ============================================================ // AJAX: AI ARTICLE GENERATOR (standalone, no plugin needed) // ============================================================ add_action('wp_ajax_de_generate_article', 'de_ajax_generate_article'); add_action('wp_ajax_nopriv_de_generate_article', 'de_ajax_generate_article'); function de_ajax_generate_article() { check_ajax_referer('digitaledu_nonce', 'nonce'); if (de_rate_limit('ai_generate', 10, 3600)) { wp_send_json_error(array('message' => 'Daily limit reached. Try again tomorrow.')); } $topic = sanitize_text_field($_POST['topic'] ?? ''); $tone = sanitize_text_field($_POST['tone'] ?? 'professional'); $length = sanitize_text_field($_POST['length'] ?? 'medium'); if (empty($topic)) { wp_send_json_error(array('message' => 'Please provide a topic.')); } $word_map = array('short' => 300, 'medium' => 600, 'long' => 1000); $word_count = $word_map[$length] ?? 600; $t = esc_html($topic); $content = "<h2>About: {$t}</h2>\n"; $content .= "<p>This article explores <strong>{$t}</strong> and how AI automation can transform your business. At DigitalEdu, we build custom AI solutions for small businesses that deliver measurable results — an average of 147% revenue lift within six months and 60% reduction in operational costs.</p>\n"; $content .= "<p>AI automation is no longer optional — it's a competitive necessity. Small businesses leveraging AI automation outperform competitors by 2.5x. Whether you need workflow automation, custom AI systems, or intelligent tools, our services are designed to scale with your business.</p>\n"; $content .= "<p><a href=\"" . home_url('/funnel/') . "\" style=\"color:var(--de-green-light);font-weight:600\">Book a free strategy call →</a> to discover how AI automation can transform your operations.</p>\n"; wp_send_json_success(array('content' => $content)); } // ============================================================ // AJAX: SMTP TEST — ADMIN ONLY (SSRF prevention) // ============================================================ add_action('wp_ajax_de_test_smtp', 'de_ajax_test_smtp'); function de_ajax_test_smtp() { if (!current_user_can('manage_options')) { wp_send_json_error(array('message' => 'Admin access required.')); } check_ajax_referer('digitaledu_nonce', 'nonce'); $smtp_data = json_decode(stripslashes($_POST['smtp'] ?? '{}'), true); if (empty($smtp_data['host']) || empty($smtp_data['username']) || empty($smtp_data['password'])) { wp_send_json_error(array('message' => 'Missing SMTP configuration.')); } $mail = new PHPMailer\PHPMailer\PHPMailer(true); try { $mail->isSMTP(); $mail->Host = $smtp_data['host']; $mail->SMTPAuth = true; $mail->Username = $smtp_data['username']; $mail->Password = $smtp_data['password']; $mail->Port = intval($smtp_data['port'] ?? 587); $mail->SMTPSecure = $mail->Port === 465 ? PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_SMTPS : PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS; $mail->SMTPKeepAlive = true; $mail->smtpConnect(); $mail->smtpClose(); wp_send_json_success(array('message' => 'SMTP connection successful! ✓')); } catch (Exception $e) { wp_send_json_error(array('message' => 'SMTP error: ' . $mail->ErrorInfo)); } } // ============================================================ // LLMS.TXT — serve at root for AI crawlers (physical files also deployed) // ============================================================ add_action('init', 'de_llms_rewrite_rules'); function de_llms_rewrite_rules() { add_rewrite_rule('^llms\.txt$', 'index.php?__de_llms=main', 'top'); add_rewrite_rule('^llms-full\.txt$', 'index.php?__de_llms=full', 'top'); } add_filter('query_vars', function($vars) { $vars[] = '__de_llms'; return $vars; }); add_action('template_redirect', 'de_serve_llms_txt'); function de_serve_llms_txt() { $type = get_query_var('__de_llms'); if (!$type) return; $file = get_template_directory() . '/' . ($type === 'full' ? 'llms-full.txt' : 'llms.txt'); if (!file_exists($file)) return; while (ob_get_level()) ob_end_clean(); status_header(200); header('Content-Type: text/plain; charset=utf-8'); header('X-Robots-Tag: noindex, noarchive'); header('Cache-Control: max-age=3600, public'); readfile($file); exit; } add_action('after_switch_theme', function() { de_llms_rewrite_rules(); flush_rewrite_rules(); }); // ============================================================ // SCHEMA.ORG MARKUP — only when RankMath is NOT active // ============================================================ function digitaledu_schema_markup() { // Let RankMath handle Organization schema when active (it's more comprehensive for that) // Note: is_plugin_active() is admin-only; defined() check is sufficient since RankMath sets its constant on init. // FAQPage schema is always output because RankMath FAQ schema requires manual opt-in configuration. $rankmath_active = defined('RANK_MATH_VERSION'); if (!is_front_page()) return; // Organization schema — suppress if RankMath handles it if (!$rankmath_active) { $org = array( '@context' => 'https://schema.org', '@type' => 'Organization', 'name' => 'DigitalEdu', 'url' => home_url(), 'description' => 'AI automation and digital growth consulting for small businesses.', 'foundingDate' => '2020', 'email' => 'growth@digitaledu.website', 'sameAs' => array('https://twitter.com/digitaledu', 'https://linkedin.com/company/digitaledu'), ); echo '<script type="application/ld+json">' . json_encode($org, JSON_UNESCAPED_SLASHES) . '</script>' . "\n"; } // FAQPage schema — always output (RankMath FAQ schema requires manual opt-in) $faq = array( '@context' => 'https://schema.org', '@type' => 'FAQPage', 'mainEntity' => array( array('@type' => 'Question', 'name' => 'What AI automation services does DigitalEdu offer?', 'acceptedAnswer' => array('@type' => 'Answer', 'text' => 'Full-service AI solutions including workflow automation, AI system development, ML pipeline creation, data analytics automation, and custom automation design.')), array('@type' => 'Question', 'name' => 'How much does an AI automation project cost?', 'acceptedAnswer' => array('@type' => 'Answer', 'text' => 'Web development starts at $100, AI automation from $1K to $5K, workflow automation from $3K to $10K. Transparent quotes after a free discovery call.')), array('@type' => 'Question', 'name' => 'How long does implementation take?', 'acceptedAnswer' => array('@type' => 'Answer', 'text' => 'Simple workflows take 2-4 weeks. Complex AI systems take 6-12 weeks. Detailed timelines provided during discovery.')), array('@type' => 'Question', 'name' => 'Do you work with startups or enterprises?', 'acceptedAnswer' => array('@type' => 'Answer', 'text' => 'Both. From early-stage startups to Fortune 500 companies. AI solutions scale to match needs and budget.')), array('@type' => 'Question', 'name' => 'What happens after deployment?', 'acceptedAnswer' => array('@type' => 'Answer', 'text' => 'Ongoing support, maintenance, and optimization. Many clients retain us for continuous improvement and new AI features.')), ), ); echo '<script type="application/ld+json">' . json_encode($faq, JSON_UNESCAPED_SLASHES) . '</script>' . "\n"; } add_action('wp_head', 'digitaledu_schema_markup');

AI

HP and the art of AI and data for the enterprise

Data Ahead of the AI & Big Data Expo at the San…

May 6, 2026 Read →

Apple to pay $250M to settle lawsuit over Siri’s delayed AI features

Pay $250 Apple has agreed to pay $250 million to settle a…

May 6, 2026 Read →

Ethos raises $22.75M from a16z for its expert network with voice onboarding

Ethos Ethos says it is onboarding 35,000 experts per week. Source: Original…

May 6, 2026 Read →

At TechCrunch Disrupt 2026, all your M&A questions will be answered

2026. Register Leaders from Coinbase, M13, and Mignano Law Group talk about…

May 6, 2026 Read →

US government increases AI suppliers and rethinks Anthropic’s role

Learn about Us Government in this comprehensive guide. We cover everything you…

May 6, 2026 Read →

Google tests Remy AI agent for Gemini as focus turns to user control

Google Google is testing Remy, a new AI personal agent for Gemini,…

May 6, 2026 Read →

OpenAI releases GPT-5.5 Instant, a new default model for ChatGPT

Learn about Openai in this comprehensive guide. We cover everything you need…

May 5, 2026 Read →

PayPal says it’s ‘becoming a technology company again.’ That means AI.

Paypal PayPal is pitching an AI-led turnaround, tying automation and restructuring to…

May 5, 2026 Read →

Etsy launches its app within ChatGPT as it continues its AI push

Etsy Etsy’s new native app within ChatGPT aims to be a conversational…

May 5, 2026 Read →

Meta will use AI to analyze height and bone structure to identify if users are underage

Meta The visual analysis system is now operating in select countries, but…

May 5, 2026 Read →