{"id":360173,"date":"2026-08-31T15:44:48","date_gmt":"2026-08-31T15:44:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/gazettebuilder\/"},"modified":"2026-08-31T15:44:32","modified_gmt":"2026-08-31T15:44:32","slug":"gazettebuilder","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/gazettebuilder\/","author":23556519,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"7.1","requires_php":"8.3","requires_plugins":null,"header_name":"GazetteBuilder","header_author":"Robert J Becraft","header_description":"GazetteBuilder is a WordPress worldbuilding support plugin for creating, importing, organizing, cross-referencing, and presenting interconnected setting material.","assets_banners_color":"fcf9f3","last_updated":"2026-08-31 15:44:32","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/metaphaze.com\/gazettebuilder\/support\/","header_plugin_uri":"https:\/\/metaphaze.com\/gazettebuilder\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":41,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"robertjbecraft","date":"2026-08-31 15:44:32","revision":3674585}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3674599,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3674599,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3674599,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3674599,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3674599,"resolution":"1","location":"assets","locale":"","width":761,"height":641},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3674599,"resolution":"10","location":"assets","locale":"","width":633,"height":599},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3674599,"resolution":"11","location":"assets","locale":"","width":1473,"height":605},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3674599,"resolution":"12","location":"assets","locale":"","width":1012,"height":602},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3674599,"resolution":"13","location":"assets","locale":"","width":556,"height":598},"screenshot-14.png":{"filename":"screenshot-14.png","revision":3674599,"resolution":"14","location":"assets","locale":"","width":1440,"height":602},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3674599,"resolution":"2","location":"assets","locale":"","width":1473,"height":847},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3674599,"resolution":"3","location":"assets","locale":"","width":1348,"height":1113},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3674599,"resolution":"4","location":"assets","locale":"","width":1473,"height":553},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3674599,"resolution":"5","location":"assets","locale":"","width":1473,"height":639},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3674599,"resolution":"6","location":"assets","locale":"","width":1209,"height":761},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3674599,"resolution":"7","location":"assets","locale":"","width":775,"height":980},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3674599,"resolution":"8","location":"assets","locale":"","width":861,"height":285},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3674599,"resolution":"9","location":"assets","locale":"","width":1473,"height":604}},"screenshots":{"1":"GazetteBuilder Menu","2":"Entries list","3":"Entry editing screen with Entry Details","4":"Entry Types","5":"Relationship Definitions","6":"Editing Relationship Definitions","7":"Public semantic relationship\/reference presentation","8":"Timeline display","9":"Story landing\/progression screen","10":"ZIP Import preview\/validation","11":"GazetteBuilder Dashboard","12":"GazetteBuilder Options","13":"Missing Semantics","14":"Not Published"}},"plugin_section":[],"plugin_tags":[1794,278523,23546,5575,278522],"plugin_category":[],"plugin_contributors":[278524],"plugin_business_model":[],"class_list":["post-360173","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-post-type","plugin_tags-lore","plugin_tags-storytelling","plugin_tags-timeline","plugin_tags-worldbuilding","plugin_contributors-robertjbecraft","plugin_committers-robertjbecraft"],"banners":{"banner":"https:\/\/ps.w.org\/gazettebuilder\/assets\/banner-772x250.png?rev=3674599","banner_2x":"https:\/\/ps.w.org\/gazettebuilder\/assets\/banner-1544x500.png?rev=3674599","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/gazettebuilder\/assets\/icon-128x128.png?rev=3674599","icon_2x":"https:\/\/ps.w.org\/gazettebuilder\/assets\/icon-256x256.png?rev=3674599","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-1.png?rev=3674599","caption":"GazetteBuilder Menu"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-2.png?rev=3674599","caption":"Entries list"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-3.png?rev=3674599","caption":"Entry editing screen with Entry Details"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-4.png?rev=3674599","caption":"Entry Types"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-5.png?rev=3674599","caption":"Relationship Definitions"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-6.png?rev=3674599","caption":"Editing Relationship Definitions"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-7.png?rev=3674599","caption":"Public semantic relationship\/reference presentation"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-8.png?rev=3674599","caption":"Timeline display"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-9.png?rev=3674599","caption":"Story landing\/progression screen"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-10.png?rev=3674599","caption":"ZIP Import preview\/validation"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-11.png?rev=3674599","caption":"GazetteBuilder Dashboard"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-12.png?rev=3674599","caption":"GazetteBuilder Options"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-13.png?rev=3674599","caption":"Missing Semantics"},{"src":"https:\/\/ps.w.org\/gazettebuilder\/assets\/screenshot-14.png?rev=3674599","caption":"Not Published"}],"raw_content":"<!--section=description-->\n<p>GazetteBuilder is a WordPress plugin for organizing worldbuilding content as structured, connected records. It is designed for lore databases, campaign setting reference sites, story-driven publishing, and timeline-based narrative content.<\/p>\n\n<p>At its core, GazetteBuilder gives WordPress a dedicated model for entries, entry types, story progression, semantic references, and controlled relationship vocabulary.<\/p>\n\n<h4>What it provides<\/h4>\n\n<ul>\n<li>A custom post type: <code>gazette_entry<\/code><\/li>\n<li>A taxonomy: <code>gazette_entry_kind<\/code><\/li>\n<li>A custom post type for relationship definitions: <code>gazette_relationship<\/code><\/li>\n<li>Story-aware entry sequencing and release controls<\/li>\n<li>Semantic reference linking via <code>[[Target Entry]]<\/code><\/li>\n<li>Timeline rendering based on timeline sort values<\/li>\n<li>ZIP-based import support for packaged lore content<\/li>\n<li>Public entry-type archive pages and filtered listing controls<\/li>\n<li>Admin screens for managing metadata, entry types, and relationship definitions<\/li>\n<\/ul>\n\n<h4>Entries<\/h4>\n\n<p>Entries are the primary content objects in the plugin. Each <code>gazette_entry<\/code> can carry metadata such as:<\/p>\n\n<ul>\n<li>Entry ID<\/li>\n<li>Entry Type<\/li>\n<li>Summary<\/li>\n<li>Campaign Date<\/li>\n<li>Story ID<\/li>\n<li>Sequence Position<\/li>\n<li>Release Date<\/li>\n<li>Timeline Sort<\/li>\n<li>Derived From<\/li>\n<li>Featured Media<\/li>\n<li>Unit label and continuation\/ending text<\/li>\n<\/ul>\n\n<p>Entries are edited through the standard WordPress admin interface, but they gain worldbuilding-specific metadata and behavior beyond a normal post.<\/p>\n\n<h4>Entry Types<\/h4>\n\n<p>Entry types are stored as taxonomy terms in <code>gazette_entry_kind<\/code>. The plugin can seed default kinds such as Location, Character, Organization, Culture, Technology, Creature, Vessel, Document, Artifact, Event, Reference, and Story. These terms are used to classify entries and can drive public archive indexes.<\/p>\n\n<h4>Relationships<\/h4>\n\n<p>GazetteBuilder supports a controlled relationship vocabulary for describing how one entry connects to another. Relationship types are defined as posts in <code>gazette_relationship<\/code> and include a relationship ID, canonical name, inverse label, source\/target entry types, symmetry settings, multiple-relationship settings, and forward\/inverse display rules.<\/p>\n\n<p>Relationships are declared per Entry using the format:<\/p>\n\n<pre><code>Relationship Name: Target Entry\n<\/code><\/pre>\n\n<p>For example:<\/p>\n\n<pre><code>Located in: Syrtis Major\nMember of: Royal Geographical Society\n<\/code><\/pre>\n\n<p>These declarations are resolved against actual Entries on the site. When a declaration resolves, the source Entry displays a forward relationship link, and the target Entry automatically displays a reverse (inverse) listing of every Entry that points to it, using the relationship's configured inverse label. No separate declaration is needed on the target Entry.<\/p>\n\n<p>Reverse relationship listings are alphabetized with letter dividers and jump navigation, rendered in a multi-column layout. The number of columns is configurable from GazetteBuilder \u2192 Options (1-6, default 2).<\/p>\n\n<h4>Story support<\/h4>\n\n<p>Stories are built by organizing entries through a shared Story ID and sequence position. This allows the plugin to group sequential content into a story arc, expose landing and continue flow for readers, protect unreleased entries behind a release model, and redirect readers away from unavailable story steps.<\/p>\n\n<h4>Semantic references<\/h4>\n\n<p>GazetteBuilder supports inline semantic links using the syntax <code>[[Target Entry Name]]<\/code>. When a matching published entry exists and is release-eligible, the reference is rendered as a link. Otherwise it remains plain text or unresolved, depending on site configuration.<\/p>\n\n<h4>Timeline and display features<\/h4>\n\n<p>The plugin supports timeline-driven output with the <code>[gazette_timeline]<\/code> shortcode, including <code>types<\/code>, <code>min<\/code>, <code>max<\/code>, <code>orientation<\/code>, and <code>summary<\/code> attributes. Entries are included in published timelines when they have valid sort data, release visibility, and relevant metadata.<\/p>\n\n<h4>Entry-type indexes<\/h4>\n\n<p>For entry types marked as indexable, the plugin exposes public archives such as <code>\/entry-type\/location\/<\/code> and <code>\/entry-type\/character\/<\/code>, sortable by title or release date.<\/p>\n\n<h4>Import workflow<\/h4>\n\n<p>GazetteBuilder includes ZIP-based import support for packaged worldbuilding content, including Markdown entry files, media files, front matter metadata, story and release metadata, timeline sort values, semantic reference data, and relationship declarations. The importer validates packages before creating content and reports invalid input instead of silently importing broken data.<\/p>\n\n<h4>Release model<\/h4>\n\n<p>GazetteBuilder supports a release-aware visibility model: published Entries with no Release Date are immediately readable, future Release Dates keep otherwise published Entries hidden until they become available, and Story Entries redirect readers away from unavailable steps.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/gazettebuilder<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Flush or refresh permalinks after activation so rewrite rules are in place.<\/li>\n<li>Open the GazetteBuilder admin screens and begin creating Entries, Entry Types, and Relationship Definitions.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20the%20standard%20wordpress%20post%20editor%3F\"><h3>Does this replace the standard WordPress post editor?<\/h3><\/dt>\n<dd><p>No. Entries use the standard WordPress editor, with additional GazetteBuilder metadata fields added to the edit screen.<\/p><\/dd>\n<dt id=\"can%20i%20control%20when%20an%20entry%20becomes%20visible%3F\"><h3>Can I control when an Entry becomes visible?<\/h3><\/dt>\n<dd><p>Yes. Each Entry can have a Release Date. Entries with an empty release date are immediately readable; Entries with a future release date remain hidden until that time.<\/p><\/dd>\n<dt id=\"how%20do%20i%20create%20relationships%20between%20entries%3F\"><h3>How do I create relationships between Entries?<\/h3><\/dt>\n<dd><p>Define a Relationship Definition from the GazetteBuilder \u2192 Relationship Definitions screen, then declare relationships on an Entry using the format <code>Relationship Name: Target Entry<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20import%20existing%20worldbuilding%20content%3F\"><h3>Can I import existing worldbuilding content?<\/h3><\/dt>\n<dd><p>Yes. GazetteBuilder supports importing ZIP packages containing Markdown entry files, media, and front matter metadata from the GazetteBuilder \u2192 Import screen.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"GazetteBuilder adds a dedicated content model for worldbuilding: entries, entry types, story progression, and relationships.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/360173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=360173"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/robertjbecraft"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=360173"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=360173"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=360173"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=360173"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=360173"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=360173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}