Track entity type and adapt service before sending to Website Reports
New
SIA_Publishing_Public::send_website_network_activity()Fix
SIA_Publishing_Public::process_post_types_with_activity()Add Summit Code of Conduct page to repository and sitemap
Include the new page into repositories, Tier 1 in the Experience section.
New
code-of-conduct) layout in SIA_Publishing_Layouts_Repository::summit_microsite_layouts()code-of-conduct-summit layout as Tier 2 in SIA_Publishing_Sitemap::inventory()Move the sitemap bust to a later post update hook
New
post_updated with wp_after_insert_post in SIA_Publishing::define_admin_hooks() and adapt the params in SIA_Publishing_Admin::post_updated()Unify SIAYC ballot code validation file
New
SIA_CF_field_CodeValidator::get_codes() to only load a single filecode-validations-siayc.csv. All other files are no longer in useUnify SIAYC ballot code validation file
New
SIA_CF_field_CodeValidator::get_codes() to only load a single filecode-validations-siayc.csv. All other files are no longer in useUpdate SIAYC form field and validation data
New
SIA_CF_field_YouthCouncilCandidate::get_options()code-validations-siayc-2025-09-22.csvUpdate SIAYC dates for conditional blocks to match September 2025
New
process_youth_council_election_is_open()Include Community Voting when evaluating main menu highlights
New
SIA_Publishing_Public::maybe_highlightPageInSitemap()SIA_Publishing_Sitemap::build_menu()New Visegrad fund layout the application Banner block in host home page layout
New
home-page-host) in SIA_Publishing_Layouts_Repository::get_layouts()visegrad-fund-international) to SIA_Publishing_Layouts_Repository::get_layouts()INTERNATIONAL_BLOG_ID) under ‘non-financial-partnerships-international’ in SIA_Publishing_Sitemap::inventory()New CLI command to publish a team website
Needed fwhen a website is ready to be public. It deactivates the Restricted Site Access plugin, busts blog ids and websites.
New
publish-website CLI publishing subcommand with a single assoc argument: site-id resolved by SIA_Publishing_WP_CLI::publish_website New Elements block for grouped sub-items and adapted Incubation elements
Extend the Features component with a toned down “Elements” variant that has 2 distinctions: there are no icons, and it’s designed to work as an enumeration of sub-elements.
The ‘incubation-timeline’ block slug should be deprecated but it’s in use in production and the effort is not yet warranted. For now updating its handler to use Features and the verbiage suffices.
New
SIA_Publishing_Handler_Elements that is an ACF block placeholders and extends “Features” (SIA_Publishing_Handler_Features) without modification in order to provide a distinct block registered with ACF, added to $components in SIA_Publishing_Blocks_Repository::get_blocks_by_section(); added to $componentHandlers by SIA_Publishing_Context::requireComponentHandlers(); treated as a distinct config case in SIA_Publishing_Block::getContextOptions(), together with FeatureshandlerId of the Incubation elements (incubation-timeline) in SIA_Publishing_Blocks_Repository::get_blocks_by_section()columns-2 modifier for Features when showing the “Incubation outline” config (block slug incubation-timeline) to accomodate for 4 elements with long lead text in SIA_Publishing_Handler_Features::populate() incubation-timeline) icons to the steps and content in SIA_Publishing_Handler_Features::populate_items()Improvements
SIA_Publishing_Blocks_Repository::get_blocks_by_section() to reflect practical use: it’s 4 specific incubation features, not a timelineAdd GTM parameters to main menu hightlight item
Improvements
isHighlight, add gtm parameters form SIA_Publishing_Sitemap::formatMenuItem()Highlight the Apply sitemap post in the site navigation when the application is open
Add a new filter to set highlights in a sitemap’s inventory and, consequently, its menu.
New
SIA_Publishing_Sitemap::associate_posts() by applying the sitemap/highlight_posts filter to set a layout’s isHighlighted in $flatisHighlighed in the $flat, set highlight to TRUE from SIA_Publishing_Sitemap::formatMenuItem()$highlightItem when an item has 'highlight' set and later add it after the home link from SIA_Publishing_Sitemap::build_menu()about-application-host) to check if the A&AP is open from SIA_Publishing_Public::maybe_highlightPageInSitemap() hooked to sitemap/highlight_posts from SIA_Publishing::define_public_hooks()Improvements
--lighter) colored background type (display backgroundType) based on the error level from SIA_Publishing_Component_Handler_Abstract::context() SIA_Publishing_Handler_PageSection::context() Display the venture hightlight for SIAYC members
is_council_member as a switch to SIA_Publishing_Handler_Profile->populate()Create a “View English version” control in Implementation settings showing the Stencil value
The purpose is to: A. view the full English Stencil original while translating (it would disappear while writing); B. be reminded of the original while reviewing translations a year later (the translation may be way off from the starting point).
New
$config->getStencilValue()) from SIA_Publishing_Admin::prefill_settings_values()Fixes
SIA_Publishing_Admin::prefill_settings_values() (tag: v21.52.1)Add Youth Council pages to repository and sitemap
Include the 4 new page into repositories and include the ballot CF7 CTA into the block conditions.
New
youth-council-ballot-submission-landing-page-international), Preview (youth-council-candidate-profile-review-landing-page-international), Youth Council (youth-council-international)thank-for-your-vote-international)SIA_ACF_field_BlockCondition::get_options() and in SIA_Publishing::ACF_BLOCK_FIELD_IDS as youth-council-voting-ballotImprovements
--preserve-layout in SIA_Publishing_WP_CLI::set_layout() and 4th boolean argument to SIA_Publishing_Layout::applyTo()Validate CF7 code validator against CSV file
When a form’s post name points to a validator CSV, add the codes found in the file to the allowed values.
New
SIA_CF_field_CodeValidator::CODES in SIA_CF_field_CodeValidator::get_codes() called by SIA_CF_field_CodeValidator::validation_filter() Validate CF7 code validator against CFDB7 table records
Rely on the Contact Form CFDB7 recorded form entries to ensure single code usage
New
SIA_CF_field_CodeValidator::get_submission_by_code() used by SIA_CF_field_CodeValidator::validation_filter() Add script redirect for CF7 form submissions
When a post id is found, redirect after the email is sent
New
redirect_to in additional settings from SIA_Publishing_Handler_CTA::populate_form() and attach a redirect callbackCreate the custom form fields for a voter ballot
New one-time-code and youth council candidate form fields.
New
SIA_CF_field_CodeValidator (text form control)SIA_CF_field_YouthCouncilCandidate (single select form control)SIA_Publishing_Public::wpcf7_handle_form_fields() called by SIA_Publishing::define_public_hooks() directlySIA_Publishing::load_dependencies()`Prepare for display of profiles without headshot
Theoretically the “mistery man” is generated as a profile photo or thumbnail, but not for SIAYC candidates.
Improvements
SIA_Publishing_Twig::get_indexCard_context() or SIA_Publishing_Handler_Profile::populate()Conditional Youth Council candidates block with Venture phase profile hightlight and tighter display
New
SIA_Publishing_Handler_Profiles::populate()list-item in SIA_Publishing_Handler_YouthCouncilMembersAndCandidates::context()view_mode in by checking if set in SIA_Publishing_Handler_Profiles::populate()youth_council_election_is_open block condition in SIA_ACF_field_BlockCondition::get_options() based on the field parent and processed by process_youth_council_election_is_open()SIA_Publishing_Handler_Profile::highlight()Improvements
SIA_Publishing_Component_Handler_Abstract::populate() calling populate_blockConditionFulfilled() and removed redundant from SIA_Publishing_Handler_CTA::populate()SIA_Publishing::ACF_BLOCK_FIELD_IDS (now only for youth-council-candidates) to facilitate context aware choice selection in block condition ACF fieldsNew blocks for Youth Council candidates and members from the network
To provide election material (candidate profiles) and afterwards display the members of the council, create 2 new distinct blocks. Adapt to the new behavior getting profiles from the network in the board members block.
New
SIA_Profiles_Public::get_site_profiles() in added to SIA_Publishing_Blocks_Repository::get_blocks_by_section(), handled by the new SIA_Publishing_Handler_YouthCouncilMembersAndCandidates, loaded in SIA_Publishing_Context::requireComponentHandlers()SIA_Publishing_Handler_Profiles::populate() to check if an extension class object has a populate_profiles() that overloads the data['posts'] variable to bypass Component_With_Entities_Trait::posts()populate_profiles() the in board member profiles handler extension to prepare for a Steering Board that has SIAYC members coming from local websiteskind of the index card of council members or candidates in SIA_Publishing_Handler_Profile::populate() and to not use the Play profile adapter URLs for board members who are also council membersImprovements
SIA_Publishing::ACF_BLOCK_GROUP_IDS (now only for board-members and local-team) to facilitate context aware choice selection in custom community role ACF fieldsteam-international layout block order matches current usage in SIA_Publishing_Layouts_Repository::get_layouts()Improve error handling of footer Program partners
When the partners are tiered and there was a notice, all partners would be hidden from anonymous users while editors would see an erroneous default error message.
Now:
Fixes
SIA_Publishing_Handler_Organizations::context() includes error data about “featured” and “partner”SIA_Publishing_Context::localPartners() shows content when the error level is ‘notice’Include Regional funding partners in the footer context
New
PARTNERSHIP_TYPE_REGIONAL_FUNDING) to the local partners footer block in SIA_Publishing_Context::localPartners()New blocks for Timeline and Section Header
For better landing pages, specifically Youth Council elections, provide a Section Header as a separator, and an editable Timeline (instead of a class extended by multiple config timelines).
To ehnahnce the timeline, allow for ranges (e.g. March or 2025) or date-only dates (so no time) instead of the default date and time.
New
SIA_Publishing_Blocks_Repository::get_blocks_by_section(), handled by SIA_Publishing_Handler_Timeline with new __construct() switches for handling an ACF repeater of datesSIA_Publishing_Blocks_Repository::get_blocks_by_section(), handled by the new SIA_Publishing_Handler_SectionHeader, loaded in SIA_Publishing_Context::requireComponentHandlers()SIA_Publishing_Twig::get_date_context()Add Impact Blueprint layout to the navigation under stories
New
impact-blueprint-landing-page-international) from tier 4 under home-page-international to tier 2 under stories (articles-international) in SIA_Publishing_Sitemap::inventory()Provide Profile video embed context to the Profile entity
When the video embed URL is found in a profile instance, send it to the Twig context.
New
SIA_Publishing_Handler_Profile::$embed context array in the new SIA_Publishing_Handler_Profile::embed()Improvements
SIA_Publishing_Handler_Resources::populate()Fixes
SIA_Publishing_Handler_Resource::context() resource as a post type with sharing to the SIA_Publishing_Sharing::POST_TYPES_WITH_SHARING constant array$iconsSection set in SIA_Publishing_Handler_Features::populate_items()Replace newsletter CTA with mailinglist in the site footer
To finish the transition to Mailjet (ironically while the account is blocked), replace the MailChimp form with a Mailjet mailing list form in the website footer.
New
newsletter type CTA with a Mailing list (SIA_Publishing_Handler_CTAMailingList) with the spark mailing_list in SIA_Publishing_Context::siteNewsletter() and send the same text as gdpr_noticeSIA_Publishing_Handler_CTAMailingList::populate_mailingListForm()New Banner with photo area variant
Adapt and pass through block settings to display a Banner with a positioned photo area (i.e. a full 33% column)
section positioned background variant in SIA_Publishing_Component_Handler_Abstract::backgroundImageVariants()SIA_Publishing_Handler_Banner::context() DocBlockLocalized component scripts used by Mailing list for Impact Blueprint
Provide a path for components to localizing and registering custom JS in order for the new Impact Blueprint multi-list Mailjet subscriber to be able to do its and be configured and processed safely on the server. Remove the need to use the overkill layouts debugger .env constant when layouts are deployed incomplete and hard-code “free to edit” layouts where they are defined.
New
SIA_Publishing_Handler_CTAMailingList::$mailingListUuidSIA_Publishing_Handler_CTAMailingList::ajax_process_submission() hooked to process_ajax_requests from SIA_Publishing_Handler_CTAMailingList::filter_ajax_requests() and identify the mailing_list_form consumer registered while localizing a JS variableSIA_Publishing_Handler_CTAMailingList::enqueue_javascript(): consumer, a confirmation message, and the ajax URLSIA_Publishing_Component_Handler_Abstract::defineHooks() method from __construct()SIA_Publishing_Component_Handler_Abstract::enqueue_javascript() method there for overloading$componentUuid created in the constructor from the component name and a random string from wp_generate_password()SIA_Publishing_Public::process_ajax_requests() registered very early by SIA_Publishing::define_public_hooks() hooked to wp_ajax_sia_publishing and wp_ajax_nopriv_sia_publishing and only doing a filter call for process_ajax_requests to allow scripts that come late to hook into itImprovementa
SIA_Publishing_Layout::$bypassAllowedBlocks that reads from the layouts repository and is considered in SIA_Publishing_Admin::allowed_block_types(). Use it to configure the impact-blueprint-landing-page-international layout in SIA_Publishing_Layouts_Repository::get_layouts() by adding 'bypassAllowedBlocks' and setting it to TRUEImpact Blueprint branding via individual styles for layouts
New class assignemnt for campaign branded layouts which removes the SIA theme and adds a ca- prefixed theme. Now it’s hard-coded for the Impact Blueprint.
New
SIA_Publishing_Layout::getLayoutSlugFromQueriedObject() that takes no arguments but returns the layout from meta in the right conditionsca-impact-blueprint added by SIA_Publishing_Context::bodyClass(), also removing the t-[impact theme] classSIA_Publishing_Public::enqueue_layout_specific_styles() hooked from SIA_Publishing::define_public_hooks() to wanda_enqueue_styles action called in Wanda::enqueue_styles(), now including Impact Blueprint fonts and campaign stylesImpact Blueprint mailing list CTA component
An universal mailing list subscriber that can also display additional (Mailjet) lists as opt-ins, plus a basic Mailjet embed component that prevents HTML block content being “cleaned-up” when a non-super-admin edits a page.
New
SIA_Publishing_Handler_CTAMailingList loaded from SIA_Publishing_Context::requireComponentHandlers()$collections array in SIA_Publishing_Blocks_Repository::get_blocks_by_section() using handlerId ‘CTAMailingList’ and making the connection to the ‘Mailing List Subscription CTA’ ACF field groupSIA_Publishing_Handler_MailjetEmbeddedForm loaded from SIA_Publishing_Context::requireComponentHandlers()$collections array in SIA_Publishing_Blocks_Repository::get_blocks_by_section() using handlerId ‘MailjetEmbeddedForm’ and making the connection to the ‘Mailjet embedded form’ ACF field groupImpact Blueprint communications campaign materials
In order to show all episodes as a list and individually in modals, create a resource post type that can show video embeds.
A new resource post type for adding episodes and a blank layout repository for the landing page; resources component loading the entities as a list; group template; layout for the landing page added to the International website sitemap; details ACF group loaded in the new post type.
New
resource) post type in SIA_Publishing_Post_Types_Repository::get_post_types() supporting “title”, “editor”, “excerpt”, “author”, “thumbnail”, “revisions”SIA_Publishing_Resource included in SIA_Publishing::load_dependencies()resource post type to SIA_Publishing::$ACF_POST_FIELD_GROUP_IDS['resource']SIA_Publishing_Handler_Resource providing twig contextSIA_Publishing_Handler_Resources loaded from SIA_Publishing_Context::requireComponentHandlers()$collections array in SIA_Publishing_Blocks_Repository::get_blocks_by_section() using handlerId ‘Resources’ and making the connection to the Resources ACF field groupSIA_Publishing_Layouts_Repository::get_layouts()impact-blueprint-landing-page-international in sitemap for the INTERNATIONAL_BLOG_ID location via SIA_Publishing_Sitemap::inventory()Improvements
SIA_Publishing_Admin::prefill_settings_values()Bring back user activity posting to remote
Improvements
SIA_Publishing_Public::send_website_network_activity()Provide a GMT timestamp normalizer
To get UTC timestamps, convert the param based on the blog’s GMT offset.
New
SIA_Publishing::getGMTTimestamp() with a $timestamp parameter and return of the GTM timestampDon’t show Ventures without media in Community Voting
Improvements
SIA_Publishing_Handler_CommunityVoting::populate_ventures() and skip them if they have no video and no thumbSIA_Publishing_Handler_CommunityVoting::context() for when there are imported, but not read venturesSIA_Publishing_Public::send_website_network_activity()SIA_Publishing_Public::send_website_network_activity()Allow CTA sending visitors directly to the A&AP registration page
Process a new option called “A&AP landing page” in the CTA block and, when it’s set to send visitors directly to the registration page, comply.
The use case is: from the “About application host” layout, which already contains eligibility criteria and a timeline, it no longer makes sense to send users to the A&AP home page which contains xactly the same information.
Only became relevant after 2024’s A&AP update which moved the registration form out of the home page.
New
aap_landing_page $data key in SIA_Publishing_Handler_CTA::populate_target() and, when present, or one of url or registration_url, use the respective AAP class propertyUpdate host social media landing page
Improvements
social-impact-award-landing-page-host) blocks in SIA_Publishing_Layouts_Repository::get_layouts()SIA_Publishing_Handler_GlobalEvents extending SIA_Publishing_Handler_Events handlerId of global-events-agenda to GlobalEvents GlobalEvents in SIA_Publishing_Context::requireComponentHandlers()Fixes
deploy-layout CLI command when there was no site arg ignoring network in SIA_Publishing_WP_CLI::deploy_layout()Don’t show empty page sections to anonymous visitors
When getPostIdByLayoutSlug() returned a WP_Error for anonymous visitors, not a numeric value, because of the behavior of get_post_status(), it would simply consider the WP_Error as null and return the status of the current page and the handleError() would fail.
Fixes
SIA_Publishing_Layout::getPostIdByLayoutSlug() is a WP_Error before checking post status in SIA_Publishing_Component_Handler_Abstract::populate_target()$this->$component in SIA_Publishing_Component_Handler_Abstract::populate_target()Improvements
"show_block/{$this->component}" and use it to hook maybe_showPageInSitemap() to show_block/callout instead of using CTA universallySIA_Publishing_Callout::populate_target() completely and move its single switch for an empty data handler into SIA_Publishing_Component_Handler_Abstract::populate_target()Display Event field values in admin table
New
SIA_Publishing_Admin::set_custom_post_columns_tribe_events() to manage_tribe_events_posts_columns from SIA_Publishing::define_admin_hooks()Customizable landing page elements available to editors
New
SIA_Publishing_Context::$publishingOptions and populated from the “Publishing” ACF group and the layout slug post metavariants()SIA_Publishing_Blocks_Repository::get_blocks_by_section() as featuresFeatures is the handler id for other components’ block (e.g. Service clusters)SIA_Publishing_Theme_Repository::get_available_sizes(), used in Wanda::format_font_size_for_theme_support() hooked to editor-font-sizes by add_theme_support()SIA_Publishing_Theme_Repository::get_icon_categories(), used in SIA_ACF_field_Icon::render_field_settings()SIA_Publishing_Component_Handler_Abstract::variants() and backgroundType() respectivelypopulate_target() method to the SIA_Publishing_Component_Handler_Abstract and use in Banner populate() when neededlayout display context key in SIA_Publishing_Twig::get_component_class() and add it to variantsSIA_ACF_field_Icon::render_field_settings() to limit the categories usable by editors in the Banner or FeaturesImprovements
SIA_Publishing_Admin::allowed_block_types()<p> element to a lead automatically from the Component_With_Heading_And_Lead_Trait::populate_lead(), as it was needed in Featurescondensed view mode from SIA_Publishing_Handler_Event::context() and don’t load tags in meta(), and remove the duplicate from SIA_Publishing_Handler_Events::populate()Fixes
SIA_Publishing_Handler_CTAForwarder::teams()Display Event registration links, hide disfuctional venue links
New
Fixes
$registrationUrl in SIA_Publishing_Event::__construct() and adding it to the list of fields in SIA_Publishing_Handler_Event::fields() to be consumed by contextInclude an events list in Host landing page with the new condensed view mode
New
view_mode in SIA_Publishing_Handler_Events::populate() and unset the ‘content’ key to provide a condensed view for the new condensed view_modeCall an action hook immediately after saving Stencil and Implementation options
Create the hook for when Stencil options are saved and after saving Implementation and Stencil settings call a “do_action” to allow other plugins to react.
New
do_action( 'saved_implementation_options' ) that takes one parameter, the $updatedConfig after saving Implementation options in SIA_Publishing_Admin::save_implementation_options() hooked to acf/save_postSIA_Publishing_Admin::save_stencil_options() that posts to the activity service and is hooked to acf/save_post in SIA_Publishing::define_admin_hooks() do_action( 'saved_stencil_options' ) that takes no parameters after saving Stencil options in SIA_Publishing_Admin::save_stencil_options() hooked to acf/save_postSIA_Publishing_Config::exportToAAP() as a P.O.C. that would send updates to the current website’s team A&AP platform when existing Fix A&AP timeline showing incorrect times caused by summer time offset changes
The gmt_offset option fails when calculating summer time timestamps while still in “default” time, and the other way around.
New
SIA_Publishing::addGMTOffset() SIA_Publishing::format_date()SIA_ACF_field_setting_dataSource::format_value() in the A&AP cases when returing raw timestampsFixes
isset() with array_key_exists() to prevent running queries in Component_With_Entities_Trait::posts() when the $data['posts'] is already nullified, for example in CommunityVoting::populate_ventures()Create a Landing Page license placement layout
Partly duplicate the “Social Media Landing Page International” layout to Host license placement.
New
social-impact-award-landing-page-host to SIA_Publishing_Layouts_Repository::get_layouts() with placementType ‘license_id’ and placement ORGANIZATION_STATUS_HOSTsocial-impact-award-landing-page-host to SIA_Publishing_Sitemap::inventory() in the ORGANIZATION_STATUS_HOST keydeploy-layout taking either ‘network’ or a site ID as a parameter in SIA_Publishing_WP_CLI::deploy_layout()New ‘Publishing’ settings for microsites and Partner block view modes
New
ACF_SETTING_FIELD_GROUP_IDS and ACF_OPTION_PAGE_SLUGSmaybe_showPageInSitemap() hooked to show_block/cta that looks at the Publishing event registration settingsteaser view mode to list-item in SIA_Publishing_Handler_Partners::context()Fix missing speakers and topics from Event Agenda
Fixes
'speakers' switch case in SIA_Publishing_Handler_EventAgenda::process_agendaItem()'topics' switch case outputNew Entity embed Gutenberg block and mature Venues
New
SIA_Publishing_Handler_EntityEmbed) that wraps around a selected entity to be used to embed Venues in the Summit Location pageentity-embed key to the component section of the SIA_Publishing_Blocks_Repository::get_blocks_by_section() with the EntityEmbed hander id loaded by SIA_Publishing_Context::requireComponentHandlers()thumbnail() to display a static Google map in the list-item view$venue variable and $address to SIA_Publishing_Event SIA_Publishing_Context methods to the is_embed() possibilitySIA_Publishing_Twig::get_googleStaticMap_context() that returns an image map used by Venue’s list-item view mode$post_status variable to SIA_Publishing_Entity_Handler_Abstract, set it in SIA_Publishing_Entity_Handler_Abstract::initialize() and reuse it wherever the post status was neededNULL from SIA_Publishing_Entity_Handler_Abstract::context() when the current visitor has no accessaccess() to SIA_Publishing_Entity_Handler_Interfaceblend-in display modifier by default to all auto-generated pageLead contexts when there’s no set hero from SIA_Publishing_Entity_Handler_Abstract::pageLead()byline meta context outside of posts from SIA_Publishing_Entity_Handler_Abstract::meta() given that it’s the first key to be unset in all class extensionsSIA_Publishing_Entity_Handler_Abstract::categories() with a taxonomy parameter to be reused in SIA_Publishing_Entity_Handler_Event who uses tribe_events_cat as a taxonomySIA_Publishing_Entity_Handler_Abstract::meta() instead of adjusting the 'context' in Event (adds location), Press mention (adds created), and Venue (adds location)Fixes
WP_POST via tribe_get_venue_object() in __construct() and then use own method in SIA_Publishing_Venue::get_address()SIA_Publishing_Venue::__construct() to make it more detailedNULL in context() overloads of all handlers in includes/post-handlersarrays, and thus string layout slug keys, even when they have no own children in SIA_Publishing_Sitemap::inventory()New Venue entity class and handler
New
SIA_Publishing_Venue as an adapter for tribe_venue required in SIA_Publishing::load_dependencies()SIA_Publishing_Handler_Venue building context for the Component Library and adapted from tribe_venue in SIA_Publishing_Entity_Handler_Abstract::instantiateHandler()New Event agenda Gutenberg block
An agenda that lists days, time slots, and, when needed, parallel sessions. And public Venue posts via a filter because… Event Calendar needs a pro license to have public venues…
New
SIA_Publishing_Handler_EventAgenda and required in SIA_Publishing_Context::requireComponentHandlers()SIA_Publishing_Component_Handler_Abstract::blockId) in order to parse repeater blocks, used in the Event agendaSIA_Publishing_Public::alter_post_types() hooked to register_post_type_args in SIA_Publishing::define_public_hooks()Universal Wanda deployment and wipeout
Create 2 new CLI commands that create Wanda pages without on brand new websites, ignoring the migration Version Switch plugin completely
New
deploy-wanda in SIA_Publishing_WP_CLI::deploy_wanda()deploy-wanda in SIA_Publishing_WP_CLI::wipeout_wanda()SIA_Publishing_WP_CLI::createAllWandaPages()Improvements
SIA_Publishing_WP_CLI given that they will no longer be usedFixes
SIA_Publishing_Layout::clonePostContent()Add the Summit microsite inventory and layouts
Add the layouts to the repository, the pages to the sitemap inventory, and a new block for and Eventbrite embedded checkout.
Create a new, simpler, method of adding per-location layouts, that only adds the placement suffix and values outside the layouts array for a more concise creation
New
SIA_Publishing_Handler_EventbriteCheckout loaded by SIA_Publishing_Context::requireComponentHandlers()SIA_Publishing_Blocks_Repository::get_blocks_by_section()speakers-summit) out when there are no Profiles from SIA_Publishing_Public::maybe_showPageInSitemap() hooked to sitemap/associate_postsSIA_Publishing_Sitemap::inventory()SIA_Publishing_Layouts_Repository::get_layouts()SIA_Publishing_Layouts_Repository::summit_microsite_layouts() that lists placement agnostic layouts initially in an array, and then passess them throught the new SIA_Publishing_Layouts_Repository::localize_layouts() that adds slug fixes and placement dataFixes
SIA_ACF_field_CF7Form::get_options() caused by the missing Contact Forms 7 pluginClean Venture modal display of full variant
New
SIA_Publishing_Context::signupOrFollow()$variant class variable in SIA_Publishing_Entity_Handler_Abstract that is set via the variant() method that looks for $_GET['variant'] in order to adapt the full entity variant to a modal viewSIA_Publishing_Entity_Handler_Abstract::$workflowInfo in modal variantsmodal variants from SIA_Publishing_Entity_Handler_Abstract::pageLead()$can_vote or $has_voted voting variable in CommunityVoting::populate_votingDetails()$maxVotes class variable in CommunityVotingSIA_Publishing_Handler_CTA::context() and add the sharing variant class in populate_socialLinks()Fixes
PageLead::context() doesn’t overwrite the $data property to preserve the set variant$view_mode == 'full' condition in SIA_Publishing_Handler_Venture::context()SIA_Publishing_Twig::get_socialLinks_context() by replacing is_null() with empty()Remove all admin translation suggestions and update POs
New
languagesspv_voting_instructions and spv_public_status_message) to isolate language filesNew Community Voting component handler
For now it gathers the current SIA_Competition ventures to show together with possible issues (e.g. post status details) and a clearer workflow info.
New
SIA_Publishing_Handler_CommunityVoting and populate it with the current SIA_Competition ventureshandlerId to communty-voting in SIA_Publishing_Blocks_Repository::get_blocks_by_section()CommunityVoting component handler from SIA_Publishing_Context::requireComponentHandlers()SIA_Publishing::MANAGE_PERMISSION set to ‘manage_options’post_type properties where necessary (Organization, Team, and Venture) in entity handlers to use in SIA_Publishing_Entity_Handler_Abstract::access()post_type either to the component or the entityType property in SIA_Publishing_Entity_Handler_Abstract::__construct()SIA_Publishing_Entity_Handler_Abstract::access() that takes an operation and tries to figure out if the current user has the corresponding permissionSIA_Publishing_Entity_Handler_Abstract::issues(), for now showing details about what the status’s effect is, for example when it’s scheduledSIA_Publishing_Entity_Handler_Abstract::workflowInfo()Improvements
SIA_Publishing_Handler_Venture::context()SIA_Publishing_Handler_Ventures::populate() by specifiying a randomizeOutput object property and annotating the ‘randomize’ context paramenterSIA_Publishing_Handler_Ventures::populate_ventures() SIA_Publishing_Handler_Partners::context() (was waiting for the Component Library)SIA_Publishing_Public::preprocess_block_context()Fixes
SIA_Publishing_Context::sitePrivacyLink() and adapting post statuses to the permission in SIA_Publishing_Layout::getPostIds()Bring the Partnership Tiers to the Partners collection
Add a “Display partnership tiers” field to the Partners block and re-use the already in place condition in the Partners collection component to replicate the display in the footer introduced in v15.0.0.
New
field_64d2189ccf0e8) boolean field to the Partners block (group_60f18ca558943);SIA_Publishing_Handler_Partners::context() Fixes
use_block_editor_for_post hook condition and priority in SIA_Publishing::define_admin_hooks()Allow publishing post types on microsites
Include microsites in the publishing category, and trigger showing post types with the ‘publishing’ location: Organiation, Profile, Press mention, Testiomnial
New
SIA_Publishing_Context::localPartners(), with its own generic “Partners” heading and using the same financial partnership term as the international blogSIA_Ariel::is_microsite() to the SIA_Publishing::is_publishing_blog() helper, which in turn fulfills the condition for post types Improved rendering of Ventures component
The Alumni Ventures page on the international website is very heavy (clocking in at about 25MB uncompressed, even without finalists).
Make better use of the new loading pattern of competitions and stop loading Venture objects when Finalist Venture extensions are already provided by competitions.
New
blogIds key in the output of spv_get_years() to prevent instantiating competitions in countries that didn’t run or don’t have project posts in SIA_Publishing_Handler_Ventures::populate_ventures()SIA_Publishing_Handler_Ventures::populate_ventures()SIA_Competition::finalists) to render Ventures (as opposed to loading an additional SIA_Venture object) given that SIA_Finalist_Venture extends SIA_Venture and the holes have been plugged (below in fixes)SIA_Competition::load_instance() to make use of static variables and transients in SIA_Publishing_Handler_Ventures::populate_ventures()backgroundOnly to true when the image’s src contains the string ‘youtube’ in SIA_Publishing_Handler_Venture::populate()term_exists in SIA_Publishing_Handler_Venture::sdgs()Fixes
SIA_Venture (new) and SIA_Post_Interface (old) when deciding which property or method to use while creating component contexts in SIA_Publishing_Entity_Handler_Abstract <p> string already begins the text in SIA_Publishing_Handler_PageLead::populate_lead() and stop adding it from SIA_Publishing_Context::__construct()Hard-code the left aligned Page lead variant for Post and Vision statement
Only align left (the previous behavior) posts, given that they are content heavy, or page leads showing the Vision statement.
New
left-aligned variant to the page lead in SIA_Publishing_Handler_Post::context()left-aligned variant SIA_Publishing_Handler_PageLead::populate_text() when the is_replaced_by_vision_statement parameter is setSync sitemap disk and transient cache busting
And add a block inventory to a sitemap that points custom blocks’ slugs to the IDs of the posts that contain them, and store the inventory in the sitemap’s cache
New
w3tc_flush_all() when busting a sitemap’s cache in SIA_Publishing_Sitemap::__bust_cache()SIA_Publishing_Sitemap::$blockInventory property that is filled during post association__construct() transient into two keys: flat, that holds the SIA_Publishing_Sitemap::$flat property, and blockInventoryaddPostBlocksToInventory() method that fills up the $blockInventory array keyed with block slugs poingting to an array of $post->IDSIA_Publishing_Sitemap::associate_posts() call the new addPostBlocksToInventory() method for each postSIA_Publishing_Sitemap::getPostsWithBlocks() method that looks through the $blocksInventory to find corresponding posts IDs Fix missing breadcrumbs and missing testimonial authors
Fixes
SIA_Publishing_Sitemap::get_breadcrumbs()bust-transient-variants incorrect use of $args with the --network optionSIA_Profiles_Public::get_blog_profiles() by adding another $pointer key for the blog IDNew CLI command to bust a single transient’s variants
Need for example to only bust the licensees site transient instead of the entire list of site transients. It takes a class name and a method as parameters, plus the location (blog id, global, or network).
New
bust-transient-variants CLI publishing subcommand resolved by SIA_Publishing_WP_CLI::bust_transient_variantsFix missing Testimonial topics, stale Sitemap cache, and config warnings
Fixes
SIA_ACF_field_TestimonialTopic::__construct()SIA_Publishing_Admin::post_updated() hooked to post_updated in SIA_Publishing::define_admin_hooks()SIA_Publishing_Config objects were throwing warnings and noticesNew Banner block and Icon field type
Officially provide the Banner block with an optional background image and 4 variants: half, cover, accented, and inverted overlay.
Add the Icon field type that allows selection of an official SIA icon.
New
SIA_Publishing_Context::bodyClass()$image, $icon, and $variants in the Banner component handler (SIA_Publishing_Handler_Banner) in order to provide a massive full-page cover with a background and an overlaySIA_Publishing_Blocks_Repository::get_blocks_by_section()SIA_ACF_field_Icon that lists all icons found in icons.config.json via SIA_Publishing_Theme_Repository::get_available_icons()Improvements
$size parameter with the ‘double’ default value in SIA_Publishing_Twig::get_icon_context()Fixes
1-4 of 15 in SIA_Publishing_Context::__construct()acf()->fields->get_field_type( '...' ) by switching to the official method of registering custom ACF groups by calling acf_register_field_type() in SIA_Publishing_Public::acf_register_custom_fields()$settings parameter in __construct() and instead use a new setEnv() method to set the file settingsinitialize() instead of a construtor (KPI, Localized, TestimonialTopic)Release the Retreat sitemap and more core blocks
New
SIA_Publishing_Admin::allowed_block_types()Fixes
SIA_Publishing_Sitemap::build_menu()Branch the context logic when a post is password protected
When a singular post is password protected load the Focused screen template with the password form template.
New
focused body class for singular password protected in SIA_Publishing_Context::bodyClass()Fixes
post_password_required()) when showing a single post (is_singular()) and when yes show a banner and add the password form to the context in SIA_Publishing_Context::__construct()Store sitemaps and breadcrumbs in transients
And add the Retreat website to the layouts repository and check if articles and support role pages should be included in the sitemap.
New
SIA_Publishing_Public::get_totalPostsOfType() doing a $wpdb query only for post type and post statusSIA_Publishing_Public::maybe_showPageInSitemap() hooked to sitemap/associate_posts and show_block/ctaSIA_Publishing_Layouts_Repository::get_layouts()SIA_Publishing_Sitemap flat and pages’ breadcrumbs in local transientspublishing bust-transients CLI transient buster command in SIA_Publishing_WP_CLI::bust_transients that clears all SIA transients depending on the parameters (blog id, global, or network) using SIA_Ariel_Transient_Service::listTransients()SIA_Sitemap::__bust_cache()SIA_Publishing_Admin::transition_post_status() hooked to transition_post_statusImprove sites network admin menu
Shorten names and standardize location of the icon.
Create a non-lating alphabet transliterator and use while switching to v20.21
When generating post slugs for non-latin alphabets during the switch to v20.21, transliterate the post titles to latin and generate ascii-only slugs where the default WordPress functionality fails: Cyrillic, Armenian, and Georgian.
New
SIA_Publishing_i18n::transliterate() static that takes a string and passes it through the \ashtokalo\translit\Translit::convert() with the current language and the latin conversionSIA_Publishing_i18n::hyASCII() in order to also convert pairs that contain the ʿ latin character or diacriticsSIA_Publishing_WP_CLI::switch_to_v2021() script pass post titles through SIA_Publishing_i18n::transliterate() before creating permalinksImprovements
SIA_Publishing_Sitemap::formatMenuItem() depending on the post statusFix passing the preview parameter to blocks
Fixes
TRUE with the $is_preview parameter when calling getContextOptions() in SIA_Publishing_Public::preprocess_block_context()$isEditorPreview to blocks in a new $data['is_preview'] keyAllow “featured” Profiles and fix Profile entity url
New
profile in the SIA_Publishing::POST_TYPES_WITH_IS_FEATURED constantFixes
utm_campaign parameter by default in SIA_Publishing_Component_Handler_Abstract::campaignVars()Feature: create a Localizer ACF field and provide Partners in sections
Create a field type that can be attached to a different field, list all its options and provide the possibility to overwrite the default settings. It’s used for the Partnership tier field type, where the default top option is “Platinum”, and it can be localized as “Top partner”.
New
SIA_ACF_field_Localizer), which given another custom field, list all the latter’s options and provides text inputs for localizaing (i.e. relabeling) all of thempartnershipTier (the key) and partnershipTierLabel (the localized value) in the Organiation entity handler in SIA_Publishing_Handler_Organization::context()use_partnership_tiers option in the Organizations component handler and send it from SIA_Publishing_Context::localPartners() when the use_partnership_tiers blog option is enabledcontext() method in SIA_Publishing_Handler_Partners to be able to split partner organizations into levels (or tiers)Protect critical posts and bring back the “Add new” page cap
New
SIA_Publishing_Admin::admin_body_class() hooked to ‘admin_body_class’ in define_admin_hooks() in order to create CSS rules to declutter the interfaceSIA_Publishing_Admin::page_row_actions()SIA_Publishing_Public::protect_critical_posts() hooked to map_meta_cap in define_public_hooks()sia-version-switch plugin is active in SIA_Publishing_Public::modify_pages_query()Fixes
create_pages cap assignment by mapping it to create_posts in SIA_Publishing_Public::manage_remaped_caps() hooked to ‘map_meta_cap’ with priority 10 (it’s overwritten by Version Switch)Propagate UTM parameters for the CTA block
Make campaign vars processing available to all component handlers and add a method to append them to any URL.
New
SIA_Publishing_Component_Handler_Abstract::campaignVars() and remove the duplicates from SIA_Publishing_Handler_CountrySwitcher and SIA_Publishing_Handler_CTAForwarderSIA_Publishing_Handler_CTA::populate() and use it for the page_lead type in populate_target()SIA_Publishing_Component_Handler_Abstract::applyCampaignVars() and use it for the above 3 componentsFixes
SIA_Publishing_Handler_Team::populate()SIA_Publishing_Handler_CTAForwarder::populate()SIA_Publishing_Handler_CountrySwitcher::teams()SIA_Publishing_Handler_LocalOrganization::context()SIA_Publishing_Handler_Organization::context() because of an incorrect evaluation of the verticalSIA_Organization::get_licensees()Allow enviroment dependent layout updates
If a user has the review permission and the layout debugging environment variable is on, allow all custom SIA blocks in a layout.
New
SIA_Publishing_Admin::allowed_block_types() to check for the DEBUG_LAYOUTS .env constant and if the current user has the SIA_Publishing::REVIEW_PERMISSIONProvide the Get in touch block to Host or Candidate websites
The values of the profile and url are automatically prefilled with Coordinator for Hosts, Organizational lead for Candidates, and the url is the country email.
New
SIA_Publishing_Admin::preprocess_block_field_values() to acf/pre_render_fieldsSIA_Publishing_Component_Handler_Interface::setFormDefaults( $fields ) called from the above method and its SIA_Publishing_Component_Handler_Abstract::setFormDefaults() counterpartSIA_Publishing_Handler_GetInTouch::setFormDefaults() and auto-generate the profile in populate()Improvements
prefill_cloned_field_value() to replace SIA_Publishing_Admin::prefill_field_value()Fix the v20.21 migration script false negatives
Fix missed identification of layouts by permalink and exclude irrelevant layouts (candidate layouts on a host license team website).
Once the title of a page is localized, the permalink will change and render the all checks in the migration CLI command will fail.
New
SIA_Publishing_Layout::$slugStem (slug without the placement) and $slugSuffix (only the placement) properties;Fixes
SIA_Publishing_WP_CLI::switch_to_v2021() and check if a post’s layout is included in the current sitemap before moving further with other checks$layout->permalink with $layout->slug when figuring out if the “special” posts pass tests (e.g. imprint, privacy, home, or stories)Hide calls to action or sitemap pointers to ‘dead’ posts
Start filtering when adding posts to the sitemap or pointing to them in calls to action to make sure they don’t lead to useless pages (e.g. a page supposed to show Ventures when there are none to be shown).
Refactor the error context display to introduce a ‘notice’ level that doesn’t take over the full block, but instead shows a warning inside the block, used in Callout and CTA when pointing to either a not published page (after we’re done migrating) or post.
New
level of an error as a parameter in SIA_Publishing_Component_Handler_Abstract::handleError() for situations when we wanna show the block (e.g. a CTA) to editors, but still hide it because it shows irrelevant information (e.g. a link to a page that’s not published)SIA_Publishing_Component_Handler_Abstract::context() to SIA_Publishing_Public::preprocess_block_context() that takes a ‘message’ and a ‘level’ and either generates an Info box or Notice contextSIA_Publishing_Handler_PageSection->$callout error when it exists to the PageSecion context to be handled in preprocess_block_context()SIA_Publishing_Public::preprocess_block_context() don’t fully replace the block, but instead add a ‘Notice’ unit context to be handled in the block (e.g. in CTA or Callout) sitemap/associate_posts filter in SIA_Publishing_Sitemap before associating a post to a layoutshow_block/cta filter in SIA_Publishing_Handler_CTA::populate_target() and SIA_Publishing_Handler_Callout::populate_target() and when the result is not TRUE handle a ‘notice’ level errorFixes
categories context to an entity’s meta from SIA_Publishing_Entity_Handler_Abstract::categories() called by meta()categories in the Post meta from SIA_Publishing_Handler_Post::context()SIA_Team::$websiteIsRestricted property before generating the Country one-liner highlight context in SIA_Publishing_Handler_Organization::context()Add a distinct cap for creating pages
In order to allow it granularily, distinguish edit pages and create pages by adding a new permission
New
create_posts permission from edit_pages to create_pages from SIA_Publishing_Public::remap_create_pages_cap() hooked to initTrack Privacy Policy link traffic with custom campaigns
SIA_Publishing_Context::sitePrivacyLink()Finalize the CTA block conditions and API data sources
Prefill A&AP timeline fields with API data source and selectively show the CTA block or its lead generator based on the ‘application is open’ condition.
New
SIA_ACF_field_setting_dataSource::format_value() hooked to acf/load_value/type={$fieldTypeSlug} from SIA_ACF_field_setting_dataSource::register_field_setting()SIA_AAP::get_local() method that looks for the meta value and loads an AAP instance from SIA_ACF_field_BlockCondition::process_application_is_open() via process_block_condition() hooked to the block_condition filter in SIA_ACF_field_BlockCondition::__construct()block_condition from SIA_Publishing_Component_Handler_Abstract::populate_blockConditionFulfilled() and use it in the CTA blockImprovements
SIA_Website::validate_website()Enforce the display of the Welcome Panel and fixes
Fixes
SIA_Publishing_Context::siteImprintLink() by adding a paramenter to SIA_Publishing_Layout::__construct() to attempt to find a layout only from its stem and figure out the suffix on the fly (e.g. imprint on HQ, the $slug becomes imprint-international when the $findFromStem parameter is TRUE)SIA_Publishing_Layout::getPlacementSuffixes()TRUE for show_welcome_panel from SIA_Publishing_Admin::alter_user_metadata() hooked to ‘get_user_metadata’edit_posts to include Editor users from SIA_Publishing_Admin::acf_register_option_pages()Provide a lead generator and an AAP CTA target type
Add 3 more fields to the CTA block for a lead generator Mailchimp form that only appears when the block condition is not fulfilled.
Provide activity logs when the Simple History “initiator” is anonymous.
New
block_condition is not fulfilledSIA_Publishing_WP_CLI::deploy_v2021()SIA_Publishing_Layouts_Repository from a CTA coming after a CTA with opposing block_condition_valueImprovements
add_action( 'simple_history/loggers_user_can_read/can_read_single_logger', '__return_true', 10, 3 ); in SIA_Publishing_Public::send_website_network_activity()SIA_Ariel_Remote_Abstract::post_event() helperdeploy_v2021 WP CLI command and activity eventsFixes
SIA_Publishing_Sitemap::associate_posts() to prevent it from having an empty $flatPost relevant website activity logs to the Network Activity Airtable base
Hook into the Simple History logging mechanism and selective post and process log entries. For the ACF “Implmentation” options page add the posting handler to the existing function handling the options save
New
SIA_Publishing_Admin::send_website_network_activity() method that for specific loggers or message keys or post types (SIA_Publishing::$postTypesWithActivity), gets or processes (via the new process_simple_history_option_log_details and process_simple_history_post_log_details) enough content and calls the SIA_Ariel_Remote_Abstract::run( 'post_website_network_activity_to_airtable_webhook' ) after Simple History finishes logging and calls the ‘simple_history/log/inserted’ hooked in SIA_Publishing::define_public_hooks() SIA_Publishing::$postTypesWithActivity static property in SIA_Publishing_Public::process_post_types_with_activity() hooked to ‘init’SIA_Publishing_Layout::get_stencil_original() that looks for a post with its own slug in StencilSIA_Publishing_Admin::save_implementation_options() hooked to ‘acf/save_post’ post an update to Network Activity via SIA_Ariel_Remote_Abstract::run( 'post_website_network_activity_to_airtable_webhook' )partials/welcome-panel-local.php SIA_Publishing_Admin::display_dashboard_welcome_panel() method hooked to welcome_panel in SIA_Publishing::define_admin_hooks()SIA_Publishing_Layouts_Repository::get_layouts()Refactor the generation of team website content
Move all config blocks on team blogs into the Implementation settings page and lock the blocks in the block editor. Prefill Implementation settings with global values and show which field still has to be localized.
In order to not overwrite options, prefix all clone fields. Use “isLocalConfig” for option that are exclusive to the blog, not those who are overwritten.
New
SIA_Publishing_Config with too many changes to document.SIA_Publishing::$configGroupsMap viat the new in SIA_Publishing_Public::process_config_groups()SIA_Publishing_Block::getContextOptions() since config blocks are filled with either Implementation or Stencil settingswasOverwritten() since config blocks get their content from settings now in SIA_Publishing_Block::getContextOptions()Improvements
welcome-panel-local.phpSIA_Publishing_Block::localOptionId property that contains a prefixed option id and get it via the new SIA_Publishing_Block::getLocalOptionId()SIA_Publishing_Block::isConfig() by using the new SIA_Publishing::$configGroupsMap['clones'] array$imageData['title'] in SIA_Publishing_Twig::get_logo_context()Fixes
SIA_Publishing_Block::getDefaultValue() for either a local config, or an empty local configSIA_Publishing_Block::prepareFieldForEditing() and SIA_Publishing_Block::wasOverwritten() and SIA_Publishing_Block::getContextOptions()SIA_Publishing_Handler_Awards::populate() and format and pass the row to SIA_Publishing_Twig::get_logo_context()SIA_ACF_field_setting_dataSource::disable_non_editable_field() by changing their typesNew location condition for ACF groups
In order to not show migration field groups (e.g. “Redirection (v2021)”), add a new ACF group location labeled “Theme”
New
ACF_Location) extension: Theme (SIA_ACF_field_group_location_ActiveTheme) that offers all themes as options and matches the stylesheet with the active themeRecord per-block updates when updating a page
Refactor the block “overwritten” switch by going block by block when a post is updated and setting a post meta value for each block id, and then checking that value
New
SIA_Publishing_Admin::record_block_updates() hooked to wp_after_insert_post$localBlockId parameter when creating a SIA_Publishing_Block instance to be able to use its own $localBlockId property, when available, to check for overwrites$postId parameter to SIA_Publishing_Block::getContextOptions() to check if it was overwritten in that specific postSIA_Publishing_Block::wasOverwritten() look for a post metaSIA_Publishing_Public::preprocess_block_context()block_exists() method to SIA_Publishing_Blocks_Repository SIA_Publishing_Admin::prefill_cloned_field_value() to clone blocks and making sure we’re on a team blog, excluding InternationalFixes
getDefaultValue() when they haven’t been overwritten caused by checking when the page was updated, not the block itselftextarea in SIA_Publishing_Block::prepareFieldForEditing()Add the Feedback widget to the page context
New
SIA_Publishing_Context::feedbackWidget() called by SIA_Publishing_Context::siteFooter(), and showing the widget to logged in usersCountry Switcher handler added to Site Footer and triggered in Site Header
New
SIA_Publishing_Handler_CountrySwitcher)countrySwitcher into page context from SIA_Publishing_Context::siteFooter() calling the new SIA_Publishing_Context::countrySwitcher()is_roadblock property depending on isLandingPage() in page context, siteFooter and siteHeaderSIA_Publishing_Layouts_Repository::get_layouts()SIA_Publishing::define_public_hooks() from Parlament for filters that are not theme dependentSIA_Publishing_Block::instantiateHandler(), just like when building the context from SIA_Publishing_Context::__construct, which is not called while rendering Gutenberg blocksFixes
SIA_Publishing_Component_Handler_Abstract::handleError()SIA_Publishing_Component_Handler_AbstractNew Local organization component handler and fixes
New
SIA_Publishing_Handler_LocalOrganization)application-timeline and incubation-timeline registered in SIA_Publishing_Blocks_Repository::get_blocks_by_section() and fields set in SIA_Publishing_Handler_Timeline::populate() * TODO connected to maintainer giving the wrong team for Austria in SIA_Publishing_Layouts_Repository::get_layouts_for_website() Fixes
SIA_Publishing_Handler_LocalTeam)SIA_Publishing_Public::preprocess_block_context(), now showing an info box to users with high enough accessshandleError error messageSIA_Publishing_Admin::acf_register_option_pages()Expand Event entity and new Language ACF type
New
SIA_ACF_field_Language) that uses the core get_available_languages() and get_locale() methodsSIA_Publishing_Event) and include the new Event Details ACF group fields, trying to interface The Events CalendarSIA_Publishing_Handler_Event) , include in SIA_Publishing_Entity_Handler_Abstract::instantiateHandler() using the tribe_events post typeSIA_Publishing_Twig::get_genericField_context()constants.php calling SIA_Publishing_Event::set_event_focus_area_constants() and SIA_Publishing_Event::set_event_type_constants()Fixes
SIA_Publishing_Block::isEditableInBlockEditor()SIA_Publishing_Admin::generate_post_title()Showcase team member profiles outside of Play
Create a custom route on team websites that displays public information of Play profiles as if they come from the currenty website and open them in modals from the Team page.
New
team/profile/([a-z0-9-]+)/?$), custom rewrite tag (profile_post_name), and query var (profile_post_name) in SIA_Publishing_Public;SIA_Publishing_Public::maybe_switch_to_play_before_query() hooked to pre_get_posts and back so site after the query in SIA_Publishing_Public::switch_back() hooked to the_posts;SIA_Publishing_Handler_Profile::populate()) switch to Play before instantiating the SIA_Profile entity.Fixes
implement-sia-international) up in the sitemap to match alphabetical order in SIA_Publishing_Sitemap::inventory()SIA_Profile::occupation property instead of function in SIA_Publishing_Twig::get_indexCard_context()Maintenance update, mainly Breadcrumbs and pager fixes
Fixes
is_archive()) and blog (is_home()) breadcrumbs that showed first post’s title by not loading a global $post when not is_singular() and adding to the flat a ‘faux’ post object that takes it’s data from the archive in SIA_Publishing_Sitemap::get_breadcrumbs()\Timper\PostQuery::pagingation() in Component_With_Entities_Trait::pager()Improvements
articles-international and articles-host layout’s titles with the correct ‘Stories’ in SIA_Publishing_Layouts_Repository::get_layouts()New Board members block and fixed CTA forwarder options
For the special case of board members, which are sometimes team members, sometimes not, create a block that fetches profiles exclusively from Play and ignores the profile’s inactive status or if there is a user.
New
board-members) in SIA_Publishing_Blocks_Repository::get_blocks_by_section() added to the team-international layout in SIA_Publishing_Layouts_Repository::get_layouts() and handled by the new SIA_Publishing_Handler_BoardMembers handler that presets data source and number, and then extends SIA_Publishing_Handler_ProfilesblogType parameter in SIA_Publishing_Blocks_Repository::get_blocks_by_section used by Board members (board-members) that is checked in SIA_Publishing_Admin::allowed_block_types() and has 4 options team, headquarter, headquarter-and-microsites, and playSIA_ACF_field_group_location_BlogType ACF location condition ‘Blog type’p- prefix in SIA_Publishing_Context::bodyClass()Fixes
group_62ee66add482a, the corresponding ACF group) in SIA_ACF_field_Layout::render_field() and providing a newly added $license_id parameter to SIA_ACF_field_Layout::get_options() that, instead of getting layouts for website, gets them by license id.Adapt profile and organization links to current blog
When not on Play, organizations maybe use their website url and profiles have no URL
Finalize CLI switch to 2021
Set an option (switch_to_v2021_ran) when running and then ignore the --letsgo argument if the option is set.
Identify a couple more issues with pages that should not be unpublished, even though they are not v20.21 (e.g. Blog).
Solid CLI switch to 2021 tester
Break down all paths for existing pages and account for running it after the switch. When there are issues (layout without corresponding post), don’t even attempt the switch
Improvements
SIA_Publishing_WP_CLI::switch_to_v2021()) breaks down all existing pages in a single table;SIA_Publishing_Admin::post_is_v2021()Improve identifying v20.21 pages in the admin table
When version switch is not active and the default theme is 2021 (so after the switch), display a label showing which pages are v20.21 to prevent confusing them with older pages
New
SIA_Publishing_Admin::display_post_states to the display_post_states filter and show the v20.21 labelBug fixes
Finalize the Venture entity handler
Include related, generate a page lead when there’s a video. Also fix Ventures component handler
Display Testimonial authors from other blogs
And: adapt to ACF validation of title element
New
SIA_Publishing_Testimonial) has a new $authorProfileSourceBlog property based on the $authorField['key']}__blog_id post metaSIA_Publishing_Post_Types_Repository now allows ‘title’ for testimonialacf.js fixes the new ACF validation that requires the title element to not be empty by updating it as testimonial author and topic fields are changedAdd and finish the Impact Report landing page layout
New
global-impact-report-landing-page-international) in layouts repoFixes
Focused templates for thank you layouts
Improvements
SIA_Publishing_Context::isConfirmationPage() that looks for ‘thank’ or ‘thanks’ in the layout slugAllow Headings in every layout
Improvements
core/heading) for every layout from SIA_Publishing_Admin::allowed_block_types()Features in SIA_Publishing_Blocks_Repository::get_blocks_by_section()Breadcrumb improvements for 3rd and 4th tier
Improvements
SIA_Publishing_Sitemap::get_breadcrumbs() and post and job in SIA_Publishing_Sitemap::inventory()Features in SIA_Publishing_Blocks_Repository::get_blocks_by_section()Fixes
SIA_Publishing_Sitemap::get_breadcrumbs()New
New handlers for Team entity, Events and CTA Forwarder components
New
SIA_Publishing_Handler_CTAForwarder) SIA_ACF_field_InternationalCampaign) loaded via SIA_Publishing_Public::acf_register_custom_fields()SIA_Publishing_Handler_Team) displaying a teams postSIA_Publishing_Handler_Events) displaying event posts (WIP)$blockSlug) as a component to the Timeline component handler in order to style them differentlyFixes
SIA_Publishing_Handler_Timeline) has an image, and when not specify the text-only variantSIA_Publishing_Entity_Handler_Abstract) and prevent empty <p></p> exceprtsPageLead for landing pages, including dynamic Vision Statement replacement
layoutSlug key for SIA_Publishing_Context::context via the new SIA_Publishing_Context::layoutSlug(), then not setting the main navigation by checking in SIA_Publishing_Context::siteNavigation() the new SIA_Publishing_Context::isLandingPage() method which looks for the string ‘landing-page’ in the layout slugPageLead) heading in populate_text() with the Vision Statement by reusing the latter’s new heading() methodPageLead) context in populate()PageLead) heading in populate();New Awards handler using Features
New
Awards used by Awards & Recognition (awards-and-recognition) using the listing layout of the features groupNew Info Box handler
New
InfoBox with 3 variants + the defaultNew Brand Assets handler for photography and KPI partners block
New
BrandAssets loading the configuration from the Design System and showing photography for the brand-assets-photos blockSIA_Publishing_Blocks_Repository::get_blocks_by_section() placed in all Partners sections in SIA_Publishing_Layouts_Repository::get_layouts()Improvements
SIA_ACF_field_KPI::get_options()New Features handler used by Clusters and Responsibilities
New
Features set for national-responsibilities and service-clusters in SIA_Publishing_Blocks_Repository::get_blocks_by_section()New Page Section, Mission Statement and Vision Statement handlers
When a page section component is rendered, it’s one of three types: image (default), video, or KPIs. KPIs (as of right now) are the first KPI block on the page pointed at by the Page Section component.
New
PageSection, MissionStatement, and VisionStatementSIA_Publishing_Theme_Repository::get_available_icons() SIA_Publishing_Block::instantiate() used primarily by PageSection::figures() and reused in SIA_Publishing_Public::preprocess_block_context()New Search Results and Banner handlers
When building context, separate between search (listing results, showing a summary and a search form), 404 (composed of a focused screen banner), and all other contexts.
New
SIA_Publishing_Handler_SearchResults) listing entities when the context is_search() using the ‘support’ theme;SIA_Publishing_Handler_Banner) showing the error message whe nthe context is_404() using the ‘awareness’ theme;SIA_Publishing_Context::bodyClass().New Venture and Ventures handlers
The Ventures component fetches project posts from the entire network, sorted by year descending and name ascending, and is very inefficient and lacks filters.
Some entity fields that are used almost universally, like title, excerpt, thumbnailUrl, and permalink are now entity class properties set in populate().
Financial partnerships is back to being a layout
Improvements
SIA_Publishing_Sitemap::inventory() and SIA_Publishing_Layouts_Repository::get_layouts().Organization refactoring and more block handlers
Improvements
SIA_Publishing_Handler_Organizations by SIA_Publishing_Handler_Partners and SIA_Publishing_Handler_Licensees by using class properties;SIA_Publishing_Handler_Organizations is not used for Licensee, handler error when partnership_type is missing;FormattedHtml partnership blocks in SIA_Publishing_Blocks_Repository::get_blocks_by_section().New Licensee and Organization handlers
New
SIA_Publishing_Handler_Organizations);SIA_Publishing_Handler_Organization);SIA_Publishing_Handler_Licensees) used by the sia-hosts block, extending the Organizations handler and pre-filling the posts data key with licensed organizations pulled from Play.Improvements
SIA_Publishing_Handler_Organizations via SIA_Publishing_Handler_Partners.Fixes
SIA_Publishing_Twig::svg() and SIA_Publishing_Twig::asset() Twig filters.Testimonial admin improvements and fixes
Fixes
SIA_Publishing_Admin::generate_post_title()) reference to the post that needs updating; SIA_Publishing_Testimonial class properties (@var instead of @param).Improvements
SIA_Profile in constructor instead of its ID and replace references; SIA_Publishing_Admin::display_custom_post_columns_testimonial() and SIA_Publishing_Admin::set_custom_post_columns_testimonial();SIA_Publishing_Testimonial::enumerate_topics().Handler for Program outline
New
'program-outline' block slug as a variant of Timeline;FormattedHtml blocks in SIA_Publishing_Blocks_Repository::get_blocks_by_section().Improvements
SIA_Publishing_Handler_FormattedHtml when there is no content.SIA_Publishing_Handler_KPIs when there is no data.Handler for KPIs
When the KPIs component handler receives data from its block, get either the local or, when empty, the Stencil value of a KPI.
New
SIA_Publishing_Handler_KPIs) used by “KPI …” blocks and using the Figures (figures.twig) component;SIA_ACF_field_KPI::get_figure()) that takes the field’s value (a select field’s option name) and returns the KPI value from either Implementation or Stencil;SIA_Publishing_Block::getContextOptions();impact-international layout in SIA_Publishing_Layouts_Repository::get_layout();Complete Job templates
New
SIA_Publishing_Handler_Job) used by “Jobs”;SIA_Publishing_Handler_Jobx) used by “Jobs” blocks;SIA_Publishing_Context::requireComponentHandlers().Fixes
job support from SIA_Publishing_Post_Types_Repository::get_post_types()`.Improve Job admin UI
Improvements
SIA_Publishing_Admin::set_custom_post_columns_job() and SIA_Publishing_Admin::display_custom_post_columns_job() hooked to manage_job_posts_columns and manage_job_posts_custom_column respectively.New Local team handler and complete Profile templates
New
SIA_Publishing_Handler_LocalTeam) component handler used by the “Local team” (local-team) block;$workflowInfo property in SIA_Publishing_Component_Handler_Abstract and matching populate method;bio, about and socialLinks in Profile (SIA_Publishing_Handler_Profile) entity populate() and context();SIA_Publishing_Twig::get_socialLinks_context() that takes Organization or Profile $socialLinks and reuse for the SIA_Publishing_Context::siteFollow();Component_With_Entities_Trait::$dataSource property universal;team-international layout in SIA_Publishing_Layouts_Repository::get_layout()Handlers for Profile, Profiles, Testimonial, Testimonials, and Get in touch
New
get-in-touch) custom block in SIA_Publishing_Blocks_Repository::get_blocks_by_section();SIA_Publishing_Handler_GetInTouch) used by the “Get in touch” blocks;SIA_Publishing_Layouts_Repository::get_layouts();SIA_Publishing_Handler_Profile) used by “Profiles” and “Get in touch” blocks;SIA_Publishing_Handler_Profiles) used by “Profiles” blocks;SIA_Publishing_Handler_Testimonial) used by “Testimonials” blocks;SIA_Publishing_Handler_Testimonials) used by “Testimonials” blocks;international-alumni-community-intro, local-alumni-community-intro, vp-international-alumni-community, vp-local-alumni-community in SIA_Publishing_Blocks_Repository::get_blocks_by_section();testimonials, “Partners” for partners, “Profiles” for profiles in SIA_Publishing_Blocks_Repository::get_blocks_by_section().Fixes
Handler for Press Mentions
New
SIA_Publishing_Handler_PressMentions) used by the “Press” blocks;$context key is set from SIA_Publishing_Public::preprocess_block_context().Improvements
SIA_Publishing_Entity_Handler_Abstract::thumbnail() to build the image context and remove populate_image() from both Post and Organizations;meta() context builder to SIA_Publishing_Entity_Handler_Abstract::meta() and call it by default from SIA_Publishing_Entity_Handler_Abstract::context().Handler for Timeline and on-page errors for editors
New
SIA_Publishing_Handler_Timeline) used by the “… history” blocks;$context by setting the new SIA_Publishing_Component_Handler_Abstract::$error property from SIA_Publishing_Component_Handler_Abstract::handlerErrors();$context key is set from SIA_Publishing_Public::preprocess_block_context().Improvements
SIA_Publishing_Component_Handler_Abstract::handlerErrors() to not halt the script execution by default.Fixes
clean_class Twig filter that uses sanitize_title as callback via SIA_Publishing_Twig::addFilters().Handlers for Revolving Text and Impact Fields blocks
New
SIA_Publishing_Handler_RevolvingText) used by the “Vision Statement” block;SIA_Publishing_Handler_ImpactFieldsBrief) used by the “Impact Fields” block.Fixes
clean_class Twig filter that uses sanitize_title as callback via SIA_Publishing_Twig::addFilters().WP CLI script that sets excerpts based on a CSV
Run wp publishing set-excerpts --site=57 [--dry-run] to create excerpts for all posts with layouts from the repo.
New
SIA_Publishing_WP_CLI::set_excerpts() handler that takes excerpts from the /includes/excerpts.scv file and updates the database directly for posts found with SIA_Publishing_Layout::getPostIdByLayoutSlug.New Callout, Entities component handlers and overall more stable handlers
New
SIA_Publishing_Context based on is_singular and generate the entities context;SIA_Publishing_WP_CLI::show_sitemap().Improvements
Fixes
SIA_Publishing_Blocks_Repository::get_blocks_by_section() and the ACF field group.Working Articles component in use in Post related articles
New
relatedArticles context key to the Post entity handler from SIA_Publishing_Handler_Post::context();image context key to the Post entity handler from SIA_Publishing_Handler_Post::context() using the thumbnail() abstract;SIA_Publishing_Entity_Handler_Abstract::thumbnail();Fixes
url parameter to the heading context when not in ‘full’ view_mode from SIA_Publishing_Entity_Handler_Abstract::heading().Improve Press mention admin UX
Also first appearance of SIA_Publishing_Press_Mention
Improve Testimonial admin UX
Fixes
SIA_Publishing_Admin::generate_post_title() hooked to acf/save_post;Fix missing component handlers boilerplate files
The block handler instantiate method was out of sync with the context class’s and the page lead didn’t have access to a trait in the block editor where the Twig context is not used.
Fixes
SIA_Publishing_Context::maybeRequireComponentBoilerplate() to load abstracts, interfaces, and traits and use it in SIA_Publishing_Block::instantiateHandler() and SIA_Publishing_Context::requireComponentHandlers().__construct() from existing component handlers to allow the SIA_Publishing_Component_Handler_Abstract to run it’s guard clauses.Maintenance update and dysfunctional new Articles component handler
New
SIA_Publishing_Handler_Partners::$dataSource property that switches blog in SIA_Publishing_Handler_Partners::context() and use it in SIA_Publishing_Context::strategicPartners();content context key depending on $view_mode from SIA_Publishing_Entity_Handler_Abstract::context() by calling the new content() method that loads either the content of the excerpt;heading context key by default by adding it to SIA_Publishing_Entity_Handler_Abstract and calling it from context();SIA_Publishing_Handler_Post for meta keys in order to allow separation in view modes that don’t populate the pageLead key; SIA_Publishing_Handler_Articles. It’s dysfunctional as all articles had the region’s heading;tax_query key to the $queryArgs array when fetching Component_With_Entities_Trait::posts. Fixes
posts_per_page by checking if data['number'] is set in Component_With_Entities_Trait::populate_entities();New Partners component with logo variant
Introduce a component handler trait for filling out the collection key of an entities derivative and prototype with partners in the site footer. In order to display partners, create the organizations post type hander with the entity type organization to match the SDS.
New
Component_With_Entities_Trait that builds the query, including a meta_query for is_featured, creates the $posts query and executes the query via \Timber\Timber::get_posts(); Component_With_Heading_And_Lead_Trait;SIA_Publishing_Handler_Organizations building its own partnership_type meta_query via SIA_Publishing_Handler_Partners::data_meta_query() that is then processed and possibly enhanced in Component_With_Entities_Trait::posts();organizations post type in SIA_Publishing_Handler_Organizations;SIA_Publishing_Context::requirePostHandlers().Fixes
populateDisplay became populate_display in SIA_Publishing_Component_Handler_Interface;viewMode became view_mode in SIA_Publishing_Entity_Handler_Abstract;SIA_Publishing_Entity_Handler_Abstract::context() no longer assumes entity->post_type is the $entityType;instantiateHandler() that instantiates an entity handler moved out of SIA_Publishing_Context to a static SIA_Publishing_Entity_Handler_Abstract static in order to be called also from Component_With_Entities_Trait.Complete Call to Action handler
Process the contact form, page, category and article when called from the ACF block callback.
Start filling up the Site Footer global context with signup, follow, and legal details
New
siteFooter context key, for now with signupOrFollow and copyright details;SIA_Publishing_Context::sitePrivacyLink() to generate the link to the site’s or international privacy link;SIA_Website::$maintainer stored in the global $sia_website variable in SIA_Publishing_Context::siteFollow();SIA_Publishing_Context::siteNewsletter();require from individual block handler components to SIA_Publishing_Context::requireComponentHandlers() since they are now used by the global context;body_class from the new SIA_Publishing_Context::bodyClass().Improvements
signupOrFollow context key out of base.twig since it’s now rendered by the site-footer region;CTA to the new sitePrivacyLink();path() to the ComponentHandlerInterface for better intellisense.New CTA component for sharing and signup added to Post handler
Additionally, create a new class to act as an interface for Jetpack and set default enabled modules (‘sharedaddy’) and services (Facebook, Twitter, Linkedin and Email). Hide the sharing links by default and load them in the entity’s context.
New
SIA_Publishing_Handler_CTA) component handler to process context for either the Call to Action ACF blocks or direct instantiation;SIA_Publishing_Sharing that filters main Jetpack calls for styling, enabling modules and services;includes/class-sia-publishing-sharing.php from SIA_Publishing::load_dependencies();SIA_Publishing_Sharing service when instantiating SIA_Publishing_Public in order to have it hook to its own filters and actions later via its own define_hooks() when called from SIA_Publishing::define_public_hooks();SIA_Publishing_Entity_Handler_Abstract::$sharingCTA for entities that have a post type defined in the SIA_Publishing_Sharing::POST_TYPES_WITH_SHARING constant;SIA_Publishing_Entity_Handler_Abstract::$sharingCTA from SIA_Publishing_Entity_Handler_Abstract::sharingCTA() by loading a ‘sharing’ type CTA component handler;SIA_Publishing_Handler_Post::$signupCTA from populate() with a ‘newsletter’ type CTA component handler and add it to context().Fixes
SIA_ACF_field_ImpactFieldTheme::$name value to say ‘theme’ instead of ‘impact_hub_theme’.Use the new application config constants pointing to the SDS
Complete the Page Lead component
Display all meta details in the Post entity handler by filling out the meta context and passing it on to the ‘pageLead’ component. Process and format index-card and date context arrays from the twig extender.
New
SIA_Publishing_Twig::get_indexCard_context() that takes a Post, Profile, or array as arguments; SIA_Publishing_Twig::get_date_context() that takes a timestamp as an argument;SIA_Publishing_Handler_Post::byline() context provider for post date and author;SIA_Publishing_Handler_Post::tags() context provider for post tags;SIA_Publishing_Handler_Post::$meta property set in SIA_Publishing_Handler_Post::populate() to add meta details (tags, date, byline) by calling the new SIA_Publishing_Handler_Post::tags() and SIA_Publishing_Handler_Post::byline() and adding the outcome to exiting $context['context']['pageLead'].Improvements
SIA_Publishing_Public::add_image_size() (moved out of the SIA Play plugin).Fixes
SIA_Publishing_Handler_PageLead::populate_meta() call, as the default component handler does not provide meta possibilities.New handlers for custom blocks and all post types
When a custom ACF block is rendered, pass along data to specific block handlers depending on type.
At runtime, the SIA_Publishing_Public::preprocess_block_context() is called for blocks registered via SIA_Publishing_Public::create_block_editor_block_types() hooked to acf/init. It then delegates the Twig context creation to specific, per block, component handlers. Handlers are implementations of the new SIA_Publishing_Component_Handler_Interface and extensions of the new SIA_Publishing_Component_Handler_Abstract. The handler’s id is added as a key to the block’s array in SIA_Publishing_Blocks_Repository::get_blocks_by_section().
When the Timber context is created, extend it with per-post handlers to build their specific context.
At runtime, the SIA_Publishing_Context is instantiated via SIA_Publishing_Public::context() hooked to timber/context. It then expands the context by instantiating a per post type SIA_Publishing_Entity_Handler_Interface implementation that extends the SIA_Publishing_Entity_Handler_Abstract to provide specific context keys.
New
SIA_Publishing_Block::instantiateHandler() to find existing SIA_Publishing_Component_Handler_Interface implementations matching the new SIA_Publishing_Block::$handlerId variable loaded from the block repository;SIA_Publishing_Block::getContextOptions() method to instantiate block component handlers;SIA_Publishing_Public::preprocess_block_context() custom ACF block callback to start rendering twig templates by first calling thew new SIA_Publishing_Block::getContextOptions() to see if a context handler exists, and then calling the \Timber\Timber::render() to render the template; sia-publishing/includes/block-handlers folder;SIA_Publishing_Component_Handler_Interface to use populate() to create specific keys for the main context, and context() to provide the complete context to Timber and then twig templates;SIA_Publishing_Component_Handler_Abstract to ensure the correct instantiation and provide universal variables for all handlers;page-lead component in SIA_Publishing_Handler_PageLead;SIA_Publishing_Context call the new SIA_Publishing_Context::instantiateHandler() that finds the post type specific implementation of SIA_Publishing_Entity_Handler_Interface;sia-publishing/includes/post-handlers folder;SIA_Publishing_Entity_Handler_Interface to use initialize() for loading the post variable, populate() to create specific keys for the main context, and context() to provide the complete context to Timber and then twig templates;SIA_Publishing_Entity_Handler_Abstract to fill the universal context keys and initialize all handlers;post in SIA_Publishing_Handler_Post with no specific keys;page post type hander in SIA_Publishing_Handler_Page with no specific keys;pageLead context to all post type handlers except for page via the SIA_Publishing_Entity_Handler_Abstract::pageLead() method called by SIA_Publishing_Entity_Handler_Abstract::populate();index.twig via the get_entity_template() filter by using the context created by SIA_Publishing_Context;SIA_Publishing_Twig::get_component_path() which basically replicates SIA_Publishing_Twig::get_template();SIA_Publishing_Sitemap::get_breadcrumbs(), right now only for posts, called from PageLead::populate();SIA_Publishing_Public::add_image_size() hooked to after_setup_theme and name them via SIA_Publishing_Public::name_image_sizes() hooked to image_size_names_choose;functions.php.Improvements
twig extension HelloNico\Twig\DumpExtension() for debugging when WP_DEBUG is true by adding the new SIA_Publishing_Twig::addExtensions() method called from SIA_Publishing_Twig::__construct() intantiated from SIA_Publishing_Public::twig() hooked to timber/twig;group_61361d2c976d3);dump() from base.twig.Fixes
@brand twig namespace from SIA_Publishing_Public::register_twig_template_paths().New layouts and blocks for social media campaign landing pages
New
application-landing-page-international), “SM Community Voting Landing Page” (community-voting-landing-page-international), “SM Discovery Landing Page” (discovery-landing-page-international), and “SM Landing Page” (social-impact-award-landing-page-international) to SIA_Publishing_Layouts_Repository::get_layouts();SIA_Publishing_Sitemap::inventory() as Tier 3, with no parents;community-voting-landing-page-host to SIA_Publishing_Layouts_Repository::get_layouts() containing only two blocks: page-lead and community-voting;community-voting-landing-page-host to SIA_Publishing_Sitemap::inventory() as Tier 3 with “Program” as it’s parent;financial-partnerships-international) into 2 layouts: “Corporate partners” (corporates-international) and “Philanthropic partnerships” (foundations-international);SIA_Publishing_Blocks_Repository::get_blocks_by_section() to include in the landing pages: “Global events agenda” (global-events-agenda), “Call to Action Forwarder” (cta-forwarder), and “Community Voting” (community-voting);SIA_ACF_field_EventTopic) getting Glossary topics via SIA_Glossary::get_event_topics(); SIA_Publishing_Public::acf_register_custom_fields() hooked to acf/include_field_types;SIA_Publishing_Event used to get Event topic constants;SIA_Publishing_Event::set_event_topic_constants() called from constants.php;SIA_Publishing_Testimonial::set_testimonial_topic_constants() to include Application, Community Voting. Improvements
SIA_Publishing_WP_CLI::duplicateContactForms() that existing forms are skipped.Fixes
SIA_Publishing_Block::isConfig().New yearly KPIs and KPIs Community Voting block
kpis-community-voting block to the block repository in SIA_Publishing_Blocks_Repository::get_blocks_by_section();group_62ed5a1bbf589) ACF field group;group_5fccea2a1c2b3) ACF field group.Provide a [teasers] shortcode
sia_publishing__shortcode__get_teasers() from lib/shortcodes/_teasers.php hooked to init via SIA_Publishing_Public::register_shortcodes() and process [teasers post_type='post' post__not_in='25' posts_per_page='3'].New blocks for “Program timeline” (in “Program”) and “Local team” (in all “Team” layouts)
SIA_Publishing_Blocks_Repository::get_blocks_by_section();SIA_Publishing_Layouts_Repository::get_layouts();SIA_Publishing_Layouts_Repository::get_layouts().Move the ‘list-websites’ WP CLI subcommand out of Publishing into
SIA_Publishing_WP_CLI::list_websites() subcommand to SIA_Deployment_WP_CLI::list_websites()SIA_Publishing_Contact_Form_Repository::get_contact_forms()Remove Cookie Notice dashboard widget via SIA_Publishing_Admin::remove_dashboard_noise() hooked to ‘wp_dashboard_setup’
Provide context to Twig/Timber templates
SIA_Publishing_Twig hooked to the timber/twig filter in SIA_Publishing::defined_public_hooks();SIA_Publishing_Context hooked to the timber/context filter in SIA_Publishing::defined_public_hooks();SIA_Publishing_Public::register_twig_template_paths() hooked to timber/loader/loader in SIA_Publishing::defined_public_hooks()Display a post-context navigation on Stencil
SIA_Publishing_Sitemap::initialize_from_post() static called;team and active parameters to the SIA_Publishing_WP_CLI::list_websites() WP CLI command;SIA_Publishing_WP_CLI::list_websites() to better spot inactive websites.Finish the deployment function for websites by cloning layouts them when not on Stencil or the layout is blog specific
SIA_Publishing_Sitemap instances that are specific to a website’s license or ID via the new static SIA_Publishing_Sitemap::initialize_from_website();SIA_Publishing_Sitemap::build_menu() method to build an array of a website’s 2 level navigation;SIA_Publishing_Sitemap::$flat property called from __construct(), include instantiated layouts via SIA_Publishing_Sitemap::associate_layouts() and, when they exist, posts via SIA_Publishing_Sitemap::associate_posts(); SIA_Publishing_Layout::applyTo();SIA_Publishing_Layout::clonePostContent() from SIA_Publishing_Layout::applyTo();$excerpt property to SIA_Publishing_Layout and use it when cloning a post;SIA_Publishing_Layout::isBlogSpecific() method;SIA_Publishing_Sitemap::build_menu(), called SIA_Publishing_WP_CLI::show_navigation()SIA_Publishing_WP_CLI::list_websites()SIA_Publishing_WP_CLI::validate_sitemap();SIA_Publishing_WP_CLI::show_sitemap() and SIA_Publishing_WP_CLI::addSitemapBranch() that takes the sitemap as a paramenter;SIA_Publishing_Layouts_Repository::get_layouts();SIA_Publishing_Layouts_Repository::get_layouts();class-sia-publishing-wp-cli.php functions naming convention uses “_” for exposed commands, and camelCase for private functions;Duplicate all repository Contact Forms from Stencil before deploying v20.21
SIA_Publishing_Contact_Form_Repository class that:SIA_Publishing_Contact_Form_Repository::get_contact_forms() SIA_Publishing_Contact_Form_Repository::get_source_forms_from_stencil()SIA_Publishing_WP_CLI::duplicate_contact_forms()SIA_Publishing_WP_CLI::duplicate_contact_forms() from the SIA_Publishing_WP_CLI::deploy_v2021() command functionPrevent most roles from deleting v20.21 pages
SIA_Publishing_Admin::page_row_actions() hooked to bulk_actions-edit-page;SIA_Publishing_Admin::page_bulk_actions() hooked to page_row_actions;Register every v20.21 page’s template as Block template
e6d6cd43 New: Limit blocks that are allowed on pages with a SIA layout
0b98b253 New: Create CLI commands to list and validate layouts
0330cea3 New: Register every page’s template as Block template
4409598b New: Add the fallback data source to Block
9f3a8aa9 New: New block for Photo Brand Assets component
849c5778 New: Add the VP Hosting setting and field group
a9dc2f07 New: Component blocks for branding assets (color, CI, type)
e1c1218f New: Add default for core/heading block
189456ec New: Process core blocks added to layouts repository
8f0ceff7 New: Replace key of Contact Form ACF field with form name (post slug)
a21e307d New: Add Testimonial and Job classes to declar Testimonial topic constants
50e8aebd New: Add Local Organization and Info Box block to blocks repository
da87937f New: Add an “Info Box” block with heading and content
e90ae9e0 New: Add a description to CTA contact form field
59b1d406 Fix: Incorrect ‘type’ parameter for form CTAs in the layout repository
a9ce8497 Fix: Layout block arrays are associative and overload first identically named blocks
8c8892c7 Fix: Standardize naming of intro and teaser blocks in the repository, remove Values, rename alumni community blocks
339512de Fix: Add Excerpt support for pages
63003273 Fix: Don’t show the Implementation options page for International blog
fde56113 Fix: Rename Service Clusters to fit Strategy base
7f2a3dba Fix: Add Heading, Lead, and Number fields to collection field groups
2b2a547f Fix: Declare the $since prop for Block class
0352d197 Fix: Articles block is missing the number of articles
563193b6 Fix: Using is_null for meta gives leads to false negatives for existing page layouts
41a4ae62 Fix: Blocks for Financial partners and Program outline missing from repository
Manage v20.21 staging of pages on Stencil and blogs with specific layouts via WP CLI scripts
--network as parameters;SIA_Publishing_Layout::applyTo();SIA_Publishing_Layout::getPostIds();SIA_Publishing_Layouts_Repository::get_layouts_for_website() static method taking a SIA_Website argument;SIA_Publishing_Admin::display_layout_in_admin_page() hooked to ‘post_row_actions’ and ‘page_row_actions’;SIA_Publishing_Layouts_Repository::get_layouts();SIA_Publishing_Block::getGutenbergMarkup() has a missing comma in the generated JSON;get_post_meta() and update_post_meta() for a page’s layout; SIA_Publishing_Block::getACFChildrenFields();SIA_ACF_field_Layout options to those available to the current website by using the new SIA_Publishing_Layouts_Repository::get_layouts_for_current_website() usign the method above Move and make reusable admin components
Improve UX of custom post types editor and fix admin menu “Articles” issues
SIA_Publishing_Admin::simplify_mce_buttons() hooked to mce_buttons filter;SIA_Publishing_Admin::rename_post_admin_menu_label() hooked to admin_menuedit_posts permission in SIA_Publishing_Admin by replacing it with the SIA_Publishing::EDITOR_PERMISSION constant (read_private_posts)DOING_AJAX in SIA_Publishing_Admin::maybe_sync_acf()SIA_Publishing_Admin::maybe_sync_acf()New SIA_ACF_field_group_location_BlogType field group location to filter field groups based on the website shown with 2 options: team website or Play (the only one with team management groups)
SIA_Publishing_Public::register_field_group_location_types() hooed to acf/init Include “Broken Link Checker” plugin’s dashboard widget in SIA_Publishing_Admin::remove_dashboard_noise()
Update dashboard noise cleanup by hooking SIA_Publishing_Admin::remove_dashboard_noise() to wp_dashboard_setup to come after Rank Math and include WP Mail SMTP
Display layout placement in Pages admin page, and filtered out unfit pages
SIA_Publishing_Admin::display_page_placement() to display_post_states;SIA_Publishing_layout::getPlacementLabel(); _template_layout filled in Pages admin page that show either all pages in “Stencil” or team blogs for super admin, or only available pages in team blogs by hooking SIA_Publishing_Admin::modify_pages_query() to pre_get_posts;SIA_Publishing_Blocks_Repository::get_blocks_by_section();SIA_Publishing_Layouts_Repository::get_layouts();SIA_Publishing_Layouts_Repository::get_layouts_by_blog_id() and SIA_Publishing_Layouts_Repository::get_layouts_by_license_id methods respectively;SIA_Publishing::ACF_LAYOUT_FIELD_NAME constant and replaced all direct references to ‘_template_layout’;SIA_Publishing::REVIEW_PERMISSION to manage_sites and grant it to Communications Coordinator role via the user_roles.json option of Deployment;sia-version-switch-admin.css and new selectors for layout placement (license_id or blog_id).Prefill editor blocks with config values and provide external data sources for config fields.
SIA_Publishing_Block class to manage editor blocks that are clones of field groups of Stencil of Implementation option pages;SIA_Publishing_Layout_Repository class to hold all predefined layouts and their list of blocks;SIA_Publishing_Layout class to apply predefined layouts to pages when they are registered via the layout repository;SIA_Publishing_Admin::prefill_cloned_field_value() to acf/pre_render_fields;SIA_ACF_field_setting_dataSource) for fields that are part of the SIA Stencil group.SIA_ACF_field_KPI) and disable the field when it’s locked from the SIA Stencil group;SIA_Publishing_Config) to provide values to config fields;SIA_Publishing::define_admin_hooks() when Version Switch is not active on websites that are neither team websites nor Stencil (e.g. Summit);SIA_Publishing::ACF_OPTION_PAGE_SLUGS array constant to hold option page slugs;SIA_Publishing_Admin::block_categories();SIA_Publishing_Admin::customize_acf_wysiwyg_field_toolbars() to acf/fields/wysiwyg/toolbars;SIA_Publishing_Block::isEditableInBlockEditor()) while executing SIA_Publishing_Admin::prefill_cloned_field_value() hooked to the acf/pre_render_fields filter;SIA_Publishing_Admin::prefill_cloned_field_value(), check whether a block was already overwritten in SIA_Publishing_Block::wasOverwritten() by comparing the page create and modified times.Serve “post” post_type with the “/article/“ permalink prefix via generate_rewrite_rules action and post_link filter
New SIA ACF fields for Layout and Block Condition
Add all SIA KPIs to the ACF KPI field
Add custom fields for SIA business domain
Change the slug, name, and field label of testimonial theme into Testimonial topic
Fix incompatibility with RankMath hiding the SEO checklist
Replace default logo URL on login page with home()
Exclude Glossary terms from Rank Math
Expand Job, generate Testimonial title, cleaner meta box UI
Introduce Jobs, Press mentions, and Testimonials, their ACF groups, and taxonomy
Move ACF management to Stencil
Add a Quick Search to the dashboard (Relevanssi admin search hack)
Remove useless Dashboard widgets and enforce its layout
Fallback for the SIA options page and ACF group sync
Simplifies the editor interface.