SIA Publishing manages the editorial and publishing layer of the Social Impact Award website. It covers the content types, layouts, and distribution workflows that editors use to produce the site’s public-facing material — from news articles and event listings to press mentions, resources, and testimonials.
The plugin is built to serve a distributed team: country programme managers publish their own content through a shared editorial workflow, and the plugin ensures consistent formatting and presentation regardless of which site the content was created on.
Publishing adds post types for articles, events, jobs, press mentions, resources, testimonials, and venues. Each type carries its own set of fields, validation rules, and admin interfaces, and is excluded or included in sitemaps according to editorial needs.
A block-based layout engine lets editors compose pages from reusable components. Blocks can be nested, themed, and filled with content from any registered post type. The system uses Twig templates for rendering, keeping presentation logic out of the database.
A repository of contact form configurations is managed centrally and shared across sites. Forms are tied to specific pages or content types and can trigger notifications, record submissions, and forward data to Airtable.
Publishing exposes a REST API used by other plugins and the theme to retrieve content. It also manages social sharing metadata and integration with Jetpack’s sharing tools, ensuring articles carry correct Open Graph and Twitter card markup.
Content edits — publishing, updating, and removing entries — are forwarded to the Website Network Activity Airtable base. This gives the team a record of editorial activity across all country sites without needing to query each one individually.
SIA_Publishing_Public::send_website_network_activity() is hooked to simple_history/log/inserted at priority 50. It receives every event Simple History logs and decides whether and how to forward it.
Logger filtering — only these loggers are processed; all others are silently ignored:
SimplePostLogger — post type must be in SIA_Publishing::$postTypesWithActivity (job, page, post, press-mention, testimonial, tribe_events, resource; plus profile, organizations, and teams on non-Play sites). WP-CLI-initiated events are skipped.SimpleCategoriesLogger — all taxonomy term events (created, edited, deleted) unless the taxonomy is in the skip list (Polylang translation taxonomies).SimpleOptionsLogger — all option saves except a set of noisy internal options (cron locks, Tribe timestamps, mail counters).SimpleUserLogger — login and logout events only; profile updates and user creation are skipped.SimpleMenuLogger, SimplePluginLogger, SimpleThemeLogger — all events forwarded as-is.Operation (op) — derived from the Simple History _message_key via SIA_Ariel_Activity_Repository::get_op_from_message_key(): post_created → create, post_updated / edited_term → update, post_deleted / post_trashed / deleted_term → delete. Set to NULL for loggers that do not map to a CRUD operation.
Payload fields — assembled and forwarded via SIA_Ariel_Activity_Repository::post_event():
| Field | Source |
|---|---|
blog_id |
get_current_blog_id() — added by the webhook method for all callers |
user_email |
$context['_user_email'] or $data['initiator'] |
website |
get_blog_option($blogId, 'blogname') |
service |
'SIA Play' on Play; 'SIA Marketing Website' otherwise |
event |
Plain-text log row from Simple History |
details |
Rendered log row details; post diffs processed by process_simple_history_post_log_details(); option diffs by process_simple_history_option_log_details() |
type |
_message_key converted to title case |
level |
Simple History log level, title-cased |
op |
create, update, or delete — entity events only; NULL otherwise |
entityType |
Post type (SimplePostLogger), taxonomy slug (SimpleCategoriesLogger), or 'user' (SimpleUserLogger) |
entityId |
Post ID, term ID, or user ID |
slug |
post_name (posts) or term slug; empty for other loggers |
entityTitle |
post_title (posts) or term name; empty for other loggers |
post_status |
Current post status via get_post_status(); empty for term and other events |
post_date |
Post creation date; empty for term and other events |
post_modified |
Post last-modified date; empty for term and other events |
category_id |
Comma-separated category term IDs via wp_get_post_terms(); empty when the post has none or for non-post events |
parent |
Integer parent term ID for term events; empty for post and other events |
show_in_archive |
The term was marked by an editor as show in archive — glossary_term posts only |
is_event_topic |
The term was marked by an editor as event topic — glossary_term posts only |
is_testimonial_topic |
The term was marked by an editor as testimonial topic — glossary_term posts only |
is_partnership_type |
The term was marked by an editor as partnership type — glossary_term posts only |
is_community_role |
The term was marked by an editor as community role — glossary_term posts only |
is_SIA_team_member_role |
The term was marked by an editor as SIA team member role — glossary_term posts only |
is_SIA_program |
The term was marked by an editor as SIA program — glossary_term posts only |