| | |
| | | <?php |
| | | // /content/art.php |
| | | use JVBase\meta\Meta; |
| | | use JVBase\registrar\Registrar; |
| | | use JVBase\utility\Image; |
| | | |
| | | function ajv_art():array |
| | | { |
| | | return [ |
| | | 'singular' => 'Art', |
| | | 'plural' => 'Art', |
| | | 'dash_title' => 'Art', |
| | | 'dash_description' => 'Manage your art posts', |
| | | 'directory' => 'Art', |
| | | 'breadcrumb' => 'Art', |
| | | 'addCrumb' => 'form', |
| | | 'hide_single' => false, |
| | | 'show_feed' => true, |
| | | 'show_directory'=> true, |
| | | 'favouritable' => true, |
| | | 'karma' => false, |
| | | 'icon' => 'palette', |
| | | 'seo' => [ |
| | | 'schema' => [ |
| | | 'type' => 'VisualArtwork', |
| | | 'name' => '{{post_title}}', |
| | | 'description' => '{{post_excerpt}}', |
| | | 'about' => ['@id' => '{{site_url}}/#art'], |
| | | 'associatedMedia' => '{{post_thumbnail}}', |
| | | 'dateCreated' => '{{post_date}}', |
| | | // artform, artMedium, creator, keywords auto-enriched by VisualArtworkResolver |
| | | ], |
| | | 'meta' => [ |
| | | 'title' => '{{post_title}} — {{form.name}} Art | Handmade. Human.', |
| | | 'description' => '{{post_excerpt}}', |
| | | ], |
| | | 'archive' => [ |
| | | 'type' => 'CollectionPage', |
| | | 'name' => 'Canadian Art. Made in Edmonton, Alberta.', |
| | | 'description' => 'Handmade sculpture, jewelry, and more from Edmonton, Alberta.', |
| | | ], |
| | | ], |
| | | 'feed' => [ |
| | | 'single' => [ |
| | | 'pre_title' => 'Canadian Art. Made in Edmonton, Alberta.', |
| | | ], |
| | | 'archive' => [ |
| | | if (!defined('ABSPATH')) { |
| | | exit; |
| | | } |
| | | |
| | | |
| | | add_action('plugins_loaded', 'ajv_art',1); |
| | | //Add fields later so we can verify taxonomies/post types exist |
| | | add_action('plugins_loaded', 'ajv_art_fields', 2); |
| | | //add_action('init', 'ajv_art_extra_schema', 10); |
| | | |
| | | add_filter('ajv_ArtSchemaDefault', 'ajv_art_schema'); |
| | | add_filter('ajv_ArtMetaDefault', 'ajv_art_meta'); |
| | | add_filter('ajv_ArtArchiveDefault', 'ajv_art_archive'); |
| | | add_filter('ajv_ArtExtras', 'ajv_art_extras'); |
| | | |
| | | function ajv_art(){ |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $art = Registrar::forPost('art', 'Art', 'Art') |
| | | // ->setIcon('palette') |
| | | ->setIcon('palette') |
| | | ->make([ |
| | | 'rewrite' => [ |
| | | 'slug' => 'art', |
| | | 'with_front' => false, |
| | | ], |
| | | 'config' => [ |
| | | 'is_gallery' => false, |
| | | 'content' => 'art', |
| | | 'context' => 'art', |
| | | 'id' => [], |
| | | 'class' => [], |
| | | 'taxonomies' => [ |
| | | 'project', |
| | | 'form', |
| | | 'city', |
| | | 'media', |
| | | 'style', |
| | | 'theme' |
| | | ] |
| | | ], |
| | | 'rewrite' => [ |
| | | 'slug' => 'art', |
| | | 'with_front' => false, |
| | | ], |
| | | ]) |
| | | ->setAll([ |
| | | 'show_feed', |
| | | 'show_directory', |
| | | 'favouritable' |
| | | ]); |
| | | |
| | | 'fields' => [ |
| | | 'post_status' => [ |
| | | 'type' => 'radio', |
| | | 'label' => 'Status', |
| | | 'options' => [ |
| | | 'publish' => 'Show', |
| | | 'draft' => 'Hide', |
| | | 'trash' => 'Scrap', |
| | | 'delete' => 'Permanently Delete' |
| | | ], |
| | | 'hidden' => true, |
| | | //$directory = $art->getConfig('directory'); |
| | | } |
| | | |
| | | function ajv_art_fields():void |
| | | { |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $art = Registrar::getInstance('art'); |
| | | $breadcrumbs = $art->config('breadcrumbs'); |
| | | $breadcrumbs->setCrumb(['project', 'form']); |
| | | |
| | | $fields = $art->fields(); |
| | | $fields->addField('project', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'project', |
| | | 'label' => 'Project', |
| | | ]); |
| | | $fields->addField('form', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'form', |
| | | 'label' => 'Form', |
| | | ]); |
| | | $fields->addField('city', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'city', |
| | | 'label' => 'City', |
| | | ]); |
| | | $fields->addField('media', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'media', |
| | | 'label' => 'Media', |
| | | ]); |
| | | $fields->addField('style', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'style', |
| | | 'label' => 'Style', |
| | | ]); |
| | | $fields->addField('theme', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'theme', |
| | | 'label' => 'Theme', |
| | | ]); |
| | | $fields->addField('gallery', [ |
| | | 'type' => 'upload', |
| | | 'multiple' => true, |
| | | 'label' => 'Gallery', |
| | | ]); |
| | | $fields->addField('price', [ |
| | | 'type' => 'number', |
| | | 'label' => 'Price', |
| | | ]); |
| | | $fields->addField('needs', [ |
| | | 'type' => 'repeater', |
| | | 'label' => 'Needs', |
| | | 'fields' => [ |
| | | 'need' => [ |
| | | 'type' => 'text', |
| | | 'label' => 'Need', |
| | | 'required' => true |
| | | ], |
| | | 'post_title' => [ |
| | | 'type' => 'text', |
| | | 'label' => 'Title', |
| | | ], |
| | | 'post_date' => [ |
| | | 'type' => 'date', |
| | | 'label' => 'Date', |
| | | ], |
| | | 'city' => [ |
| | | 'type' => 'taxonomy', |
| | | 'taxonomy' => 'city', |
| | | 'autocomplete' => true, |
| | | 'label' => 'City', |
| | | ], |
| | | 'form' => [ |
| | | 'type' => 'taxonomy', |
| | | 'taxonomy' => 'form', |
| | | 'autocomplete' => true, |
| | | 'label' => 'Art Form', |
| | | ], |
| | | 'media' => [ |
| | | 'type' => 'taxonomy', |
| | | 'taxonomy' => 'media', |
| | | 'autocomplete' => true, |
| | | 'label' => 'Media', |
| | | ], |
| | | 'style' => [ |
| | | 'type' => 'taxonomy', |
| | | 'taxonomy' => 'style', |
| | | 'autocomplete' => true, |
| | | 'label' => 'Style', |
| | | ], |
| | | 'theme' => [ |
| | | 'type' => 'taxonomy', |
| | | 'taxonomy' => 'theme', |
| | | 'autocomplete' => true, |
| | | 'label' => 'Theme', |
| | | ], |
| | | 'project' => [ |
| | | 'type' => 'taxonomy', |
| | | 'taxonomy' => 'project', |
| | | 'autocomplete' => true, |
| | | 'label' => 'Project', |
| | | ], |
| | | 'post_thumbnail' => [ |
| | | 'image' => [ |
| | | 'type' => 'upload', |
| | | 'label' => 'Image', |
| | | 'multiple' => true, |
| | | 'label' => 'Example Image' |
| | | ], |
| | | 'gallery' => [ |
| | | 'type' => 'upload', |
| | | 'multiple'=> 'true', |
| | | 'label' => 'Gallery', |
| | | ], |
| | | 'price' => [ |
| | | 'type' => 'number', |
| | | 'label' => 'Price', |
| | | ], |
| | | 'post_excerpt' => [ |
| | | 'type' => 'textarea', |
| | | 'label' => 'Short Blurb', |
| | | ], |
| | | 'post_content' => [ |
| | | 'fulfilled' => [ |
| | | 'type' => 'textarea', |
| | | 'quill' => true, |
| | | 'label' => 'Notes' |
| | | 'label' => 'How I fulfilled it' |
| | | ] |
| | | ] |
| | | ]); |
| | | $fields->addField('wants', [ |
| | | 'type' => 'repeater', |
| | | 'label' => 'Wants', |
| | | 'fields' => [ |
| | | 'need' => [ |
| | | 'type' => 'text', |
| | | 'label' => 'Need', |
| | | 'required' => true |
| | | ], |
| | | 'needs' => [ |
| | | 'type' => 'repeater', |
| | | 'label' => 'Needs', |
| | | 'fields'=> [ |
| | | 'need' => [ |
| | | 'type' => 'text', |
| | | 'label' => 'Need', |
| | | 'required' => true |
| | | ], |
| | | 'fulfilled' => [ |
| | | 'type' => 'textarea', |
| | | 'quill' => true, |
| | | 'label' => 'How I fulfilled it' |
| | | ] |
| | | ] |
| | | 'image' => [ |
| | | 'type' => 'upload', |
| | | 'multiple' => true, |
| | | 'label' => 'Example Image' |
| | | ], |
| | | 'wants' => [ |
| | | 'type' => 'repeater', |
| | | 'label' => 'Wants', |
| | | 'fields'=> [ |
| | | 'need' => [ |
| | | 'type' => 'text', |
| | | 'label' => 'Want', |
| | | 'required' => true |
| | | ], |
| | | 'fulfilled' => [ |
| | | 'type' => 'textarea', |
| | | 'quill' => true, |
| | | 'label' => 'How I fulfilled it' |
| | | ] |
| | | ] |
| | | ], |
| | | 'fulfilled' => [ |
| | | 'type' => 'textarea', |
| | | 'quill' => true, |
| | | 'label' => 'How I fulfilled it' |
| | | ] |
| | | ] |
| | | ]); |
| | | } |
| | | |
| | | function ajv_art_extras(array $extras):array |
| | | { |
| | | return [[ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'id' => get_post_type_archive_link(BASE.'art').'#service', |
| | | 'name' => 'Art Created in Edmonton, Alberta', |
| | | 'description' => 'Handmade art by Canadian artist Jake Vanderwerf.', |
| | | 'url' => get_post_type_archive_link(BASE.'art'), |
| | | 'provider' => ['id' => get_home_url(null, '#localbusiness')], |
| | | 'areaServed' => [ |
| | | '@type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Country', |
| | | 'name' => 'Canada' |
| | | ], |
| | | 'single_image' => false, |
| | | 'upload_title' => 'Upload Artwork', |
| | | ]]; |
| | | |
| | | } |
| | | |
| | | |
| | | //function ajv_art():array |
| | | //{ |
| | | // return [ |
| | | // 'singular' => 'Art', |
| | | // 'plural' => 'Art', |
| | | // 'dash_title' => 'Art', |
| | | // 'dash_description' => 'Manage your art posts', |
| | | // 'directory' => 'Art', |
| | | // 'breadcrumb' => 'Art', |
| | | // 'addCrumb' => 'form', |
| | | // 'hide_single' => false, |
| | | // 'show_feed' => true, |
| | | // 'show_directory'=> true, |
| | | // 'favouritable' => true, |
| | | // 'karma' => false, |
| | | // 'icon' => 'palette', |
| | | // 'seo' => [ |
| | | // 'schema' => [ |
| | | // 'type' => 'VisualArtwork', |
| | | // 'name' => '{{post_title}}', |
| | | // 'description' => '{{post_excerpt}}', |
| | | // 'about' => ['@id' => '{{site_url}}/#art'], |
| | | // 'associatedMedia' => '{{post_thumbnail}}', |
| | | // 'dateCreated' => '{{post_date}}', |
| | | // // artform, artMedium, creator, keywords auto-enriched by VisualArtworkResolver |
| | | // ], |
| | | // 'meta' => [ |
| | | // 'title' => '{{post_title}} — {{form.name}} Art | Handmade. Human.', |
| | | // 'description' => '{{post_excerpt}}', |
| | | // ], |
| | | // 'archive' => [ |
| | | // 'type' => 'CollectionPage', |
| | | // 'name' => 'Canadian Art. Made in Edmonton, Alberta.', |
| | | // 'description' => 'Handmade sculpture, jewelry, and more from Edmonton, Alberta.', |
| | | // ], |
| | | // ], |
| | | // 'feed' => [ |
| | | // 'single' => [ |
| | | // 'pre_title' => 'Canadian Art. Made in Edmonton, Alberta.', |
| | | // ], |
| | | // 'archive' => [ |
| | | // |
| | | // ], |
| | | // 'config' => [ |
| | | // 'is_gallery' => false, |
| | | // 'content' => 'art', |
| | | // 'context' => 'art', |
| | | // 'id' => [], |
| | | // 'class' => [], |
| | | // ] |
| | | // ], |
| | | // 'rewrite' => [ |
| | | // 'slug' => 'art', |
| | | // 'with_front' => false, |
| | | // ], |
| | | // |
| | | // 'fields' => [ |
| | | // 'post_status' => [ |
| | | // 'type' => 'radio', |
| | | // 'label' => 'Status', |
| | | // 'options' => [ |
| | | // 'publish' => 'Show', |
| | | // 'draft' => 'Hide', |
| | | // 'trash' => 'Scrap', |
| | | // 'delete' => 'Permanently Delete' |
| | | // ], |
| | | // 'hidden' => true, |
| | | // ], |
| | | // 'post_title' => [ |
| | | // 'type' => 'text', |
| | | // 'label' => 'Title', |
| | | // ], |
| | | // 'post_date' => [ |
| | | // 'type' => 'date', |
| | | // 'label' => 'Date', |
| | | // ], |
| | | // 'city' => [ |
| | | // 'type' => 'taxonomy', |
| | | // 'taxonomy' => 'city', |
| | | // 'autocomplete' => true, |
| | | // 'label' => 'City', |
| | | // ], |
| | | // 'form' => [ |
| | | // 'type' => 'taxonomy', |
| | | // 'taxonomy' => 'form', |
| | | // 'autocomplete' => true, |
| | | // 'label' => 'Art Form', |
| | | // ], |
| | | // 'media' => [ |
| | | // 'type' => 'taxonomy', |
| | | // 'taxonomy' => 'media', |
| | | // 'autocomplete' => true, |
| | | // 'label' => 'Media', |
| | | // ], |
| | | // 'style' => [ |
| | | // 'type' => 'taxonomy', |
| | | // 'taxonomy' => 'style', |
| | | // 'autocomplete' => true, |
| | | // 'label' => 'Style', |
| | | // ], |
| | | // 'theme' => [ |
| | | // 'type' => 'taxonomy', |
| | | // 'taxonomy' => 'theme', |
| | | // 'autocomplete' => true, |
| | | // 'label' => 'Theme', |
| | | // ], |
| | | // 'project' => [ |
| | | // 'type' => 'taxonomy', |
| | | // 'taxonomy' => 'project', |
| | | // 'autocomplete' => true, |
| | | // 'label' => 'Project', |
| | | // ], |
| | | // 'post_thumbnail' => [ |
| | | // 'type' => 'upload', |
| | | // 'label' => 'Image', |
| | | // ], |
| | | // 'gallery' => [ |
| | | // 'type' => 'upload', |
| | | // 'multiple'=> true, |
| | | // 'label' => 'Gallery', |
| | | // ], |
| | | // 'price' => [ |
| | | // 'type' => 'number', |
| | | // 'label' => 'Price', |
| | | // ], |
| | | // 'post_excerpt' => [ |
| | | // 'type' => 'textarea', |
| | | // 'label' => 'Short Blurb', |
| | | // ], |
| | | // 'post_content' => [ |
| | | // 'type' => 'textarea', |
| | | // 'quill' => true, |
| | | // 'label' => 'Notes' |
| | | // ], |
| | | // 'needs' => [ |
| | | // 'type' => 'repeater', |
| | | // 'label' => 'Needs', |
| | | // 'fields'=> [ |
| | | // 'need' => [ |
| | | // 'type' => 'text', |
| | | // 'label' => 'Need', |
| | | // 'required' => true |
| | | // ], |
| | | // 'image' => [ |
| | | // 'type' => 'upload', |
| | | // 'multiple' => true, |
| | | // 'label' => 'Example Image' |
| | | // ], |
| | | // 'fulfilled' => [ |
| | | // 'type' => 'textarea', |
| | | // 'quill' => true, |
| | | // 'label' => 'How I fulfilled it' |
| | | // ] |
| | | // ] |
| | | // ], |
| | | // 'wants' => [ |
| | | // 'type' => 'repeater', |
| | | // 'label' => 'Wants', |
| | | // 'fields'=> [ |
| | | // 'need' => [ |
| | | // 'type' => 'text', |
| | | // 'label' => 'Want', |
| | | // 'required' => true |
| | | // ], |
| | | // 'image' => [ |
| | | // 'type' => 'upload', |
| | | // 'multiple' => true, |
| | | // 'label' => 'Example Image' |
| | | // ], |
| | | // 'fulfilled' => [ |
| | | // 'type' => 'textarea', |
| | | // 'quill' => true, |
| | | // 'label' => 'How I fulfilled it' |
| | | // ] |
| | | // ] |
| | | // ], |
| | | // ], |
| | | // 'single_image' => false, |
| | | // 'upload_title' => 'Upload Artwork', |
| | | // ]; |
| | | //} |
| | | |
| | | function ajv_prerender_art_content(array $block, ?string $content, ?WP_Block $parent):?string |
| | | { |
| | | $out = ''; |
| | | $ID = get_the_ID(); |
| | | $meta = Meta::forPost($ID); |
| | | |
| | | $fields = $meta->getAll(); |
| | | |
| | | |
| | | |
| | | $bits = []; |
| | | $excerpt = ''; |
| | | |
| | | $rows = []; |
| | | foreach (['project', 'form', 'city', 'media', 'style', 'theme'] as $type) { |
| | | |
| | | if (!empty($fields[$type])) { |
| | | $rows[] = jvbMetaTermList($fields[$type], $type); |
| | | } |
| | | |
| | | } |
| | | if (!empty($rows)) { |
| | | $excerpt .= sprintf( |
| | | '<ul class="summary">%s</ul>', |
| | | implode('', array_map(function ($row) { |
| | | return '<li>'.$row.'</li>'; |
| | | }, $rows)) |
| | | ); |
| | | } |
| | | |
| | | if (!empty($fields['post_excerpt']??'')) { |
| | | $excerpt .= wpautop($fields['post_excerpt']); |
| | | } |
| | | if (!empty($excerpt)) { |
| | | $bits[] = sprintf('<section id="summary"><h3>At a Glance</h3>%s</section>',$excerpt); |
| | | } |
| | | |
| | | if (!empty($fields['gallery']??'')) { |
| | | $bits[] = sprintf( |
| | | '<section id="gallery"><h2>Gallery</h2>%s</section>', |
| | | Image::gallery($fields['gallery']) |
| | | ); |
| | | } |
| | | |
| | | if (!empty($fields['post_content']??'')) { |
| | | $bits[] = sprintf( |
| | | '<section id="content">%s</section>', |
| | | $fields['post_content'] |
| | | ); |
| | | } |
| | | |
| | | if (!empty($fields['needs']??'')) { |
| | | $bits[] = ajvb_format_needs($fields['needs']); |
| | | } |
| | | if (!empty($fields['wants']??'')) { |
| | | $bits[] = ajvb_format_wants($fields['wants']); |
| | | } |
| | | |
| | | if (!empty($bits)) { |
| | | $out = implode('',$bits); |
| | | } |
| | | |
| | | |
| | | return $out; |
| | | } |
| | | |
| | | |
| | | function ajv_art_schema():array |
| | | { |
| | | return [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\CreativeWork\VisualArtwork\VisualArtwork', |
| | | 'name' => '{{post_title}} | Canadian Art', |
| | | 'artist' => '{{post_author}}', |
| | | 'description' => '{{post_excerpt}}', |
| | | 'thumbnail' => '{{post_thumbnail}}', |
| | | 'dateCreated' => '{{post_date}}', |
| | | 'dateModified' => '{{post_modified}}', |
| | | 'artform' => '{{form.name}}', |
| | | 'artMedium' => '{{media.name}}', |
| | | 'keywords' => '{{style.name}}', |
| | | ]; |
| | | } |
| | | |
| | | function ajv_render_art_content(array $block, string $content):string |
| | | function ajv_art_meta():array |
| | | { |
| | | $ID = get_the_ID(); |
| | | $meta = Meta::forPost($ID); |
| | | $fields = $meta->getAll(); |
| | | return[ |
| | | 'name' => '{{post_title}} - {{form.name}} | Handmade. Human Art', |
| | | ]; |
| | | } |
| | | |
| | | $city = (empty($fields['city'])) ? 'Edmonton' : jvbGetTermLink((int)$fields['city']); |
| | | $form = (empty($fields['form'])) ? 'art' : jvbGetTermLink((int)$fields['form']); |
| | | function ajv_art_archive(array $defaults):array |
| | | { |
| | | return array_merge($defaults, [ |
| | | 'name' => 'Canadian Art. Made in Edmonton, Alberta.', |
| | | 'description' => 'Handmade sculpture, jewellery, and more from Edmonton, Alberta.', |
| | | 'about' => ['id' => get_post_type_archive_link(BASE.'art').'#service'], |
| | | ]); |
| | | } |
| | | |
| | | $style = (empty($fields['style'])) ? '' : jvbGetTermLink(explode(',',$fields['style'])[0]).' '; |
| | | $subtitle = '<h2 class="subtitle">'.$city.' handmade '.$style.'<b>'.$form.'</b>.</h2>'; |
| | | |
| | | |
| | | /** INTRO **/ |
| | | $intro = '<section id="intro" class="row"><div class="text">'.apply_filters('wpautop', $fields['post_excerpt']).'</div><div class="images">'; |
| | | $intro .= (!empty($fields['post_thumbnail'])) ? jvbImageCaption($fields['post_thumbnail']) : ''; |
| | | if (!empty($fields['gallery'])) { |
| | | $images = explode(',',$fields['gallery']); |
| | | foreach ($images as $image) { |
| | | $intro .= jvbImageCaption($image, 'tiny', 'medium'); |
| | | } |
| | | } |
| | | $intro .= '</section>'; |
| | | |
| | | |
| | | /** META **/ |
| | | $taxonomies = ['city', 'project','form', 'media','style','theme']; |
| | | $meta = ''; |
| | | foreach ($taxonomies as $taxonomy) { |
| | | if (!empty($fields[$taxonomy])) { |
| | | $icon = jvbIcon(JVB_TAXONOMY[$taxonomy]['icon'])??''; |
| | | $meta .= jvbRenderTermList($fields[$taxonomy], $icon.JVB_TAXONOMY[$taxonomy]['singular']); |
| | | } |
| | | } |
| | | if ($meta !== '') { |
| | | $meta = '<section class="meta">'.$meta.'</section>'; |
| | | } |
| | | |
| | | return $subtitle.$meta.$intro.$meta; |
| | | function ajv_art_reference_schema(array $defaults):array |
| | | { |
| | | return $defaults; |
| | | } |