{"id":318267,"date":"2026-06-03T11:07:17","date_gmt":"2026-06-03T11:07:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bmlt-minutes\/"},"modified":"2026-09-16T21:48:28","modified_gmt":"2026-09-16T21:48:28","slug":"bmlt-minutes","status":"publish","type":"plugin","link":"https:\/\/hsb.wordpress.org\/plugins\/bmlt-minutes\/","author":16732302,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"BMLT Minutes","header_author":"bmltenabled","header_description":"Publish NA service committee meeting minutes (PDF, DOCX, XLSX, Google Doc links) with a simple shortcode.","assets_banners_color":"c2c8d0","last_updated":"2026-09-16 21:48:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/bmlt-minutes\/","header_author_uri":"https:\/\/bmlt.app","rating":0,"author_block_rating":0,"active_installs":0,"downloads":267,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"bmltenabled","date":"2026-06-03 11:07:04","revision":3559251},"1.1.0":{"tag":"1.1.0","author":"bmltenabled","date":"2026-09-16 21:48:28","revision":3699261}},"upgrade_notice":{"1.1.0":"<p>Adds per-user Committee Scope. Nested committees are now grouped by their full path in the [bmlt_minutes] list.<\/p>","1.0.3":"<p>The shortcode has been renamed from [minutes] to [bmlt_minutes] for a unique prefix. Update any pages using [minutes].<\/p>","1.0.1":"<p>Fixes the Default Sort Order setting and ensures minutes without a meeting date still appear in the [minutes] list.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3559243,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3559243,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3559243,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3559243,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3559243,"resolution":"1","location":"assets","locale":"","width":1280,"height":498},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3559243,"resolution":"2","location":"assets","locale":"","width":1280,"height":427}},"screenshots":{"1":"Frontend <code>[bmlt_minutes]<\/code> shortcode output, grouped by committee. The padlock and \"Protected\" badge indicate a password-protected entry.","2":"Admin <strong>Meeting Minutes<\/strong> list view, with columns for Meeting Date, File \/ Link, Author, and Committees."}},"plugin_section":[],"plugin_tags":[5595,13380,9054,265629,1764],"plugin_category":[50],"plugin_contributors":[174945,154957],"plugin_business_model":[],"class_list":["post-318267","plugin","type-plugin","status-publish","hentry","plugin_tags-agenda","plugin_tags-bmlt","plugin_tags-documents","plugin_tags-meeting-minutes","plugin_tags-pdf","plugin_category-media","plugin_contributors-bmltenabled","plugin_contributors-pjaudiomv","plugin_committers-bmltenabled","plugin_committers-pjaudiomv"],"banners":{"banner":"https:\/\/ps.w.org\/bmlt-minutes\/assets\/banner-772x250.png?rev=3559243","banner_2x":"https:\/\/ps.w.org\/bmlt-minutes\/assets\/banner-1544x500.png?rev=3559243","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bmlt-minutes\/assets\/icon-128x128.png?rev=3559243","icon_2x":"https:\/\/ps.w.org\/bmlt-minutes\/assets\/icon-256x256.png?rev=3559243","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bmlt-minutes\/assets\/screenshot-1.png?rev=3559243","caption":"Frontend <code>[bmlt_minutes]<\/code> shortcode output, grouped by committee. The padlock and \"Protected\" badge indicate a password-protected entry."},{"src":"https:\/\/ps.w.org\/bmlt-minutes\/assets\/screenshot-2.png?rev=3559243","caption":"Admin <strong>Meeting Minutes<\/strong> list view, with columns for Meeting Date, File \/ Link, Author, and Committees."}],"raw_content":"<!--section=description-->\n<p>BMLT Minutes is a lightweight WordPress plugin for service bodies and committees to publish meeting minutes on their website. Most committees produce PDFs, Word docs, spreadsheets, or Google Doc links every month, and need a clean way to organize them by committee and date. Built for the bmlt-enabled community but useful for any organization that needs a tidy minutes archive.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Dedicated <strong>Meeting Minutes<\/strong> post type with an uploaded-file or external-URL document field<\/li>\n<li><strong>Committee<\/strong> taxonomy seeded with common service-committee defaults (Area, Regional, Hospitals &amp; Institutions, Public Relations, Activities, Outreach, Literature, Policy) \u2014 fully editable<\/li>\n<li>Meeting-date field separate from publish-date, with sorting and year-grouping<\/li>\n<li>Supports PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, ODT, ODS, ODP, TXT, RTF, CSV, plus arbitrary URLs (Google Docs, Dropbox, OneDrive)<\/li>\n<li>Single <code>[bmlt_minutes]<\/code> shortcode with grouping, filtering, and limiting<\/li>\n<li>Optional <strong>password protection<\/strong> per post \u2014 for minutes that still contain unredacted personal details<\/li>\n<li>Dedicated <strong>Minutes Manager<\/strong> role \u2014 grant trusted servants access to manage minutes only, without broader site access<\/li>\n<li>Configurable per-file upload size limit (default 10 MB, scoped to the Minutes editor only)<\/li>\n<li>Block-editor compatible (custom fields exposed via the REST API)<\/li>\n<li>Works as a standalone plugin \u2014 no BMLT server required<\/li>\n<\/ul>\n\n<h4>Usage<\/h4>\n\n<p>Add the shortcode to any page or post:<\/p>\n\n<pre><code>[bmlt_minutes]\n<\/code><\/pre>\n\n<p>Filter to one committee, group by year:<\/p>\n\n<pre><code>[bmlt_minutes committee=\"hospitals-institutions\" group_by=\"year\"]\n<\/code><\/pre>\n\n<p>Show the 10 most recent, flat list with excerpts:<\/p>\n\n<pre><code>[bmlt_minutes limit=\"10\" group_by=\"none\" show_excerpt=\"true\"]\n<\/code><\/pre>\n\n<p>Shortcode attributes:<\/p>\n\n<ul>\n<li><code>committee<\/code> \u2014 Slug or comma-separated slugs of Committee terms. Defaults to all committees.<\/li>\n<li><code>year<\/code> \u2014 Restrict to a single year by Meeting Date (e.g. <code>2026<\/code>).<\/li>\n<li><code>limit<\/code> \u2014 Max items to render. <code>-1<\/code> (default) = no limit.<\/li>\n<li><code>order<\/code> \u2014 <code>desc<\/code> (default, newest first) or <code>asc<\/code>.<\/li>\n<li><code>group_by<\/code> \u2014 <code>committee<\/code> (default), <code>year<\/code>, or <code>none<\/code>.<\/li>\n<li><code>show_excerpt<\/code> \u2014 <code>true<\/code> or <code>false<\/code> (default). Shows each post's excerpt under the link.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/bmlt-minutes\/<\/code>, or install via the Plugins screen.<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress.<\/li>\n<li>(Optional) Open <strong>Minutes \u2192 Settings<\/strong> to set your default sort order and upload size cap.<\/li>\n<li>Add minutes under <strong>Minutes \u2192 Add New<\/strong> \u2014 upload a file or paste a Google Doc \/ external link, choose a committee, set the meeting date, publish.<\/li>\n<li>Add <code>[bmlt_minutes]<\/code> to any page or post.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20are%20the%20documents%20stored%3F\"><h3>Where are the documents stored?<\/h3><\/dt>\n<dd><p>Uploaded files go into the standard WordPress Media Library. External links (Google Docs, Dropbox, OneDrive) are stored as URLs on the minutes post \u2014 nothing is copied or proxied.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20without%20bmlt%3F\"><h3>Can I use this without BMLT?<\/h3><\/dt>\n<dd><p>Yes. The plugin works as a standalone document-list plugin \u2014 it makes no calls to any BMLT server.<\/p><\/dd>\n<dt id=\"can%20i%20add%20my%20own%20committees%3F\"><h3>Can I add my own committees?<\/h3><\/dt>\n<dd><p>Yes. The Committee taxonomy is hierarchical (like Categories). Go to <strong>Minutes \u2192 Committees<\/strong> to add, rename, or nest committees. The default list is just a starting point on first activation.<\/p><\/dd>\n<dt id=\"how%20do%20i%20link%20to%20a%20google%20doc%20instead%20of%20uploading%3F\"><h3>How do I link to a Google Doc instead of uploading?<\/h3><\/dt>\n<dd><p>In the <strong>Minutes Document<\/strong> meta box on the editor screen, leave the file field empty and paste your Google Doc \/ Drive URL into the <strong>External Link<\/strong> field.<\/p><\/dd>\n<dt id=\"can%20i%20password-protect%20minutes%20that%20contain%20personal%20details%3F\"><h3>Can I password-protect minutes that contain personal details?<\/h3><\/dt>\n<dd><p>Yes. Some service bodies redact PII before posting, others share unredacted minutes with members only. On the editor screen, set a value in the <strong>Password Protection<\/strong> field of the Minutes Document meta box (or use WordPress's built-in Visibility \u2192 Password protected option in the Publish panel). On the public <code>[bmlt_minutes]<\/code> list, protected entries show a padlock and link to a password-prompt page rather than exposing the document URL. Members enter the shared password once per browser to unlock the document. Default behavior with no password set is fully public access.<\/p><\/dd>\n<dt id=\"can%20i%20password-protect%20the%20entire%20page%20that%20contains%20%5Bbmlt_minutes%5D%3F\"><h3>Can I password-protect the entire page that contains [bmlt_minutes]?<\/h3><\/dt>\n<dd><p>Yes \u2014 use WordPress's built-in page password. Edit the page that holds your <code>[bmlt_minutes]<\/code> shortcode, open the Publish (Block Editor: Status &amp; visibility) panel, set <strong>Visibility \u2192 Password protected<\/strong>, and enter a password. Visitors will see WordPress's standard password form before the whole page (including the minutes list) is rendered. This is independent of the per-post password on individual minutes \u2014 you can combine them if you want a members-only landing page plus an extra lock on specific minutes.<\/p><\/dd>\n<dt id=\"how%20do%20i%20let%20someone%20manage%20minutes%20without%20giving%20them%20full%20site%20access%3F\"><h3>How do I let someone manage minutes without giving them full site access?<\/h3><\/dt>\n<dd><p>There are two ways:<\/p>\n\n<ol>\n<li><strong>Minutes Manager role<\/strong> \u2014 activating the plugin creates this role. Assign a user that role (Users \u2192 edit user \u2192 Role) and they can add, edit, and publish minutes and upload documents, but nothing else in wp-admin.<\/li>\n<li><strong>\"Can manage minutes\" checkbox<\/strong> \u2014 on any user's profile (Users \u2192 edit user) there's a Meeting Minutes section with a \"Can manage minutes\" checkbox. Tick it to grant an existing user (e.g. an Author) minutes access <em>on top of<\/em> their current role, without changing that role. Untick to revoke. If the user's role already grants minutes access, the checkbox shows as locked with a note.<\/li>\n<\/ol>\n\n<p>Administrators and Editors keep full access automatically. Under the hood the Meeting Minutes post type uses its own capabilities (<code>edit_bmlt_minutes<\/code>, <code>publish_bmlt_minutes<\/code>, etc.), so a role-editor plugin can also mix these into any existing role. Curating the committee list stays admin-only; Minutes Managers can assign existing committees but not create new ones.<\/p><\/dd>\n<dt id=\"can%20i%20limit%20a%20user%20to%20only%20certain%20committees%3F\"><h3>Can I limit a user to only certain committees?<\/h3><\/dt>\n<dd><p>Yes. On the user's profile, the Meeting Minutes section has a <strong>Committee Scope<\/strong> checklist. Tick one or more committees and that user can only add, edit, and delete minutes filed under those committees (sub-committees are included automatically). They see only their committees in the editor and in the Minutes list, and they can't publish without picking one of them. Leave every box unchecked for access to all committees. Administrators are never restricted.<\/p>\n\n<p>This suits a region hosting minutes for several areas: nest each area's committees under the area (<strong>Area A \u2192 Hospitals &amp; Institutions<\/strong>, <strong>Area B \u2192 Hospitals &amp; Institutions<\/strong>, and so on), then scope each area's uploader to their area. The <code>[bmlt_minutes]<\/code> list groups nested committees by their full path, so the two H&amp;I committees stay separate.<\/p><\/dd>\n<dt id=\"will%20uninstalling%20delete%20my%20minutes%3F\"><h3>Will uninstalling delete my minutes?<\/h3><\/dt>\n<dd><p>Yes. The <code>uninstall.php<\/code> script removes the plugin's settings and deletes all minutes posts when you delete the plugin via the WordPress admin. Deactivate instead of uninstalling if you want to preserve them.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: <strong>Committee Scope<\/strong> on the user profile. A scoped user can only add, edit, and delete minutes filed under their chosen committees (and sub-committees), sees only those committees when editing, and must pick one before publishing. Administrators are never restricted.<\/li>\n<li>Changed: when grouping by committee, nested committees are labelled with their full path (e.g. \"Area A \/ Hospitals &amp; Institutions\") so same-named sub-committees under different parents no longer merge into one group.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Renamed the <code>[minutes]<\/code> shortcode to <code>[bmlt_minutes]<\/code> so the tag carries a plugin-specific prefix and won't collide with other plugins.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Removed the unused BMLT Server URL and Service Body ID settings.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: the Default Sort Order setting now applies to the <code>[minutes]<\/code> shortcode when no <code>order<\/code> attribute is provided.<\/li>\n<li>Fixed: published minutes with no meeting date are no longer excluded from the <code>[minutes]<\/code> list.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Publish service committee meeting minutes (PDF, DOCX, XLSX, Google Doc links) with a simple shortcode.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/318267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=318267"}],"author":[{"embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bmltenabled"}],"wp:attachment":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=318267"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=318267"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=318267"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=318267"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=318267"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=318267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}