<?php
|
|
/**
|
* Edmonton.ink Configuration
|
*
|
* Add this to your edmonton.ink child theme/plugin
|
* This replaces all the hardcoded logic in SchemaManager and SEO`MetaManager`
|
*/
|
|
// ==================================================
|
// SITE-WIDE SCHEMA CONFIGURATION
|
// ==================================================
|
|
use JVBase\meta\Meta;
|
|
add_filter('jvb_schema', function ($schema) {
|
return array_merge($schema, [
|
'site_type' => 'directory',
|
'organization' => [
|
'type' => 'Organization',
|
'name' => 'edmonton.ink',
|
'url' => 'https://edmonton.ink',
|
'description' => 'Your tattoo scene on your screen. Discover Edmonton\'s best tattoo artists, shops, and styles.',
|
'publisher' => [
|
'type' => 'Organization',
|
'name' => 'Legacy Tattoo Removal',
|
'url' => 'https://legacytattooremoval.ca',
|
'logo' => 'https://legacytattooremoval.ca/wp-content/uploads/2024/09/legacy-tattoo-removal.webp',
|
'same_as' => [
|
'https://www.instagram.com/legacytattooremoval',
|
'https://www.facebook.com/legacytattooremoval',
|
]
|
]
|
],
|
'attribution' => [
|
'enabled' => true,
|
]
|
]);
|
});
|
|
// ==================================================
|
// CONTENT TYPES CONFIGURATION
|
// ==================================================
|
|
//add_filter('the_content', function ($content) {
|
//
|
// // ARTIST
|
// $content['artist'] = array_merge($content['artist'] ?? [], [
|
// 'seo' => [
|
// 'title_template' => '{{name}} | {{primary_style}} Tattoo Artist in {{city}}',
|
// 'description_template' => '{{name}} is a {{primary_style}} tattoo artist {{location_text}}. {{bio}} Browse portfolio and book appointments.',
|
// 'variables' => [
|
// 'name' => 'post_title',
|
// 'primary_style' => ['taxonomy' => BASE . 'style', 'primary' => true],
|
// 'styles' => ['taxonomy' => BASE . 'style'],
|
// 'city' => ['taxonomy' => BASE . 'city', 'primary' => true],
|
// 'primary_shop' => ['taxonomy' => BASE . 'shop', 'primary' => true],
|
// 'bio' => ['meta' => 'bio', 'truncate' => 100],
|
// 'location_text' => ['callback' => function ($post_id, $context) {
|
// $city_terms = get_the_terms($post_id, BASE . 'city');
|
// $shop_terms = get_the_terms($post_id, BASE . 'shop');
|
//
|
// if ($shop_terms && !is_wp_error($shop_terms)) {
|
// $shop = $shop_terms[0];
|
// return "working at {$shop->name}";
|
// } elseif ($city_terms && !is_wp_error($city_terms)) {
|
// $city = $city_terms[0];
|
// return "in {$city->name}";
|
// }
|
// return "in Edmonton";
|
// }],
|
// ],
|
// 'archive_title' => 'Edmonton\'s Best Tattoo Artists | Browse by Style & Shop',
|
// 'archive_description' => 'Explore Edmonton\'s top tattoo artists. Filter by style, shop, or location. View portfolios and book your next tattoo today.'
|
// ],
|
//
|
// 'schema' => [
|
// 'type' => 'Person',
|
// 'additional_types' => ['Artist'],
|
// 'properties' => [
|
// 'jobTitle' => ['callback' => function ($id, $context, $meta) {
|
// $job = $meta['job_title'] ?? null;
|
// if ($job) return $job;
|
//
|
// // Try to build from specialties
|
// $styles = get_the_terms($id, BASE . 'style');
|
// if ($styles && !is_wp_error($styles) && count($styles) > 0) {
|
// $primary = $styles[0]->name;
|
// return "{$primary} Tattoo Artist";
|
// }
|
// return "Tattoo Artist";
|
// }],
|
// 'telephone' => 'phone',
|
// 'email' => 'email',
|
// 'url' => ['callback' => function ($id) {
|
// return get_permalink($id);
|
// }],
|
// 'image' => ['callback' => function ($id) {
|
// return get_the_post_thumbnail_url($id, 'full');
|
// }],
|
// 'knowsAbout' => ['taxonomy' => BASE . 'style'],
|
// 'worksFor' => ['callback' => function ($id, $context, $meta) {
|
// $shops = get_the_terms($id, BASE . 'shop');
|
// if (!$shops || is_wp_error($shops)) {
|
// return null;
|
// }
|
//
|
// return array_map(function ($shop) {
|
// return [
|
// '@type' => 'LocalBusiness',
|
// '@id' => get_term_link($shop) . '#business',
|
// 'name' => $shop->name,
|
// 'url' => get_term_link($shop)
|
// ];
|
// }, $shops);
|
// }],
|
// 'memberOf' => [
|
// '@id' => 'https://edmonton.ink/#organization'
|
// ],
|
// ]
|
// ]
|
// ]);
|
//
|
// // PARTNER (Shops/Organizations)
|
// $content['partner'] = array_merge($content['partner'] ?? [], [
|
// 'seo' => [
|
// 'title_template' => '{{name}} | Community Partner',
|
// 'description_template' => '{{name}} - {{excerpt}}',
|
// 'variables' => [
|
// 'name' => 'post_title',
|
// 'excerpt' => ['callback' => function ($id) {
|
// return get_the_excerpt($id);
|
// }],
|
// ],
|
// 'archive_title' => 'Our Community Partners | Supporting Edmonton\'s Tattoo Scene',
|
// 'archive_description' => 'Meet the businesses and organizations supporting Edmonton\'s tattoo community. Our partners help make edmonton.ink possible.'
|
// ],
|
//
|
// 'schema' => [
|
// 'type' => 'Organization',
|
// 'properties' => [
|
// 'name' => ['callback' => function ($id) {
|
// return get_the_title($id);
|
// }],
|
// 'description' => ['callback' => function ($id) {
|
// return get_the_excerpt($id);
|
// }],
|
// 'url' => ['callback' => function ($id, $context, $meta) {
|
// $website = $meta['website'] ?? null;
|
// return $website ?: get_permalink($id);
|
// }],
|
// 'logo' => ['callback' => function ($id, $context, $meta) {
|
// $image_id = $meta['image'] ?? null;
|
// if ($image_id) {
|
// return wp_get_attachment_image_url($image_id, 'full');
|
// }
|
// return get_the_post_thumbnail_url($id, 'full');
|
// }],
|
// 'telephone' => 'phone',
|
// 'email' => 'email',
|
// 'address' => 'address',
|
// 'sameAs' => ['callback' => function ($id, $context, $meta) {
|
// $links = [];
|
// if (!empty($meta['instagram'])) $links[] = $meta['instagram'];
|
// if (!empty($meta['facebook'])) $links[] = $meta['facebook'];
|
// if (!empty($meta['twitter'])) $links[] = $meta['twitter'];
|
// return !empty($links) ? $links : null;
|
// }],
|
// 'memberOf' => [
|
// '@id' => 'https://edmonton.ink/#organization'
|
// ],
|
// ]
|
// ]
|
// ]);
|
//
|
// // TATTOO
|
// $content['tattoo'] = array_merge($content['tattoo'] ?? [], [
|
// 'seo' => [
|
// 'title_template' => '{{style}} Tattoo by {{artist}} | Edmonton',
|
// 'description_template' => 'Beautiful {{style}} tattoo by {{artist}}{{location}}. View more work from Edmonton\'s talented artists.',
|
// 'variables' => [
|
// 'style' => ['taxonomy' => BASE . 'style', 'primary' => true],
|
// 'artist' => ['callback' => function ($id) {
|
// $artist_id = get_post_meta($id, BASE . 'link', true);
|
// if ($artist_id) {
|
// return get_the_title($artist_id);
|
// }
|
// return 'Edmonton Artist';
|
// }],
|
// 'location' => ['callback' => function ($id) {
|
// $artist_id = get_post_meta($id, BASE . 'link', true);
|
// if (!$artist_id) return '';
|
//
|
// $shops = get_the_terms($artist_id, BASE . 'shop');
|
// if ($shops && !is_wp_error($shops)) {
|
// return ' at ' . $shops[0]->name;
|
// }
|
// return '';
|
// }],
|
// ],
|
// 'archive_title' => 'Edmonton Tattoos | Browse by Style, Artist & Shop',
|
// 'archive_description' => 'Browse tattoos from Edmonton\'s best artists. Filter by style, theme, or artist to find inspiration for your next piece.'
|
// ],
|
//
|
// 'schema' => [
|
// 'type' => 'CreativeWork',
|
// 'additional_types' => ['VisualArtwork'],
|
// 'properties' => [
|
// 'creator' => ['callback' => function ($id) {
|
// $artist_id = get_post_meta($id, BASE . 'link', true);
|
// if ($artist_id) {
|
// return [
|
// '@type' => 'Person',
|
// '@id' => get_permalink($artist_id) . '#person',
|
// 'name' => get_the_title($artist_id),
|
// 'url' => get_permalink($artist_id)
|
// ];
|
// }
|
// return null;
|
// }],
|
// 'image' => ['callback' => function ($id) {
|
// return get_the_post_thumbnail_url($id, 'full');
|
// }],
|
// 'about' => ['taxonomy' => BASE . 'theme'],
|
// 'artform' => 'Tattoo',
|
// ]
|
// ]
|
// ]);
|
//
|
// // PIERCING
|
// $content['piercing'] = array_merge($content['piercing'] ?? [], [
|
// 'seo' => [
|
// 'title_template' => '{{type}} Piercing by {{artist}} | Edmonton',
|
// 'description_template' => 'Professional {{type}} piercing by {{artist}}. View more piercing work from Edmonton\'s skilled professionals.',
|
// 'variables' => [
|
// 'type' => ['taxonomy' => BASE . 'pstyle', 'primary' => true],
|
// 'artist' => ['callback' => function ($id) {
|
// $artist_id = get_post_meta($id, BASE . 'link', true);
|
// return $artist_id ? get_the_title($artist_id) : 'Edmonton Professional';
|
// }],
|
// ]
|
// ],
|
//
|
// 'schema' => [
|
// 'type' => 'CreativeWork',
|
// 'properties' => [
|
// 'creator' => ['callback' => function ($id) {
|
// $artist_id = get_post_meta($id, BASE . 'link', true);
|
// if ($artist_id) {
|
// return [
|
// '@type' => 'Person',
|
// '@id' => get_permalink($artist_id) . '#person',
|
// 'name' => get_the_title($artist_id),
|
// 'url' => get_permalink($artist_id)
|
// ];
|
// }
|
// return null;
|
// }],
|
// 'image' => ['callback' => function ($id) {
|
// return get_the_post_thumbnail_url($id, 'full');
|
// }],
|
// ]
|
// ]
|
// ]);
|
//
|
// // EVENT
|
// $content['event'] = array_merge($content['event'] ?? [], [
|
// 'seo' => [
|
// 'title_builder' => function ($post_id, $meta) {
|
// $title = get_the_title($post_id);
|
// $date = $meta->getValue('event_date');
|
// if ($date) {
|
// $formatted_date = date('F j, Y', strtotime($date));
|
// return "{$title} | {$formatted_date}";
|
// }
|
// return "{$title} | Edmonton Tattoo Event";
|
// },
|
// 'description_builder' => function ($post_id, $meta) {
|
// $excerpt = get_the_excerpt($post_id);
|
// $venue = $meta->getValue('venue');
|
// $date = $meta->getValue('event_date');
|
//
|
// $desc = $excerpt;
|
// if ($venue) $desc .= " Location: {$venue}.";
|
// if ($date) {
|
// $formatted = date('F j, Y', strtotime($date));
|
// $desc .= " Date: {$formatted}.";
|
// }
|
// return $desc;
|
// }
|
// ],
|
//
|
// 'schema' => [
|
// 'custom_builder' => function ($post_id) {
|
// $meta = Meta::forPost($post_id);
|
//
|
// $schema = [
|
// '@type' => 'Event',
|
// 'name' => get_the_title($post_id),
|
// 'url' => get_permalink($post_id),
|
// ];
|
//
|
// $date = $meta->get('event_date');
|
// if ($date) {
|
// $schema['startDate'] = date('c', strtotime($date));
|
// }
|
//
|
// $venue = $meta->get('venue');
|
// $venue_address = $meta->get('venue_address');
|
// if ($venue) {
|
// $schema['location'] = [
|
// '@type' => 'Place',
|
// 'name' => $venue,
|
// ];
|
// if ($venue_address) {
|
// $schema['location']['address'] = $venue_address;
|
// }
|
// }
|
//
|
// $image_id = get_post_thumbnail_id($post_id);
|
// if ($image_id) {
|
// $schema['image'] = wp_get_attachment_image_url($image_id, 'full');
|
// }
|
//
|
// return $schema;
|
// }
|
// ]
|
// ]);
|
//
|
// return $content;
|
//});
|
|
// ==================================================
|
// TAXONOMY CONFIGURATION
|
// ==================================================
|
|
//add_filter('jvb_taxonomy', function ($taxonomies) {
|
//
|
// // SHOP
|
// $taxonomies['shop'] = array_merge($taxonomies['shop'] ?? [], [
|
// 'seo' => [
|
// 'title_template' => '{{name}} | Tattoo Shop in {{city}}',
|
// 'description_template' => '{{name}}{{tagline_text}}{{established_text}} in {{city}}. Featuring {{artist_count}} talented artists. Book your appointment today.',
|
// 'variables' => [
|
// 'name' => 'term_name',
|
// 'city' => ['callback' => function ($term_id, $context) {
|
// $meta = Meta::forTerm($term_id);
|
// $city_id = $meta->get('city');
|
// if ($city_id && term_exists((int)$city_id, BASE . 'city')) {
|
// $city_term = get_term($city_id, BASE . 'city');
|
// if ($city_term && !is_wp_error($city_term)) {
|
// return $city_term->name;
|
// }
|
// }
|
// return 'Edmonton';
|
// }],
|
// 'tagline_text' => ['callback' => function ($term_id) {
|
// $meta = Meta::forTerm($term_id);
|
// $tagline = $meta->get('tagline');
|
// return $tagline ? " - {$tagline}" : '';
|
// }],
|
// 'established_text' => ['callback' => function ($term_id) {
|
// $meta = Meta::forTerm($term_id);
|
// $established = $meta->get('established');
|
// return $established ? " Established in {$established}" : '';
|
// }],
|
// 'artist_count' => ['callback' => function ($term_id) {
|
// $artists = get_posts([
|
// 'post_type' => BASE . 'artist',
|
// 'tax_query' => [[
|
// 'taxonomy' => BASE . 'shop',
|
// 'terms' => $term_id
|
// ]],
|
// 'posts_per_page' => -1,
|
// 'fields' => 'ids'
|
// ]);
|
// return count($artists);
|
// }],
|
// ]
|
// ],
|
//
|
// 'schema' => [
|
// 'type' => 'LocalBusiness',
|
// 'additional_types' => ['TattooParlor'],
|
// 'properties' => [
|
// 'address' => 'address',
|
// 'telephone' => 'phone',
|
// 'email' => 'email',
|
// 'openingHours' => 'hours',
|
// 'priceRange' => 'price_range',
|
// 'image' => 'logo',
|
// 'url' => ['callback' => function ($term_id) {
|
// $meta = Meta::forTerm($term_id);
|
// $website = $meta->get('website');
|
// return $website ?: get_term_link($term_id);
|
// }],
|
// 'sameAs' => ['callback' => function ($term_id) {
|
// $meta = Meta::forTerm($term_id);
|
// $links = [];
|
// if ($ig = $meta->get('instagram')) $links[] = $ig;
|
// if ($fb = $meta->get('facebook')) $links[] = $fb;
|
// return !empty($links) ? $links : null;
|
// }],
|
// 'memberOf' => [
|
// '@id' => 'https://edmonton.ink/#organization'
|
// ],
|
// ]
|
// ]
|
// ]);
|
//
|
// // STYLE
|
// $taxonomies['style'] = array_merge($taxonomies['style'] ?? [], [
|
// 'seo' => [
|
// 'title_template' => 'Edmonton {{name}} Tattoo Artists | Specialists in {{name}}',
|
// 'description_template' => '{{name}}{{alt_names}} is a distinctive tattoo style. {{characteristics}} Find Edmonton artists specializing in {{name}} tattoos.',
|
// 'variables' => [
|
// 'name' => 'term_name',
|
// 'alt_names' => ['callback' => function ($term_id) {
|
// $meta = Meta::forTerm($term_id);
|
// $alts = $meta->get('alternate_name');
|
// if (!empty($alts) && is_array($alts)) {
|
// $names = array_filter(array_column($alts, 'name'));
|
// if (!empty($names)) {
|
// return ' (also known as ' . implode(', ', array_slice($names, 0, 2)) . ')';
|
// }
|
// }
|
// return '';
|
// }],
|
// 'characteristics' => ['meta' => 'characteristics', 'truncate' => 100],
|
// ]
|
// ],
|
//
|
// 'schema' => [
|
// 'type' => 'CreativeWork',
|
// 'properties' => [
|
// 'name' => ['callback' => function ($term_id) {
|
// return get_term($term_id)->name . ' Tattoo Style';
|
// }],
|
// 'description' => 'characteristics',
|
// 'about' => ['meta' => 'description'],
|
// 'alternateName' => ['callback' => function ($term_id) {
|
// $meta = Meta::forTerm($term_id);
|
// $alts = $meta->get('alternate_name');
|
// if (!empty($alts) && is_array($alts)) {
|
// return array_filter(array_column($alts, 'name'));
|
// }
|
// return null;
|
// }],
|
// ]
|
// ]
|
// ]);
|
//
|
// // THEME
|
// $taxonomies['theme'] = array_merge($taxonomies['theme'] ?? [], [
|
// 'seo' => [
|
// 'title_template' => 'Edmonton {{name}} Tattoos | Find {{name}} Tattoo Designs',
|
// 'description_template' => 'Explore {{name}} tattoos, a popular motif in Edmonton\'s tattoo scene. {{similar}}Find artists specializing in {{name}} designs.',
|
// 'variables' => [
|
// 'name' => 'term_name',
|
// 'similar' => ['callback' => function ($term_id) {
|
// $meta = Meta::forTerm($term_id);
|
// $similar = $meta->get('similar');
|
// if (!empty($similar)) {
|
// $similar_names = [];
|
// foreach ((array)$similar as $similar_id) {
|
// $term = get_term($similar_id, BASE . 'theme');
|
// if ($term && !is_wp_error($term)) {
|
// $similar_names[] = html_entity_decode($term->name);
|
// }
|
// }
|
// if (!empty($similar_names)) {
|
// return 'Similar themes include ' . implode(', ', array_slice($similar_names, 0, 2)) . '. ';
|
// }
|
// }
|
// return '';
|
// }],
|
// ]
|
// ],
|
//
|
// 'schema' => [
|
// 'type' => 'CreativeWork',
|
// 'properties' => [
|
// 'name' => ['callback' => function ($term_id) {
|
// return get_term($term_id)->name . ' Tattoo Theme';
|
// }],
|
// 'description' => ['meta' => 'description'],
|
// ]
|
// ]
|
// ]);
|
//
|
// // CITY
|
// $taxonomies['city'] = array_merge($taxonomies['city'] ?? [], [
|
// 'seo' => [
|
// 'title_template' => '{{name}} Tattoo Artists & Shops | edmonton.ink',
|
// 'description_template' => 'Discover {{name}}\'s vibrant tattoo scene featuring {{shop_count}} local shops and {{artist_count}} talented artists. Find top local talent and book your next tattoo today.',
|
// 'variables' => [
|
// 'name' => 'term_name',
|
// 'shop_count' => ['callback' => function ($term_id) {
|
// $shops = get_terms([
|
// 'taxonomy' => BASE . 'shop',
|
// 'meta_key' => BASE . 'city',
|
// 'meta_value' => $term_id,
|
// 'fields' => 'count'
|
// ]);
|
// return is_wp_error($shops) ? 0 : $shops;
|
// }],
|
// 'artist_count' => ['callback' => function ($term_id) {
|
// $artists = get_posts([
|
// 'post_type' => BASE . 'artist',
|
// 'tax_query' => [[
|
// 'taxonomy' => BASE . 'city',
|
// 'terms' => $term_id
|
// ]],
|
// 'posts_per_page' => -1,
|
// 'fields' => 'ids'
|
// ]);
|
// return count($artists);
|
// }],
|
// ]
|
// ],
|
//
|
// 'schema' => [
|
// 'type' => 'Place',
|
// 'properties' => [
|
// 'address' => ['callback' => function ($term_id) {
|
// $term = get_term($term_id);
|
// return [
|
// '@type' => 'PostalAddress',
|
// 'addressLocality' => html_entity_decode($term->name),
|
// 'addressRegion' => 'Alberta',
|
// 'addressCountry' => 'CA'
|
// ];
|
// }],
|
// ]
|
// ]
|
// ]);
|
//
|
// return $taxonomies;
|
//});
|