File: /var/www/html/wp-content/mu-plugins/ethnic-mobile-game-development-page.php
<?php
/**
* Plugin Name: Ethnic Mobile Game Development Page
* Description: Creates and renders the Mobile Game Development sub-service page under Game Development.
* Version: 1.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_parent_id' ) ) {
function ethnic_mobile_game_development_page_parent_id() {
static $parent_id = null;
if ( null !== $parent_id ) {
return $parent_id;
}
$page = get_page_by_path( 'services/game-development' );
if ( $page instanceof WP_Post ) {
$parent_id = (int) $page->ID;
} else {
$fallback = get_page_by_path( 'game-development' );
$parent_id = $fallback instanceof WP_Post ? (int) $fallback->ID : 0;
}
return $parent_id;
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_get_target_page' ) ) {
function ethnic_mobile_game_development_page_get_target_page() {
static $page = false;
if ( false !== $page ) {
return $page instanceof WP_Post ? $page : null;
}
$page = get_page_by_path( 'services/game-development/mobile-game-development' );
if ( ! ( $page instanceof WP_Post ) ) {
$fallback = get_page_by_path( 'mobile-game-development' );
if ( $fallback instanceof WP_Post && (int) $fallback->post_parent === ethnic_mobile_game_development_page_parent_id() ) {
$page = $fallback;
}
}
return $page instanceof WP_Post ? $page : null;
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_ensure_page' ) ) {
function ethnic_mobile_game_development_page_ensure_page() {
static $did_run = false;
if ( $did_run ) {
return;
}
$did_run = true;
$parent_id = ethnic_mobile_game_development_page_parent_id();
if ( ! $parent_id ) {
return;
}
$postarr = array(
'post_type' => 'page',
'post_title' => 'Mobile Game Development',
'post_name' => 'mobile-game-development',
'post_parent' => $parent_id,
'post_status' => 'publish',
'post_content' => '',
'comment_status' => 'closed',
'ping_status' => 'closed',
);
$page = get_page_by_path( 'services/game-development/mobile-game-development' );
if ( $page instanceof WP_Post ) {
$needs_update = 'Mobile Game Development' !== $page->post_title
|| (int) $page->post_parent !== $parent_id
|| 'publish' !== $page->post_status;
if ( $needs_update ) {
wp_update_post(
array_merge(
$postarr,
array(
'ID' => (int) $page->ID,
)
)
);
clean_post_cache( (int) $page->ID );
}
return;
}
$fallback = get_page_by_path( 'mobile-game-development' );
if ( $fallback instanceof WP_Post ) {
wp_update_post(
array_merge(
$postarr,
array(
'ID' => (int) $fallback->ID,
)
)
);
clean_post_cache( (int) $fallback->ID );
return;
}
wp_insert_post( $postarr );
}
add_action( 'init', 'ethnic_mobile_game_development_page_ensure_page', 5 );
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_is_target' ) ) {
function ethnic_mobile_game_development_page_is_target() {
if ( is_admin() ) {
return false;
}
$page = ethnic_mobile_game_development_page_get_target_page();
if ( ! ( $page instanceof WP_Post ) ) {
return false;
}
return (int) get_queried_object_id() === (int) $page->ID || is_page( (int) $page->ID );
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_url' ) ) {
function ethnic_mobile_game_development_page_url( $path ) {
return home_url( '/' . ltrim( (string) $path, '/' ) . '/' );
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_contact_url' ) ) {
function ethnic_mobile_game_development_page_contact_url( $args = array() ) {
return ethnic_consultation_route_contact_url( $args, ethnic_mobile_game_development_page_url( 'contact-us' ) );
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_case_studies_url' ) ) {
function ethnic_mobile_game_development_page_case_studies_url() {
return function_exists( 'ethnic_case_studies_archive_url' ) ? ethnic_case_studies_archive_url() : ethnic_mobile_game_development_page_url( 'case-studies' );
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_data' ) ) {
function ethnic_mobile_game_development_page_data() {
static $data = null;
if ( null !== $data ) {
return $data;
}
$data = array(
'metaTitle' => 'Mobile Game Development Company | Casual, Competitive & Multiplayer Mobile Games',
'metaDescription' => 'Looking for a mobile game development company? We build casual, competitive, and multiplayer mobile games with platform strategy, monetization planning, and live operations support.',
'heroTitle' => 'Mobile Game Development',
'heroText' => 'As a mobile game development company, we build engaging, scalable, and market-ready mobile games for iOS and Android audiences with gameplay planning, production execution, monetization readiness, and post-launch support working together.',
'heroPoints' => array(
'Casual, competitive, and multiplayer mobile game development',
'Platform-aware production for iOS and Android',
'Monetization, updates, and live game support',
),
'overviewParagraphs' => array(
'Our mobile game development services support studios, startups, brands, and entertainment businesses that need help moving from prototype or MVP into full production, launch preparation, and live product improvement. The goal is not only to ship a playable game, but to shape a mobile product that is stable, engaging, and commercially ready.',
'We work across different genres, mechanics, and progression models while keeping gameplay quality, player retention, technical stability, and mobile game monetization planning in view from the beginning. That includes casual mobile games, competitive systems, and multiplayer mobile game development depending on the audience and product strategy.',
'Support can span design, engineering, game UI, backend-connected features, analytics, content planning, launch readiness, and live operations so the product continues to improve after the first release milestone.',
),
'overviewFeatures' => array(
array(
'icon' => 'controller',
'title' => 'End-to-End Mobile Game Production',
'copy' => 'Move from prototype validation and feature planning into full production, launch preparation, updates, and live product support with one connected workflow.',
),
array(
'icon' => 'platform',
'title' => 'iOS and Android Delivery',
'copy' => 'Plan release scope, technical decisions, QA, and performance around the requirements of iOS and Android audiences.',
),
array(
'icon' => 'coins',
'title' => 'Monetization and Retention Planning',
'copy' => 'Align progression, economy, offers, and session design with the retention and revenue model the mobile game needs to support.',
),
array(
'icon' => 'live',
'title' => 'Live Operations Support',
'copy' => 'Support event cadence, updates, analytics review, balancing, and long-term improvement after launch.',
),
),
'overviewStats' => array(
array(
'label' => 'Production path',
'value' => 'Prototype to live ops',
),
array(
'label' => 'Platform scope',
'value' => 'iOS and Android delivery',
),
array(
'label' => 'Commercial focus',
'value' => 'Retention, scale, monetization',
),
),
'modeIntro' => 'Production approach changes with genre, audience, retention goals, and platform expectations. Casual mobile games, competitive products, and multiplayer mobile game development each require different design, technical, and live-support priorities.',
'gameModes' => array(
array(
'icon' => 'casual',
'title' => 'Casual Games',
'copy' => 'Build accessible gameplay loops with lighter onboarding, clear progression, and session structures designed for broad mobile audiences.',
'highlights' => array(
'Accessible gameplay loops',
'Simple onboarding and readability',
'Short-session engagement',
'Ad-supported or hybrid monetization potential',
'Broader audience reach',
),
),
array(
'icon' => 'competitive',
'title' => 'Competitive Games',
'copy' => 'Support skill-based systems, ranked progression, fair session balance, and replay-friendly design that keeps returning players invested.',
'highlights' => array(
'Skill-based mechanics',
'Ranked or challenge-driven progression',
'Session balance and fairness planning',
'Replayability and mastery loops',
'Retention-focused competitive systems',
),
),
array(
'icon' => 'multiplayer',
'title' => 'Multiplayer Games',
'copy' => 'Plan connected player experiences with the backend, matchmaking, and engagement support needed for real-time or asynchronous play.',
'highlights' => array(
'Connected player experiences',
'Real-time or asynchronous models',
'Backend and matchmaking considerations',
'Scalable session support',
'Longer-term engagement planning',
),
),
),
'platformParagraphs' => array(
'Mobile game development needs to account for platform-specific behavior, device coverage, performance expectations, touch interaction, and how players discover and use games across iOS and Android. Those platform realities influence both production and launch planning.',
'The right build approach may be native, engine-based, or cross-platform depending on the game type, content complexity, feature roadmap, and delivery scope. We shape the technical path around product fit rather than forcing the same solution onto every game.',
'Platform strategy also includes store readiness, performance optimization, QA coverage, release sequencing, and launch decisions that may differ by audience, geography, or distribution plan.',
),
'platformHighlights' => array(
array(
'icon' => 'mobile',
'title' => 'iOS and Android Release Planning',
'copy' => 'Shape release scope, sequencing, and launch expectations around the stores and audiences the game needs to reach.',
),
array(
'icon' => 'touch',
'title' => 'Touch-First Interaction Design',
'copy' => 'Adapt UI, controls, readability, and player flow to how mobile users actually interact with the game.',
),
array(
'icon' => 'devices',
'title' => 'Device and Performance Optimization',
'copy' => 'Plan around frame rate, load behavior, asset weight, and device variation so the game stays playable at scale.',
),
array(
'icon' => 'test',
'title' => 'Platform-Aware QA Support',
'copy' => 'Test across device conditions, interaction states, and release paths with mobile-specific quality control in mind.',
),
array(
'icon' => 'store',
'title' => 'Store Launch Readiness',
'copy' => 'Prepare the product for launch with clearer release packaging, visual readiness, and distribution support.',
),
array(
'icon' => 'deploy',
'title' => 'Scalable Mobile Production Strategy',
'copy' => 'Align tools, content pipelines, build workflows, and release operations with longer-term product growth.',
),
),
'platformStages' => array(
array(
'title' => 'Targets',
'items' => array( 'iOS release path', 'Android release path', 'Audience split', 'Geography fit' ),
),
array(
'title' => 'Interaction',
'items' => array( 'Touch-first UX', 'HUD clarity', 'Screen adaptation', 'Session flow' ),
),
array(
'title' => 'Performance',
'items' => array( 'Device coverage', 'Optimization priorities', 'Asset sizing', 'Runtime stability' ),
),
array(
'title' => 'Launch',
'items' => array( 'Store readiness', 'QA checkpoints', 'Build submission', 'Live update planning' ),
),
),
'monetizationParagraphs' => array(
'Mobile game monetization should support the player experience and the broader product strategy rather than feeling bolted on late in development. The right model depends on genre, player expectations, progression design, and how the game needs to perform commercially over time.',
'We support premium, free-to-play, ad-based, in-app purchase, battle pass, subscription, and hybrid approaches with planning that starts early enough to influence progression, retention, reward design, and economy structure in a practical way.',
),
'monetizationAreas' => array(
array(
'icon' => 'store',
'title' => 'In-App Purchases',
'copy' => 'Shape offer structure, purchase visibility, and value design around the way players progress through the game.',
),
array(
'icon' => 'ads',
'title' => 'Ad-Supported Flows',
'copy' => 'Use rewarded or supporting ad placements carefully so monetization does not break session quality.',
),
array(
'icon' => 'premium',
'title' => 'Premium Game Pricing',
'copy' => 'Support mobile products that need a clearer upfront purchase model instead of a free-to-play economy.',
),
array(
'icon' => 'pass',
'title' => 'Battle Pass and Season Systems',
'copy' => 'Plan seasonal content, pass design, and repeat engagement structures for longer-term live products.',
),
array(
'icon' => 'spark',
'title' => 'Reward-Based Progression Support',
'copy' => 'Align rewards, challenge systems, and progression pacing with retention-friendly player motivation.',
),
array(
'icon' => 'balance',
'title' => 'Retention-Aligned Economy Planning',
'copy' => 'Balance pricing, progression, session value, and long-term economy behavior with product goals in mind.',
),
),
'liveOpsParagraphs' => array(
'Successful mobile games often require updates after launch to improve retention, player satisfaction, operational stability, and long-term product value. Live operations are part of how the product stays healthy rather than a separate afterthought.',
'That can include content drops, balancing, event support, progression tuning, analytics review, bug fixes, and performance improvement. The most effective live game workflows stay tied to player behavior, release planning, and operational visibility.',
),
'liveOpsAreas' => array(
array(
'icon' => 'live',
'title' => 'Content and Feature Updates',
'copy' => 'Support structured updates that introduce new content, features, and product improvements without losing release discipline.',
),
array(
'icon' => 'event',
'title' => 'Event and Campaign Support',
'copy' => 'Plan seasonal events, challenges, campaigns, and timed experiences that help keep players engaged.',
),
array(
'icon' => 'fix',
'title' => 'Performance and Bug Fix Improvements',
'copy' => 'Respond to quality issues, runtime problems, and player friction with practical release planning and fixes.',
),
array(
'icon' => 'trend',
'title' => 'Player Behavior Analytics Review',
'copy' => 'Use analytics insight to understand progression, session behavior, conversion, and retention patterns over time.',
),
array(
'icon' => 'balance',
'title' => 'Retention and Balancing Adjustments',
'copy' => 'Refine pacing, difficulty, economy behavior, and reward structure to support healthier long-term engagement.',
),
array(
'icon' => 'support',
'title' => 'Ongoing Live Product Support',
'copy' => 'Keep planning, release cadence, monitoring, and improvement workflows active as the mobile game grows.',
),
),
'liveOpsWidgets' => array(
array(
'label' => 'Live events',
'value' => '3 planned drops',
),
array(
'label' => 'Retention trend',
'value' => '+18% D30 goal',
),
array(
'label' => 'Update cadence',
'value' => 'Bi-weekly sprint',
),
),
'ctaTitle' => 'Looking for a Mobile Game Development Company?',
'ctaText' => 'Talk with us about casual mobile games, competitive or multiplayer concepts, iOS and Android production, mobile game monetization planning, or post-launch live operations support with a team focused on practical delivery and long-term product value.',
'ctaHighlights' => array(
'Plan the right production path for casual, competitive, or multiplayer mobile game development',
'Align platform strategy, monetization, and live support before launch pressure builds',
'Move from concept or MVP into production, release, and long-term improvement more confidently',
),
'ctaSteps' => array(
array(
'title' => 'Review the game concept',
'copy' => 'Clarify audience, core loop, monetization model, and platform priorities before production scope expands.',
),
array(
'title' => 'Shape the delivery plan',
'copy' => 'Map gameplay systems, technical approach, release targets, and live operations needs into a workable plan.',
),
array(
'title' => 'Move into production and launch support',
'copy' => 'Turn the concept into a practical roadmap for development, release readiness, and post-launch improvement.',
),
),
);
return $data;
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_heading' ) ) {
function ethnic_mobile_game_development_page_heading( $eyebrow, $title, $copy = '' ) {
ob_start();
?>
<div class="ethnic-mobile-game-heading">
<?php if ( $eyebrow ) : ?>
<p class="ethnic-mobile-game-heading__eyebrow"><?php echo esc_html( $eyebrow ); ?></p>
<?php endif; ?>
<h2 class="ethnic-mobile-game-heading__title"><?php echo esc_html( $title ); ?></h2>
<?php if ( $copy ) : ?>
<p class="ethnic-mobile-game-heading__copy"><?php echo esc_html( $copy ); ?></p>
<?php endif; ?>
</div>
<?php
return ob_get_clean();
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_icon' ) ) {
function ethnic_mobile_game_development_page_icon( $icon ) {
ob_start();
switch ( $icon ) {
case 'competitive':
?>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="m6 17.8 6-11.6 6 11.6" />
<path d="M9.2 13.2h5.6" />
<path d="M12 6.8v10.4" />
</svg>
<?php
break;
case 'touch':
?>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="M9.4 17.8V9.2a1.6 1.6 0 0 1 3.2 0V12" />
<path d="M12.6 11.6a1.5 1.5 0 0 1 2.8.8V17a3 3 0 0 1-3 3H11a3 3 0 0 1-2.4-1.2L6 15.2a1.4 1.4 0 0 1 2.2-1.7l1.2 1.4" />
<path d="M15.6 6.2a3 3 0 0 1 0 4.2" />
<path d="M17.9 3.9a6.3 6.3 0 0 1 0 8.8" />
</svg>
<?php
break;
case 'devices':
?>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<rect x="4.4" y="4.4" width="8.8" height="15.2" rx="2" />
<rect x="14.6" y="7" width="5.6" height="10" rx="1.4" />
<path d="M8 7.2h1.6" />
</svg>
<?php
break;
case 'event':
?>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<rect x="4.2" y="5.2" width="15.6" height="14" rx="2" />
<path d="M8 3.8v2.8" />
<path d="M16 3.8v2.8" />
<path d="M4.2 9.4h15.6" />
<path d="m9.6 13.6 1.5 1.5 3.3-3.5" />
</svg>
<?php
break;
case 'fix':
?>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="m7.6 9.4 2-2a2.4 2.4 0 0 1 3.4 0l3.6 3.6a2.4 2.4 0 0 1 0 3.4l-2 2" />
<path d="m6.2 17.8 4.4-4.4" />
<path d="m8.4 6.8 2.8 2.8" />
</svg>
<?php
break;
case 'trend':
?>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path d="M5.2 17.8h13.6" />
<path d="M6.2 15.6 10 11.8l2.6 2.6 5.2-5.6" />
<path d="M15.8 8.8h2v2" />
</svg>
<?php
break;
default:
if ( function_exists( 'ethnic_game_development_page_icon' ) ) {
ob_end_clean();
return ethnic_game_development_page_icon( $icon );
}
if ( function_exists( 'ethnic_services_page_icon' ) ) {
ob_end_clean();
return ethnic_services_page_icon( 'game' );
}
?>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<circle cx="12" cy="12" r="8.5" />
<path d="M8.6 12.3 10.8 14.5 15.4 9.9" />
</svg>
<?php
break;
}
return ob_get_clean();
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_render' ) ) {
function ethnic_mobile_game_development_page_render() {
$data = ethnic_mobile_game_development_page_data();
$consultation_url = ethnic_mobile_game_development_page_contact_url(
array(
'intent' => 'consultation',
'service' => 'mobile-game-development',
)
);
$team_url = ethnic_mobile_game_development_page_contact_url(
array(
'intent' => 'team',
'service' => 'mobile-game-development',
)
);
$quote_url = ethnic_mobile_game_development_page_contact_url(
array(
'intent' => 'quote',
'service' => 'mobile-game-development',
)
);
$case_studies_url = ethnic_mobile_game_development_page_case_studies_url();
ob_start();
?>
<div class="ethnic-mobile-game-page">
<section class="ethnic-mobile-game-section ethnic-mobile-game-section--hero">
<div class="ethnic-mobile-game-shell">
<div class="ethnic-mobile-game-hero">
<div class="ethnic-mobile-game-hero__copy">
<p class="ethnic-mobile-game-kicker">Mobile Game Production</p>
<h1 class="ethnic-mobile-game-hero__title"><?php echo esc_html( $data['heroTitle'] ); ?></h1>
<p class="ethnic-mobile-game-hero__lead"><?php echo esc_html( $data['heroText'] ); ?></p>
<div class="ethnic-mobile-game-actions">
<a class="ethnic-mobile-game-button ethnic-mobile-game-button--primary" href="<?php echo esc_url( $consultation_url ); ?>">Book a Free Consultation</a>
<a class="ethnic-mobile-game-button ethnic-mobile-game-button--secondary" href="<?php echo esc_url( $case_studies_url ); ?>">View Case Studies</a>
</div>
<ul class="ethnic-mobile-game-hero__points" aria-label="Mobile game development highlights">
<?php foreach ( (array) $data['heroPoints'] as $point ) : ?>
<li><?php echo esc_html( $point ); ?></li>
<?php endforeach; ?>
</ul>
</div>
<div class="ethnic-mobile-game-hero__visual" aria-hidden="true">
<div class="ethnic-mobile-game-scene">
<div class="ethnic-mobile-game-scene__screen">
<div class="ethnic-mobile-game-scene__hud">
<span class="ethnic-mobile-game-scene__hud-pill">Stage 12</span>
<span class="ethnic-mobile-game-scene__hud-pill">Live build ready</span>
</div>
<div class="ethnic-mobile-game-scene__world">
<div class="ethnic-mobile-game-scene__terrain"></div>
<div class="ethnic-mobile-game-scene__character-card">
<p>Character card</p>
<strong>Volt Runner</strong>
<span>Dash / Combo / Energy</span>
</div>
<div class="ethnic-mobile-game-scene__analytics">
<div>
<small>D7 retention</small>
<strong>41%</strong>
</div>
<div>
<small>Session length</small>
<strong>9.8m</strong>
</div>
</div>
<div class="ethnic-mobile-game-scene__store-card">
<p>Store preview</p>
<strong>App store-style art set</strong>
<div class="ethnic-mobile-game-scene__store-lines">
<span>Gameplay trailer card</span>
<span>Core feature screenshots</span>
<span>Monetization-ready release notes</span>
</div>
</div>
</div>
</div>
<div class="ethnic-mobile-game-scene__panel ethnic-mobile-game-scene__panel--engine">
<p>HUD preview</p>
<strong>Touch-first controls, readable combat UI, and mobile-optimized progression views.</strong>
</div>
<div class="ethnic-mobile-game-scene__panel ethnic-mobile-game-scene__panel--production">
<p>Live ops board</p>
<ul>
<li>Event schedule aligned</li>
<li>Economy tuning in review</li>
<li>Launch assets in progress</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="ethnic-mobile-game-section" id="overview">
<div class="ethnic-mobile-game-shell">
<?php echo ethnic_mobile_game_development_page_heading( 'Service Overview', 'Mobile game development services built for teams that need gameplay quality, technical execution, and commercial readiness to work together.', 'We support product planning, delivery, launch, and live improvement with a structure that helps both creative and business stakeholders stay aligned.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
<div class="ethnic-mobile-game-overview">
<div class="ethnic-mobile-game-overview__content">
<div class="ethnic-mobile-game-prose">
<?php foreach ( (array) $data['overviewParagraphs'] as $paragraph ) : ?>
<p><?php echo esc_html( $paragraph ); ?></p>
<?php endforeach; ?>
</div>
<div class="ethnic-mobile-game-card-grid ethnic-mobile-game-card-grid--overview">
<?php foreach ( (array) $data['overviewFeatures'] as $feature ) : ?>
<article class="ethnic-mobile-game-card ethnic-mobile-game-card--feature">
<div class="ethnic-mobile-game-card__icon">
<?php echo ethnic_mobile_game_development_page_icon( $feature['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
<h3><?php echo esc_html( $feature['title'] ); ?></h3>
<p><?php echo esc_html( $feature['copy'] ); ?></p>
</article>
<?php endforeach; ?>
</div>
</div>
<div class="ethnic-mobile-game-overview__visual" aria-label="Mobile game production overview">
<div class="ethnic-mobile-game-overview-board">
<div class="ethnic-mobile-game-overview-board__header">
<p>Mobile product overview</p>
<strong>Gameplay, retention, monetization, analytics, and live support connected in one production path.</strong>
</div>
<div class="ethnic-mobile-game-overview-board__lanes">
<span>Gameplay</span>
<span>Economy</span>
<span>Live Ops</span>
<span>Analytics</span>
</div>
<div class="ethnic-mobile-game-overview-board__stats">
<?php foreach ( (array) $data['overviewStats'] as $stat ) : ?>
<div class="ethnic-mobile-game-overview-board__stat">
<strong><?php echo esc_html( $stat['value'] ); ?></strong>
<span><?php echo esc_html( $stat['label'] ); ?></span>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="ethnic-mobile-game-section ethnic-mobile-game-section--soft" id="game-types">
<div class="ethnic-mobile-game-shell">
<?php echo ethnic_mobile_game_development_page_heading( 'Casual, Competitive, and Multiplayer Games', 'The right mobile game production model depends on genre, audience, retention goals, and how the game needs to behave after launch.', $data['modeIntro'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
<div class="ethnic-mobile-game-card-grid ethnic-mobile-game-card-grid--modes">
<?php foreach ( (array) $data['gameModes'] as $mode ) : ?>
<article class="ethnic-mobile-game-card ethnic-mobile-game-mode-card">
<div class="ethnic-mobile-game-mode-card__art">
<div class="ethnic-mobile-game-card__icon">
<?php echo ethnic_mobile_game_development_page_icon( $mode['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
<span class="ethnic-mobile-game-mode-card__beam"></span>
</div>
<h3><?php echo esc_html( $mode['title'] ); ?></h3>
<p><?php echo esc_html( $mode['copy'] ); ?></p>
<ul class="ethnic-mobile-game-mode-card__highlights">
<?php foreach ( (array) $mode['highlights'] as $highlight ) : ?>
<li><?php echo esc_html( $highlight ); ?></li>
<?php endforeach; ?>
</ul>
</article>
<?php endforeach; ?>
</div>
</div>
</section>
<section class="ethnic-mobile-game-section" id="platform-approach">
<div class="ethnic-mobile-game-shell">
<?php echo ethnic_mobile_game_development_page_heading( 'Platform Approach', 'Mobile platform strategy influences technical decisions, performance planning, store readiness, and how the final game feels on iOS and Android.', 'We align production choices with device realities, release goals, and the audience expectations that shape a successful mobile launch.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
<div class="ethnic-mobile-game-stack">
<div class="ethnic-mobile-game-stack__copy">
<div class="ethnic-mobile-game-prose">
<?php foreach ( (array) $data['platformParagraphs'] as $paragraph ) : ?>
<p><?php echo esc_html( $paragraph ); ?></p>
<?php endforeach; ?>
</div>
<div class="ethnic-mobile-game-card-grid ethnic-mobile-game-card-grid--platform">
<?php foreach ( (array) $data['platformHighlights'] as $highlight ) : ?>
<article class="ethnic-mobile-game-card ethnic-mobile-game-card--platform">
<div class="ethnic-mobile-game-card__icon">
<?php echo ethnic_mobile_game_development_page_icon( $highlight['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
<h3><?php echo esc_html( $highlight['title'] ); ?></h3>
<p><?php echo esc_html( $highlight['copy'] ); ?></p>
</article>
<?php endforeach; ?>
</div>
</div>
<div class="ethnic-mobile-game-stack__visual" aria-label="Mobile platform strategy visual">
<div class="ethnic-mobile-game-toolchain">
<p class="ethnic-mobile-game-toolchain__eyebrow">Platform delivery map</p>
<div class="ethnic-mobile-game-toolchain__stages">
<?php foreach ( (array) $data['platformStages'] as $stage ) : ?>
<div class="ethnic-mobile-game-toolchain__stage">
<strong><?php echo esc_html( $stage['title'] ); ?></strong>
<div class="ethnic-mobile-game-toolchain__badges">
<?php foreach ( (array) $stage['items'] as $item ) : ?>
<span><?php echo esc_html( $item ); ?></span>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="ethnic-mobile-game-section ethnic-mobile-game-section--soft" id="monetization-options">
<div class="ethnic-mobile-game-shell">
<?php echo ethnic_mobile_game_development_page_heading( 'Monetization Options', 'Mobile game monetization should support the player experience and product model instead of disrupting what makes the game engaging.', 'We integrate monetization thinking early so economy design, progression, retention, and offer structure have time to develop in the right direction.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
<div class="ethnic-mobile-game-monetization">
<div class="ethnic-mobile-game-monetization__content">
<div class="ethnic-mobile-game-prose">
<?php foreach ( (array) $data['monetizationParagraphs'] as $paragraph ) : ?>
<p><?php echo esc_html( $paragraph ); ?></p>
<?php endforeach; ?>
</div>
<div class="ethnic-mobile-game-card-grid ethnic-mobile-game-card-grid--monetization">
<?php foreach ( (array) $data['monetizationAreas'] as $area ) : ?>
<article class="ethnic-mobile-game-card ethnic-mobile-game-card--monetization">
<div class="ethnic-mobile-game-card__icon">
<?php echo ethnic_mobile_game_development_page_icon( $area['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
<h3><?php echo esc_html( $area['title'] ); ?></h3>
<p><?php echo esc_html( $area['copy'] ); ?></p>
</article>
<?php endforeach; ?>
</div>
</div>
<div class="ethnic-mobile-game-monetization__visual" aria-label="Mobile game monetization planning visual">
<div class="ethnic-mobile-game-monetization-board">
<p class="ethnic-mobile-game-monetization-board__eyebrow">Player-first monetization</p>
<div class="ethnic-mobile-game-monetization-board__ring">
<span>IAP</span>
<span>Ads</span>
<span>Passes</span>
<span>Retention</span>
</div>
<div class="ethnic-mobile-game-monetization-board__models">
<span>Premium</span>
<span>Free-to-play</span>
<span>Hybrid</span>
<span>Subscription</span>
<span>Battle pass</span>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="ethnic-mobile-game-section" id="updates-live-operations">
<div class="ethnic-mobile-game-shell">
<?php echo ethnic_mobile_game_development_page_heading( 'Updates and Live Operations', 'Post-launch improvement is often where mobile game products protect retention, stabilize operations, and increase long-term value.', 'Content updates, event support, analytics review, and structured balancing decisions help the game keep moving after release.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
<div class="ethnic-mobile-game-liveops">
<div class="ethnic-mobile-game-liveops__visual" aria-label="Live operations dashboard">
<div class="ethnic-mobile-game-liveops-board">
<div class="ethnic-mobile-game-liveops-board__header">
<p>Live operations dashboard</p>
<strong>Roadmap planning, engagement review, update cadence, and event timing brought into one mobile game support view.</strong>
</div>
<div class="ethnic-mobile-game-liveops-board__widgets">
<?php foreach ( (array) $data['liveOpsWidgets'] as $widget ) : ?>
<div class="ethnic-mobile-game-liveops-board__widget">
<small><?php echo esc_html( $widget['label'] ); ?></small>
<strong><?php echo esc_html( $widget['value'] ); ?></strong>
</div>
<?php endforeach; ?>
</div>
<div class="ethnic-mobile-game-liveops-board__roadmap">
<div>
<small>Roadmap</small>
<span>Patch tuning</span>
</div>
<div>
<small>Event</small>
<span>Weekend challenge</span>
</div>
<div>
<small>Analytics</small>
<span>Conversion review</span>
</div>
<div>
<small>Performance</small>
<span>Device fix sweep</span>
</div>
</div>
</div>
</div>
<div class="ethnic-mobile-game-liveops__content">
<div class="ethnic-mobile-game-prose">
<?php foreach ( (array) $data['liveOpsParagraphs'] as $paragraph ) : ?>
<p><?php echo esc_html( $paragraph ); ?></p>
<?php endforeach; ?>
</div>
<div class="ethnic-mobile-game-card-grid ethnic-mobile-game-card-grid--liveops">
<?php foreach ( (array) $data['liveOpsAreas'] as $area ) : ?>
<article class="ethnic-mobile-game-card ethnic-mobile-game-card--liveops">
<div class="ethnic-mobile-game-card__icon">
<?php echo ethnic_mobile_game_development_page_icon( $area['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
<h3><?php echo esc_html( $area['title'] ); ?></h3>
<p><?php echo esc_html( $area['copy'] ); ?></p>
</article>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
</section>
<section class="ethnic-mobile-game-section ethnic-mobile-game-section--cta" id="cta">
<div class="ethnic-mobile-game-shell">
<div class="ethnic-mobile-game-cta">
<div class="ethnic-mobile-game-cta__copy">
<div class="ethnic-mobile-game-cta__intro">
<p class="ethnic-mobile-game-kicker ethnic-mobile-game-kicker--light">Ready to Talk</p>
<p class="ethnic-mobile-game-cta__note">Planning around casual mobile games, competitive systems, multiplayer scope, iOS and Android delivery, monetization, and live operations.</p>
</div>
<h2><?php echo esc_html( $data['ctaTitle'] ); ?></h2>
<p class="ethnic-mobile-game-cta__lead"><?php echo esc_html( $data['ctaText'] ); ?></p>
<div class="ethnic-mobile-game-actions">
<a class="ethnic-mobile-game-button ethnic-mobile-game-button--primary" href="<?php echo esc_url( $team_url ); ?>">Talk to Our Team</a>
<a class="ethnic-mobile-game-button ethnic-mobile-game-button--secondary" href="<?php echo esc_url( $quote_url ); ?>">Get a Free Quote</a>
</div>
<ul class="ethnic-mobile-game-cta__highlights" aria-label="Mobile game development CTA highlights">
<?php foreach ( (array) $data['ctaHighlights'] as $highlight ) : ?>
<li><?php echo esc_html( $highlight ); ?></li>
<?php endforeach; ?>
</ul>
</div>
<aside class="ethnic-mobile-game-cta__panel" aria-label="What happens next">
<div class="ethnic-mobile-game-cta__visual">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
<div class="ethnic-mobile-game-cta__panel-header">
<p class="ethnic-mobile-game-cta__panel-eyebrow">What Happens Next</p>
<h3 class="ethnic-mobile-game-cta__panel-title">Shape the right path for a mobile game prototype, live product, multiplayer expansion, or commercial launch build.</h3>
</div>
<ol class="ethnic-mobile-game-cta__steps">
<?php foreach ( (array) $data['ctaSteps'] as $index => $step ) : ?>
<li class="ethnic-mobile-game-cta__step">
<span class="ethnic-mobile-game-cta__step-number"><?php echo esc_html( sprintf( '%02d', $index + 1 ) ); ?></span>
<div class="ethnic-mobile-game-cta__step-copy">
<strong><?php echo esc_html( $step['title'] ); ?></strong>
<p><?php echo esc_html( $step['copy'] ); ?></p>
</div>
</li>
<?php endforeach; ?>
</ol>
<div class="ethnic-mobile-game-cta__panel-note"><strong>Focus:</strong> gameplay loops, platform fit, monetization planning, launch readiness, and long-term live game support.</div>
</aside>
</div>
</div>
</section>
</div>
<?php
return ob_get_clean();
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_styles' ) ) {
function ethnic_mobile_game_development_page_styles() {
$base_styles = '';
if ( function_exists( 'ethnic_game_development_page_styles' ) ) {
$base_styles = str_replace(
array(
'ethnic-game-development-target',
'ethnic-game',
),
array(
'ethnic-mobile-game-development-target',
'ethnic-mobile-game',
),
ethnic_game_development_page_styles()
);
} elseif ( function_exists( 'ethnic_devops_services_page_styles' ) ) {
$base_styles = str_replace(
array(
'ethnic-devops-development-target',
'ethnic-devops-services-target',
'ethnic-devops',
),
array(
'ethnic-mobile-game-development-target',
'ethnic-mobile-game-development-target',
'ethnic-mobile-game',
),
ethnic_devops_services_page_styles()
);
}
return $base_styles . <<<'CSS'
.ethnic-mobile-game-page {
--ethnic-mobile-game-accent: #4f7cff;
--ethnic-mobile-game-accent-dark: #2147c4;
--ethnic-mobile-game-cyan: #22d3ee;
--ethnic-mobile-game-lime: #93c5fd;
}
.ethnic-mobile-game-section--hero {
background:
radial-gradient(circle at 16% 18%, rgba(79, 124, 255, 0.24), transparent 24%),
radial-gradient(circle at 84% 18%, rgba(34, 211, 238, 0.16), transparent 20%),
linear-gradient(180deg, #081221, #13244a 56%, #162f5b);
}
.ethnic-mobile-game-hero__title {
max-width: 8ch;
}
.ethnic-mobile-game-hero__lead {
max-width: 60ch;
}
.ethnic-mobile-game-card__icon,
.ethnic-mobile-game-platform-card__icon,
.ethnic-mobile-game-dashboard,
.ethnic-mobile-game-faq__marker,
.ethnic-mobile-game-dashboard__journey-step span {
background-color: rgba(79, 124, 255, 0.08);
color: var(--ethnic-mobile-game-accent-dark);
}
.ethnic-mobile-game-visual__floating li::before,
.ethnic-mobile-game-checklist li::before,
.ethnic-mobile-game-cta__highlights li::before {
background: var(--ethnic-mobile-game-accent);
box-shadow: 0 0 0 5px rgba(79, 124, 255, 0.14);
}
.ethnic-mobile-game-cta::before {
background:
linear-gradient(90deg, rgba(79, 124, 255, 0.05) 1px, transparent 1px),
linear-gradient(0deg, rgba(79, 124, 255, 0.05) 1px, transparent 1px);
}
.ethnic-mobile-game-cta .ethnic-mobile-game-kicker--light,
.ethnic-mobile-game-heading__eyebrow {
border-color: rgba(79, 124, 255, 0.18);
color: var(--ethnic-mobile-game-accent-dark) !important;
-webkit-text-fill-color: var(--ethnic-mobile-game-accent-dark);
}
.ethnic-mobile-game-cta .ethnic-mobile-game-kicker--light {
color: #2147c4 !important;
-webkit-text-fill-color: #2147c4;
box-shadow: 0 14px 36px rgba(79, 124, 255, 0.14);
}
.ethnic-mobile-game-overview-board,
.ethnic-mobile-game-toolchain,
.ethnic-mobile-game-monetization-board,
.ethnic-mobile-game-liveops-board {
background:
radial-gradient(circle at top right, rgba(79, 124, 255, 0.08), transparent 26%),
radial-gradient(circle at bottom left, rgba(34, 211, 238, 0.06), transparent 24%),
linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(243, 247, 255, 0.98));
}
.ethnic-mobile-game-overview-board__lanes span,
.ethnic-mobile-game-chip-list span,
.ethnic-mobile-game-toolchain__eyebrow,
.ethnic-mobile-game-toolchain__badges span,
.ethnic-mobile-game-monetization-board__models span,
.ethnic-mobile-game-workflow-step__number {
background: rgba(79, 124, 255, 0.08);
border: 1px solid rgba(79, 124, 255, 0.12);
color: var(--ethnic-mobile-game-accent-dark);
}
.ethnic-mobile-game-overview-board__stat,
.ethnic-mobile-game-toolchain__stage,
.ethnic-mobile-game-liveops-board__widget,
.ethnic-mobile-game-liveops-board__roadmap div {
background: rgba(255, 255, 255, 0.84);
border: 1px solid rgba(79, 124, 255, 0.1);
}
.ethnic-mobile-game-overview-board__header strong,
.ethnic-mobile-game-toolchain__stage strong,
.ethnic-mobile-game-liveops-board__header strong,
.ethnic-mobile-game-liveops-board__widget strong {
color: var(--ethnic-mobile-game-text);
}
.ethnic-mobile-game-scene {
min-height: 610px;
}
.ethnic-mobile-game-scene__screen {
background: rgba(255, 255, 255, 0.96);
}
.ethnic-mobile-game-scene__world {
min-height: 340px;
background:
radial-gradient(circle at 28% 24%, rgba(34, 211, 238, 0.18), transparent 22%),
radial-gradient(circle at 78% 18%, rgba(79, 124, 255, 0.14), transparent 18%),
linear-gradient(180deg, #18295f 0%, #112149 52%, #0c1831 100%);
}
.ethnic-mobile-game-scene__terrain {
background:
linear-gradient(180deg, rgba(79, 124, 255, 0), rgba(79, 124, 255, 0.05)),
linear-gradient(135deg, #16745d 0%, #114d42 44%, #0b2f2b 100%);
}
.ethnic-mobile-game-scene__hud-pill {
background: rgba(79, 124, 255, 0.08);
border-color: rgba(79, 124, 255, 0.12);
color: var(--ethnic-mobile-game-accent-dark);
}
.ethnic-mobile-game-scene__store-card {
position: absolute;
right: 18px;
bottom: 18px;
display: grid;
gap: 10px;
padding: 18px;
max-width: 210px;
border-radius: 22px;
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.05)),
rgba(10, 18, 36, 0.66);
border: 1px solid rgba(255, 255, 255, 0.08);
backdrop-filter: blur(12px);
}
.ethnic-mobile-game-scene__store-card p,
.ethnic-mobile-game-liveops-board__header p,
.ethnic-mobile-game-liveops-board__widget small,
.ethnic-mobile-game-liveops-board__roadmap small {
margin: 0;
font-size: 11px;
font-weight: 800;
letter-spacing: 0.12em;
line-height: 1.3;
text-transform: uppercase;
}
.ethnic-mobile-game-scene__store-card p {
color: rgba(255, 255, 255, 0.74);
}
.ethnic-mobile-game-liveops-board__header p,
.ethnic-mobile-game-liveops-board__widget small,
.ethnic-mobile-game-liveops-board__roadmap small {
color: var(--ethnic-mobile-game-muted);
}
.ethnic-mobile-game-scene__store-card strong {
color: #ffffff;
font-family: "Plus Jakarta Sans", "Figtree", sans-serif;
font-size: 18px;
font-weight: 700;
line-height: 1.3;
}
.ethnic-mobile-game-scene__store-lines {
display: grid;
gap: 8px;
}
.ethnic-mobile-game-scene__store-lines span {
display: flex;
align-items: center;
min-height: 34px;
padding: 0 12px;
border-radius: 14px;
background: rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.08);
color: rgba(255, 255, 255, 0.82);
font-size: 13px;
font-weight: 600;
line-height: 1.45;
}
.ethnic-mobile-game-card-grid--modes {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.ethnic-mobile-game-card-grid--platform,
.ethnic-mobile-game-card-grid--monetization,
.ethnic-mobile-game-card-grid--liveops {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.ethnic-mobile-game-mode-card {
height: 100%;
}
.ethnic-mobile-game-mode-card__art {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.ethnic-mobile-game-mode-card__beam {
width: 64px;
height: 8px;
border-radius: 999px;
background: linear-gradient(90deg, rgba(79, 124, 255, 0.82), rgba(34, 211, 238, 0.72));
box-shadow: 0 0 0 8px rgba(79, 124, 255, 0.06);
}
.ethnic-mobile-game-mode-card__highlights {
display: grid;
gap: 10px;
padding: 0;
margin: 18px 0 0;
list-style: none;
}
.ethnic-mobile-game-mode-card__highlights li {
position: relative;
padding-left: 20px;
color: var(--ethnic-mobile-game-muted);
font-size: 14px;
line-height: 1.6;
}
.ethnic-mobile-game-mode-card__highlights li::before {
content: "";
position: absolute;
left: 0;
top: 0.55em;
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--ethnic-mobile-game-accent);
box-shadow: 0 0 0 5px rgba(79, 124, 255, 0.12);
}
.ethnic-mobile-game-toolchain__stages {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.ethnic-mobile-game-monetization-board__ring::before {
content: "Player value";
}
.ethnic-mobile-game-liveops {
display: grid;
grid-template-columns: minmax(340px, 0.92fr) minmax(0, 1fr);
gap: clamp(28px, 4vw, 44px);
align-items: start;
}
.ethnic-mobile-game-liveops__content {
display: grid;
gap: 24px;
}
.ethnic-mobile-game-liveops-board {
border-radius: 28px;
border: 1px solid var(--ethnic-mobile-game-border);
box-shadow: var(--ethnic-mobile-game-shadow);
padding: 24px;
}
.ethnic-mobile-game-liveops-board__header strong {
display: block;
margin-top: 10px;
font-size: 24px;
font-weight: 700;
line-height: 1.25;
letter-spacing: -0.04em;
font-family: "Plus Jakarta Sans", "Figtree", sans-serif;
}
.ethnic-mobile-game-liveops-board__widgets {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 14px;
margin-top: 20px;
}
.ethnic-mobile-game-liveops-board__widget {
display: grid;
gap: 8px;
padding: 18px;
border-radius: 20px;
}
.ethnic-mobile-game-liveops-board__widget strong {
font-size: 17px;
font-weight: 700;
line-height: 1.2;
}
.ethnic-mobile-game-liveops-board__roadmap {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 14px;
margin-top: 20px;
}
.ethnic-mobile-game-liveops-board__roadmap div {
display: grid;
gap: 8px;
padding: 18px;
border-radius: 22px;
}
.ethnic-mobile-game-liveops-board__roadmap span {
color: var(--ethnic-mobile-game-text);
font-family: "Plus Jakarta Sans", "Figtree", sans-serif;
font-size: 17px;
font-weight: 700;
line-height: 1.3;
}
@media (max-width: 1200px) {
.ethnic-mobile-game-card-grid--modes {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.ethnic-mobile-game-liveops {
grid-template-columns: 1fr;
}
}
@media (max-width: 1024px) {
.ethnic-mobile-game-card-grid--platform,
.ethnic-mobile-game-card-grid--monetization,
.ethnic-mobile-game-card-grid--liveops,
.ethnic-mobile-game-liveops-board__widgets,
.ethnic-mobile-game-toolchain__stages {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 767px) {
.ethnic-mobile-game-scene {
min-height: auto;
}
.ethnic-mobile-game-scene__store-card {
position: static;
max-width: none;
margin-top: 16px;
}
.ethnic-mobile-game-card-grid--modes,
.ethnic-mobile-game-card-grid--platform,
.ethnic-mobile-game-card-grid--monetization,
.ethnic-mobile-game-card-grid--liveops,
.ethnic-mobile-game-toolchain__stages,
.ethnic-mobile-game-liveops-board__widgets,
.ethnic-mobile-game-liveops-board__roadmap {
grid-template-columns: 1fr;
}
}
CSS;
}
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_body_class' ) ) {
function ethnic_mobile_game_development_page_body_class( $classes ) {
if ( ethnic_mobile_game_development_page_is_target() ) {
$classes[] = 'ethnic-mobile-game-development-target';
}
return $classes;
}
add_filter( 'body_class', 'ethnic_mobile_game_development_page_body_class' );
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_print_head_assets' ) ) {
function ethnic_mobile_game_development_page_print_head_assets() {
if ( ! ethnic_mobile_game_development_page_is_target() ) {
return;
}
$data = ethnic_mobile_game_development_page_data();
?>
<style id="ethnic-mobile-game-development-page-inline-css" type="text/css">
<?php echo ethnic_mobile_game_development_page_styles(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</style>
<meta name="description" content="<?php echo esc_attr( $data['metaDescription'] ); ?>" />
<?php
}
add_action( 'wp_head', 'ethnic_mobile_game_development_page_print_head_assets', 120 );
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_document_title' ) ) {
function ethnic_mobile_game_development_page_document_title( $title ) {
if ( ethnic_mobile_game_development_page_is_target() ) {
$data = ethnic_mobile_game_development_page_data();
return $data['metaTitle'];
}
return $title;
}
add_filter( 'pre_get_document_title', 'ethnic_mobile_game_development_page_document_title', 50 );
}
if ( ! function_exists( 'ethnic_mobile_game_development_page_replace_content' ) ) {
function ethnic_mobile_game_development_page_replace_content( $content ) {
if ( ! ethnic_mobile_game_development_page_is_target() || ! in_the_loop() || ! is_main_query() ) {
return $content;
}
static $rendered = false;
if ( $rendered ) {
return $content;
}
$rendered = true;
return ethnic_mobile_game_development_page_render();
}
add_filter( 'the_content', 'ethnic_mobile_game_development_page_replace_content', 1000 );
}