| | |
| | | <?php |
| | | add_filter('jvb_schema', function($schema) { |
| | | |
| | | add_filter('altr_OrganizationSchemaDefault', 'altr_organization_schema'); |
| | | function altr_organization_schema(array $schema):array { |
| | | return array_merge($schema, [ |
| | | 'organization' => [ |
| | | 'type' => 'LocalBusiness', |
| | | 'name' => 'Legacy Tattoo Removal', |
| | | 'url' => get_home_url(), |
| | | 'description' => 'The laser techs who love tattoos: Edmonton\'s removal experts working with tattoo artists.', |
| | | 'slogan' => 'See the Difference.', |
| | | 'logo' => get_theme_mod('custom_logo'), |
| | | 'foundingDate' => '2023-10-03', |
| | | 'id' => '#legacy-tattoo-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Organization\LocalBusiness\HealthAndBeautyBusiness', |
| | | 'name' => 'Legacy Tattoo Removal', |
| | | 'url' => get_home_url(), |
| | | 'description' => 'The laser techs who love tattoos: Edmonton\'s removal experts working with tattoo artists.', |
| | | 'slogan' => 'See the Difference.', |
| | | 'logo' => get_theme_mod('custom_logo'), |
| | | 'foundingDate' => '2023-10-03', |
| | | |
| | | 'founders' => [ |
| | | ['name' => 'Madi Rawson', 'url' => 'https://tattysoap.ca'], |
| | | ['name' => 'Heidi Freschauf'], |
| | | ['name' => 'Jake Vanderwerf', 'url' => 'https://jakevan.ca'], |
| | | 'founder' => [ |
| | | [ |
| | | 'id' => 'madi-rawson', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Person\Person', |
| | | 'name' => 'Madi Rawson', |
| | | 'url' => 'https://madimori.ca'], |
| | | [ |
| | | 'id'=> 'heidi-freschauf', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Person\Person', |
| | | 'name' => 'Heidi Freschauf'], |
| | | [ |
| | | 'id'=> 'jake-vanderwerf', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Person\Person','name' => 'Jake Vanderwerf', 'url' => 'https://jakevan.ca'], |
| | | ], |
| | | |
| | | 'sameAs' => [ |
| | | 'https://www.instagram.com/LegacyTattooRemoval', |
| | | 'https://www.facebook.com/LegacyTattooRemoval', |
| | | 'https://www.tiktok.com/@legacytattooremoval', |
| | | 'https://bsky.app/profile/legacytattooremoval.ca' |
| | | ], |
| | | |
| | | // Contact |
| | | 'telephone' => '+1-825-925-7398', |
| | | 'email' => 'info@legacytattooremoval.ca', |
| | | |
| | | // Address - note the key names |
| | | 'address' => [ |
| | | 'streetAddress' => '6551 111 St NW', |
| | | 'addressLocality' => 'Edmonton', |
| | | 'addressRegion' => 'AB', |
| | | 'postalCode' => 'T6H 4R5', |
| | | 'addressCountry' => 'CA', |
| | | ], |
| | | |
| | | // Geo - note the key names |
| | | 'geo' => [ |
| | | 'latitude' => '53.5035125', |
| | | 'longitude' => '-113.5188023', |
| | | ], |
| | | |
| | | // Business details |
| | | 'priceRange' => '$$', |
| | | 'paymentAccepted' => ['Cash', 'Credit Card', 'Debit Card', 'E-Transfer'], |
| | | 'currenciesAccepted' => ['CAD'], |
| | | 'areaServed' => [ |
| | | [ |
| | | 'id' => '#edmonton', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Edmonton', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Edmonton' |
| | | ], |
| | | [ |
| | | 'id' => '#stalbert', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'St. Albert', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/St._Albert,_Alberta' ], |
| | | [ |
| | | 'id' => '#sherwoodpark', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Sherwood Park', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Sherwood_Park' ], |
| | | [ |
| | | 'id' => '#leduc', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Leduc', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Leduc,_Alberta' ], |
| | | [ |
| | | 'id' => '#sprucegrove', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Spruce Grove', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Spruce_Grove' ], |
| | | [ |
| | | 'id' => '#calgary', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Calgary', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Calgary' ], |
| | | [ |
| | | 'id' => '#reddeer', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Red Deer', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Red_Deer,_Alberta' ], |
| | | [ |
| | | 'id' => '#strathconacounty', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Strathcona County', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Strathcona_County' ], |
| | | [ |
| | | 'id' => '#grandprairie', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Grande Prairie', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Grande_Prairie' ], |
| | | [ |
| | | 'id' => '#lloydminster', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Lloydminster', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Lloydminster' ], |
| | | [ |
| | | 'id' => '#fortsaskatchewan', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Fort Saskatchewan', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Fort_Saskatchewan' ], |
| | | [ |
| | | 'id' => '#camrose', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Camrose', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Camrose,_Alberta' ], |
| | | [ |
| | | 'id' => '#stonyplain', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Stony Plain', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Stony_Plain,_Alberta' ], |
| | | [ |
| | | 'id' => '#coldlake', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Cold Lake', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Cold_Lake,_Alberta' ], |
| | | [ |
| | | 'id' => '#draytonvalley', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Drayton Valley', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Drayton_Valley' ], |
| | | [ |
| | | 'id' => '#ponoka', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Ponoka', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Ponoka,_Alberta' ], |
| | | [ |
| | | 'id' => '#vegreville', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Vegreville', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Vegreville' ], |
| | | [ |
| | | 'id' => '#fortmcmurray', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Fort McMurray', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Fort_McMurray'], |
| | | [ |
| | | 'id' => '#lethbridge', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Lethbridge', |
| | | 'sameAs'=> 'https://en.wikipedia.org/wiki/Lethbridge' ], |
| | | [ |
| | | 'id' => '#airdrie', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Airdrie', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Airdrie,_Alberta'], |
| | | [ |
| | | 'id' => '#medicinehat', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Medicine Hat', |
| | | 'sameAs' =>'https://en.wikipedia.org/wiki/Medicine_Hat'], |
| | | [ |
| | | 'id' => '#cochrane', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Cochrane', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Cochrane,_Alberta' ], |
| | | [ |
| | | 'id' => '#okotoks', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Okotoks', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Okotoks'], |
| | | ], |
| | | |
| | | 'sameAs' => [ |
| | | ['url' => 'https://www.instagram.com/LegacyTattooRemoval'], |
| | | [ 'url' => 'https://www.facebook.com/LegacyTattooRemoval'], |
| | | [ 'url' => 'https://www.tiktok.com/@legacytattooremoval'], |
| | | [ 'url' => 'https://bsky.app/profile/legacytattooremoval.ca'] |
| | | ], |
| | | // Hours - note the key names |
| | | 'openingHoursSpecification' => [ |
| | | [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\StructuredValue\OpeningHoursSpecification', |
| | | 'dayOfWeek' => ['Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], |
| | | 'opens' => '10:00', |
| | | 'closes' => '18:00' |
| | | ] |
| | | |
| | | // Contact |
| | | 'telephone' => '+1-825-925-7398', |
| | | 'email' => 'info@legacytattooremoval.ca', |
| | | ], |
| | | |
| | | // Address - note the key names |
| | | 'address' => [ |
| | | 'street' => '10612 124 Street NW', // was 'street_address' |
| | | 'city' => 'Edmonton', // was 'locality' |
| | | 'province' => 'AB', // was 'region' |
| | | 'postal_code' => 'T5N 1S2', |
| | | 'country' => 'CA', |
| | | ], |
| | | |
| | | // Geo - note the key names |
| | | 'geo' => [ |
| | | 'lat' => '53.5461', // was 'latitude' |
| | | 'lng' => '-113.5218', // was 'longitude' |
| | | ], |
| | | |
| | | // Business details |
| | | 'priceRange' => '$$', |
| | | 'paymentAccepted' => ['Cash', 'Credit Card', 'Debit Card', 'E-Transfer'], |
| | | 'currenciesAccepted' => ['CAD'], |
| | | 'areaServed' => [ |
| | | ['name' => 'Edmonton'], |
| | | ['name' => 'St. Albert'], |
| | | ['name' => 'Sherwood Park'], |
| | | ['name' => 'Leduc'], |
| | | ['name' => 'Spruce Grove'], |
| | | ], |
| | | |
| | | // Hours - note the key names |
| | | 'openingHours' => [ |
| | | 'wednesday' => ['opens' => '10:00', 'closes' => '18:00'], |
| | | 'thursday' => ['opens' => '10:00', 'closes' => '18:00'], |
| | | 'friday' => ['opens' => '10:00', 'closes' => '18:00'], |
| | | 'saturday' => ['opens' => '10:00', 'closes' => '18:00'], |
| | | 'sunday' => ['opens' => '10:00', 'closes' => '18:00'], |
| | | ], |
| | | |
| | | // Services as offer catalog |
| | | 'hasOfferCatalog' => [ |
| | | 'source' => 'manual', |
| | | 'manual_items' => [ |
| | | [ |
| | | 'type' => 'Service', |
| | | // Services as offer catalog |
| | | 'hasOfferCatalog' => [ |
| | | 'name' => 'Our Services', |
| | | 'items' => [ |
| | | [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\AggregateOffer', |
| | | 'id' => '#fading-for-cover-up-tattoo', |
| | | 'lowPrice' => '150', |
| | | 'highPrice' => '400', |
| | | 'priceCurrency' => 'CAD', |
| | | 'priceSpecification' => [ |
| | | 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | 'minPrice' => '150', |
| | | 'maxPrice' => '400', |
| | | 'priceCurrency' => 'CAD', |
| | | 'unitText' => 'treatment' |
| | | ], |
| | | 'itemOffered' => [ |
| | | 'id' => 'service-fading-for-cover-up-tattoo', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Tattoo Fading for Cover Up Tattoos', |
| | | 'description' => 'Precise laser fading to prepare your skin for a new tattoo. We work directly with your tattoo artist to target exactly what\'s in the way.', |
| | | 'price' => '$150-$400/treatment' |
| | | ] |
| | | ], |
| | | [ |
| | | 'id' => '#complete-tattoo-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\AggregateOffer', |
| | | 'lowPrice' => '150', |
| | | 'highPrice' => '400', |
| | | 'priceCurrency' => 'CAD', |
| | | 'priceSpecification' => [ |
| | | 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | 'minPrice' => '150', |
| | | 'maxPrice' => '400', |
| | | 'priceCurrency' => 'CAD', |
| | | 'unitText' => 'treatment' |
| | | ], |
| | | [ |
| | | 'type' => 'Service', |
| | | 'itemOffered' => [ |
| | | 'id' => 'service-complete-tattoo-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Complete Tattoo Removal', |
| | | 'description' => 'Full removal of unwanted tattoos using PicoWay laser technology. Safe for all skin types with minimal scarring.', |
| | | 'price' => '$150-$400/treatment' |
| | | ], |
| | | [ |
| | | 'type' => 'Service', |
| | | ], |
| | | [ |
| | | 'id' => 'permanent-makeup-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | 'priceSpecification' => [ |
| | | 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | 'unitText' => 'treatment' |
| | | ], |
| | | 'itemOffered' => [ |
| | | 'id' => 'service-permanent-makeup-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Permanent Makeup Removal', |
| | | 'description' => 'Specialized removal of cosmetic ink including microbladed brows, freckles, and scalp micropigmentation (SMP).', |
| | | 'price' => '$200' |
| | | ], |
| | | [ |
| | | 'type' => 'Service', |
| | | ], |
| | | [ |
| | | 'id' => 'scalp-smp-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\AggregateOffer', |
| | | 'lowPrice' => '200', |
| | | 'highPrice' => '400', |
| | | 'priceCurrency' => 'CAD', |
| | | 'priceSpecification' => [ |
| | | 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | 'minPrice' => '200', |
| | | 'maxPrice' => '400', |
| | | 'priceCurrency' => 'CAD', |
| | | 'unitText' => 'treatment' |
| | | ], |
| | | 'itemOffered' => [ |
| | | 'id' => 'service-scalp-smp-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Scalp Micro Pigmentation Removal', |
| | | 'description' => 'Specialized removal of scalp micro pigmentation (SMP).', |
| | | 'price' => '$200 - $400/treatment' |
| | | ], |
| | | [ |
| | | 'type' => 'Service', |
| | | ], |
| | | [ |
| | | 'id' => 'pro-bono-laser-tattoo-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | 'price' => 'free', |
| | | 'itemOffered' => [ |
| | | 'id' => 'service-pro-bono-laser-tattoo-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Pro Bono Removal Services', |
| | | 'description' => 'Free and sliding-scale tattoo removal for gang-related, hate symbols, domestic violence, and human trafficking tattoos.', |
| | | ], |
| | | ] |
| | | ], |
| | | |
| | | // Rating - note the structure |
| | | 'aggregateRating' => [ |
| | | 'value' => 5, |
| | | 'count' => 103, |
| | | 'best' => 5, |
| | | 'worst' => 1, |
| | | ], |
| | | ], |
| | | ] |
| | | ], |
| | | |
| | | // Website settings (optional overrides) |
| | | 'website' => [ |
| | | 'aggregateRating' => [ |
| | | 'ratingValue' => 5, |
| | | 'reviewCount' => 109, |
| | | 'bestRating' => 5, |
| | | 'worstRating' => 1, |
| | | ], |
| | | ]); |
| | | } |
| | | |
| | | add_filter('altr_WebsiteSchemaDefault', 'altr_website_schema'); |
| | | function altr_website_schema(array $schema):array |
| | | { |
| | | return array_merge( |
| | | $schema, |
| | | [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\CreativeWork\WebSite', |
| | | 'name' => 'Legacy Tattoo Removal', |
| | | 'description' => 'Edmonton\'s premier laser tattoo removal clinic', |
| | | 'description' => 'The laser techs who love tattoos: Edmonton\'s removal experts working with tattoo artists.', |
| | | 'inLanguage' => 'en-CA', |
| | | 'potentialAction' => [ |
| | | [ |
| | | 'name' => 'Search', |
| | | 'type' => 'searchAction', |
| | | 'target' => '/?s={query}', |
| | | ], |
| | | [ |
| | | 'type' => 'scheduleAction', |
| | | 'type' => 'JVBase\inc\managers\SEO\render\Thing\Action\ScheduleAction', |
| | | 'id' => 'free-consult', |
| | | 'name' => 'Book a Free Consultation', |
| | | 'target' => '/book-consult/', |
| | | 'target' => '/free-consult/', |
| | | 'description' => 'Schedule your free consultation today', |
| | | ], |
| | | [ |
| | | 'type' => 'communicateAction', |
| | | 'id' => 'get-an-estimate', |
| | | 'type' => 'JVBase\inc\managers\SEO\render\Thing\Action\CommunicateAction', |
| | | 'name' => 'Get an Estimate', |
| | | 'target' => '/get-an-estimate/', |
| | | 'description' => 'Get a rough estimate before you book.', |
| | | ], |
| | | [ |
| | | 'id' => 'contact', |
| | | 'type' => 'JVBase\inc\managers\SEO\render\Thing\Action\CommunicateAction', |
| | | 'name' => 'Contact Us', |
| | | 'target' => '/contact/', |
| | | 'description' => 'Get in touch with our team', |
| | | ], |
| | | ], |
| | | ], |
| | | ]); |
| | | }); |
| | | ); |
| | | } |
| | | |
| | | |