{"id":295015,"date":"2026-05-13T21:12:03","date_gmt":"2026-05-13T21:12:03","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/asset-lending-manager\/"},"modified":"2026-07-01T14:11:30","modified_gmt":"2026-07-01T14:11:30","slug":"asset-lending-manager","status":"publish","type":"plugin","link":"https:\/\/pirate.wordpress.org\/plugins\/asset-lending-manager\/","author":16121050,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.0","stable_tag":"0.3.0","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Asset Lending Manager","header_author":"IoClaudio","header_description":"Open-source tool to manage shared physical assets and loan workflows for associations, schools, libraries, laboratories, and any organization.","assets_banners_color":"ccd7f3","last_updated":"2026-07-01 14:11:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/ilclaudio\/asset-lending-manager","header_author_uri":"https:\/\/www.claudiobattaglino.it","rating":0,"author_block_rating":0,"active_installs":0,"downloads":188,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.2":{"tag":"0.2.2","author":"ioclaudio","date":"2026-05-13 21:11:38"},"0.2.3":{"tag":"0.2.3","author":"ioclaudio","date":"2026-05-23 14:15:14"},"0.3.0":{"tag":"0.3.0","author":"ioclaudio","date":"2026-07-01 14:11:30"}},"upgrade_notice":{"0.3.0":"<p>Adds an operator asset history page and optional owner contact messages. Kit operations now skip ineligible components safely. No database changes; no manual intervention required.<\/p>","0.2.2":"<p>Security and fix release. REST API migrated to native WordPress REST API routes. No database changes; no manual intervention required.<\/p>","0.2.1":"<p>Internal refactoring release. All plugin database tables, options, identifiers, and ACF field storage keys have been renamed from the <code>alm_<\/code> \/ unprefixed form to the <code>almgr_<\/code> prefix.<\/p>","0.1.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3531387,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3531387,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3531387,"resolution":"1544x500","location":"assets","locale":"","width":1824,"height":576},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3531387,"resolution":"772x250","location":"assets","locale":"","width":1824,"height":576}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.2","0.2.3","0.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3531387,"resolution":"1","location":"assets","locale":"","width":1232,"height":831},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3531387,"resolution":"2","location":"assets","locale":"","width":772,"height":907},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3531387,"resolution":"3","location":"assets","locale":"","width":771,"height":698},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3531387,"resolution":"4","location":"assets","locale":"","width":1253,"height":707},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3531387,"resolution":"5","location":"assets","locale":"","width":967,"height":762}},"screenshots":{"1":"Frontend asset list with search, taxonomy filters, and QR scanner access.","2":"Frontend asset detail page with loan workflow actions, history, and QR code label generation.","3":"Back-office direct assignment form for operators and administrators.","4":"Frontend advanced search and filter interface.","5":"Plugin settings in wp-admin."}},"plugin_section":[],"plugin_tags":[8847,262842,1980,25730,5884],"plugin_category":[],"plugin_contributors":[262843],"plugin_business_model":[],"class_list":["post-295015","plugin","type-plugin","status-publish","hentry","plugin_tags-asset-management","plugin_tags-equipment","plugin_tags-library","plugin_tags-loans","plugin_tags-organization","plugin_contributors-ioclaudio","plugin_committers-ioclaudio"],"banners":{"banner":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/banner-772x250.png?rev=3531387","banner_2x":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/banner-1544x500.png?rev=3531387","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/icon-128x128.png?rev=3531387","icon_2x":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/icon-256x256.png?rev=3531387","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/screenshot-1.png?rev=3531387","caption":"Frontend asset list with search, taxonomy filters, and QR scanner access."},{"src":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/screenshot-2.png?rev=3531387","caption":"Frontend asset detail page with loan workflow actions, history, and QR code label generation."},{"src":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/screenshot-3.png?rev=3531387","caption":"Back-office direct assignment form for operators and administrators."},{"src":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/screenshot-4.png?rev=3531387","caption":"Frontend advanced search and filter interface."},{"src":"https:\/\/ps.w.org\/asset-lending-manager\/assets\/screenshot-5.png?rev=3531387","caption":"Plugin settings in wp-admin."}],"raw_content":"<!--section=description-->\n<p>Asset Lending Manager is an open-source WordPress plugin that helps any organization manage shared physical assets and internal lending workflows.<\/p>\n\n<p>Designed for clubs, associations, schools, public bodies, libraries, laboratories, makerspaces, and any group that loans equipment or materials to its members.<\/p>\n\n<p>Members can browse available assets and submit loan requests, while operators and administrators can manage assignments and loan history.<\/p>\n\n<p>Born within an association of amateur astronomers to manage telescopes and equipment, it is published as a general-purpose tool usable by any organization.<\/p>\n\n<p><strong>Requires the Advanced Custom Fields (ACF) plugin<\/strong> (free version) to store and manage asset details.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Asset and kit management (a kit is a group of items lent together as a set)<\/li>\n<li>Public browsing page with search, taxonomy filters, QR labels, and QR scanner lookup<\/li>\n<li>Loan request workflow with approval, rejection, direct assignment, and configurable cancellation of competing pending requests<\/li>\n<li>Optional contact form to send email messages to the current asset owner<\/li>\n<li>Email notifications for the main loan workflow events<\/li>\n<li>Frontend asset state management for operators, including force-return and restore flows<\/li>\n<li>Full loan history, plus a dedicated full asset history page for operators via <code>[almgr_asset_history]<\/code><\/li>\n<li>Two user roles included: Member and Operator<\/li>\n<li>Read-only JSON REST API at <code>\/wp-json\/almgr\/v1\/<\/code> for asset list, asset detail, member list, and member assets<\/li>\n<li>Back-office Tools page (ALM \u2192 Tools) with Import, Export, and Utilities tabs<\/li>\n<li>Users and assets CSV import\/export, including kit components and their ACF fields in asset CSV files<\/li>\n<li>Translation-ready<\/li>\n<\/ul>\n\n<h3>Requirements<\/h3>\n\n<p>Requires the <strong>Advanced Custom Fields<\/strong> plugin (free version is sufficient):\nhttps:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\nThe plugin registers its ACF field group automatically, so no manual field setup is needed.<\/p>\n\n<h3>Loan Workflow<\/h3>\n\n<ul>\n<li>A member browses the available assets.<\/li>\n<li>A loan request is submitted for a selected asset.<\/li>\n<li>Notification emails are sent to the requester and, when applicable, to the current owner.<\/li>\n<li>The current owner can approve or reject the request.<\/li>\n<li>On approval, the asset is marked as on loan and the new borrower is recorded.<\/li>\n<li>Operators and admins can also directly assign any asset that is not retired or under maintenance, without a prior request (when direct assignment is enabled).<\/li>\n<li>Operators can force-return an on-loan asset to available, or restore an asset from maintenance or retired back to available.<\/li>\n<li>All decisions, assignments, and state changes are recorded in loan history.<\/li>\n<\/ul>\n\n<h3>Credits<\/h3>\n\n<p>This plugin bundles the following third-party JavaScript libraries:<\/p>\n\n<ul>\n<li><strong>qrcode-generator<\/strong> by Kazuhiko Arase (http:\/\/www.d-project.com\/), MIT License<\/li>\n<li><strong>jsQR<\/strong> by cozmo (https:\/\/github.com\/cozmo\/jsQR), Apache License 2.0<\/li>\n<\/ul>\n\n<p>Both licenses are compatible with GPLv2 or later. License files are included in <code>assets\/js\/vendor\/<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the <strong>Advanced Custom Fields<\/strong> (ACF) plugin (free version is enough): https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\nThe plugin registers its ACF field group automatically. No manual ACF setup is required.<\/li>\n<li>In WordPress admin, go to Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Upload the plugin ZIP file, click Install Now, then Activate.\n<strong>Classic themes:<\/strong><\/li>\n<li>Asset pages are served automatically \u2014 no shortcodes required:\n\n<ul>\n<li><code>\/asset\/<\/code> \u2014 asset catalog with search and filters<\/li>\n<li><code>\/asset\/asset-name\/<\/code> \u2014 single asset detail page<\/li>\n<\/ul><\/li>\n<li>If <code>\/asset\/<\/code> returns 404, go to Settings &gt; Permalinks and click Save Changes once.<\/li>\n<li>The full asset history page is not automatic. Create a normal WordPress page with the <code>[almgr_asset_history]<\/code> shortcode and assign it in <strong>ALM &gt; Settings &gt; Frontend<\/strong> as <strong>Asset history page<\/strong>.<\/li>\n<\/ol>\n\n<p><strong>Block themes:<\/strong>\n4. Block themes do not support automatic PHP template overrides. Create three pages manually:\n   * Add <code>[almgr_asset_list]<\/code> to a page \u2014 this is your asset catalog.\n   * Add <code>[almgr_asset_view]<\/code> to a second page \u2014 this is your asset detail view.\n   * Add <code>[almgr_asset_history]<\/code> to a third page \u2014 this is your full asset history page for operators.\n5. In <strong>ALM &gt; Settings &gt; Frontend<\/strong>, set \"Asset archive page\", \"Asset detail page\", and \"Asset history page\" to the pages you just created. This ensures all asset and history links point to the correct pages.\n6. Optionally configure email sender settings in wp-admin under <strong>ALM &gt; Settings<\/strong>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"who%20is%20this%20plugin%20for%3F\"><h3>Who is this plugin for?<\/h3><\/dt>\n<dd><p>Any organization that manages a shared pool of physical objects: associations, schools, public bodies, libraries, laboratories, makerspaces, sports clubs, and more.\nThe plugin was originally created for an association of amateur astronomers but is designed to be generic and suitable for any context.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20require%20advanced%20custom%20fields%3F\"><h3>Does this plugin require Advanced Custom Fields?<\/h3><\/dt>\n<dd><p>Yes. ACF (free version) is required to store and retrieve custom asset fields. The plugin will display an admin notice if ACF is not active.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20manage%20physical%20delivery%20of%20assets%3F\"><h3>Does this plugin manage physical delivery of assets?<\/h3><\/dt>\n<dd><p>No. Asset delivery and handover are handled offline. The plugin tracks requests and assignments only.<\/p><\/dd>\n<dt id=\"is%20there%20a%20settings%20page%20in%20wp-admin%3F\"><h3>Is there a settings page in wp-admin?<\/h3><\/dt>\n<dd><p>Yes. Under the <strong>ALM<\/strong> menu in wp-admin you can configure the email sender, loan rules (maximum active loans per member, message length limits), and other workflow options.<\/p><\/dd>\n<dt id=\"which%20shortcodes%20are%20available%20and%20when%20should%20i%20use%20them%3F\"><h3>Which shortcodes are available and when should I use them?<\/h3><\/dt>\n<dd><p>The plugin provides three shortcodes:\n    [almgr_asset_list] for the asset catalog,\n    [almgr_asset_view] for the single asset detail view,\nand <code>[almgr_asset_history]<\/code> for the full asset history page (operator-only).\nOn classic themes, catalog and detail pages are usually served automatically, so the history shortcode is the one most commonly needed.\nOn block themes, create and assign all three shortcode pages manually in <strong>ALM &gt; Settings &gt; Frontend<\/strong>.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translation-ready%3F\"><h3>Is the plugin translation-ready?<\/h3><\/dt>\n<dd><p>Yes. English and Italian are included out of the box. Other languages can be added using standard WordPress translation tools.<\/p><\/dd>\n<dt id=\"what%20data%20is%20removed%20when%20the%20plugin%20is%20uninstalled%3F\"><h3>What data is removed when the plugin is uninstalled?<\/h3><\/dt>\n<dd><p>Uninstalling the plugin removes the plugin settings, the loan request history, the pending loan requests, and the custom user roles.\nBy default, your asset inventory (posts and their data) is preserved.\nIf you want to remove all plugin data, define <code>ALMGR_REMOVE_ALL_DATA<\/code> as <code>true<\/code> in <code>wp-config.php<\/code> before uninstalling.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20an%20asset%20and%20a%20kit%3F\"><h3>What is the difference between an asset and a kit?<\/h3><\/dt>\n<dd><p>An asset is a single physical item (for example, a telescope, a book, or a camera). A kit is a collection of items that are lent together as a group (for example, a telescope with its eyepieces and carrying case). Managing kits allows you to track all components under a single loan request.<\/p><\/dd>\n<dt id=\"can%20multiple%20members%20request%20the%20same%20asset%20at%20the%20same%20time%3F\"><h3>Can multiple members request the same asset at the same time?<\/h3><\/dt>\n<dd><p>Yes. Multiple members can submit requests for the same asset simultaneously. By default, when a request is approved or the asset is directly assigned, all other pending requests for that asset are automatically canceled (this behavior is configurable), and requesters are notified by email when notifications are enabled.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20developer%20to%20set%20up%20this%20plugin%3F\"><h3>Do I need a developer to set up this plugin?<\/h3><\/dt>\n<dd><p>On classic themes, basic setup usually only requires installing the plugin and activating ACF; asset pages are served automatically, except for the optional full asset history page. On block themes, three shortcode pages must be created manually and assigned in the plugin settings: catalog, asset detail, and full asset history.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>For full release notes see <code>CHANGELOG.md<\/code>.<\/p>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added: full asset history page for operators via <code>[almgr_asset_history]<\/code>.<\/li>\n<li>Added: optional contact form to send email messages to the current asset owner.<\/li>\n<li>Fixed: kit loan approval, direct assignment, and state changes now affect only eligible components; excluded components are skipped safely and reported to the operator.<\/li>\n<li>Fixed: maintenance\/restore kit behavior and ACF write handling are now more robust and consistent.<\/li>\n<li>Fixed: operator actions (direct assignment, state change, restore) now reject non-published assets.<\/li>\n<li>Fixed: asset list search field no longer collides with the WordPress reserved search query variable.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>Fixed: WordPress 7.0 compatibility check, minor documentation corrections, and a small admin CSS adjustment.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Security: migrated the REST API to native WordPress REST API routes and removed custom authentication logic.<\/li>\n<li>Fixed: operators can upload and manage images from the Media Library.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Added: Tools page with users\/assets CSV import-export and utilities.<\/li>\n<li>Added: notification policy settings and full-data uninstall constant.<\/li>\n<li>Changed: internal <code>alm_<\/code> identifiers and ACF storage keys migrated to the <code>almgr_<\/code> prefix.<\/li>\n<li>Fixed\/Security: operators can approve requests without a current owner; additional hardening from code audit.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Added: read-only JSON REST API and dedicated REST API settings tab.<\/li>\n<li>Security: added resource-status checks on all AJAX endpoints.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First public release with asset and kit management, full loan workflow, role-based access control, email notifications, loan history, frontend browsing, QR support, asset state management, translations, and settings page.<\/li>\n<\/ul>","raw_excerpt":"Open-source plugin to manage shared physical assets and loan workflows for associations, schools, libraries, and any organization.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/295015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=295015"}],"author":[{"embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ioclaudio"}],"wp:attachment":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=295015"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=295015"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=295015"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=295015"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=295015"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=295015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}