{"id":299592,"date":"2026-06-07T13:51:19","date_gmt":"2026-06-07T13:51:19","guid":{"rendered":"https:\/\/ja.wordpress.org\/plugins\/conferencemanager\/"},"modified":"2026-08-16T04:32:22","modified_gmt":"2026-08-16T04:32:22","slug":"conferencemanager","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/conferencemanager\/","author":23478251,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.4","stable_tag":"1.2.4","tested":"7.0.4","requires":"6.9","requires_php":"8.4","requires_plugins":null,"header_name":"ConferenceManager","header_author":"CS24 Co.,Ltd.","header_description":"\u5b66\u8853\u5b66\u4f1a\u306e\u30a4\u30d9\u30f3\u30c8\u53c2\u52a0\u7533\u8fbc\u30fb\u6c7a\u6e08\u30fb\u6587\u66f8\u81ea\u52d5\u5316\u30d7\u30e9\u30b0\u30a4\u30f3","assets_banners_color":"ccebf3","last_updated":"2026-08-16 04:32:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/cs24.biz\/conference\/","header_author_uri":"https:\/\/cs24.biz\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":698,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.10":{"tag":"1.1.10","author":"creativestrategy24","date":"2026-08-05 07:28:02"},"1.1.11":{"tag":"1.1.11","author":"creativestrategy24","date":"2026-08-10 04:19:43"},"1.1.12":{"tag":"1.1.12","author":"creativestrategy24","date":"2026-08-10 04:53:22"},"1.1.2":{"tag":"1.1.2","author":"creativestrategy24","date":"2026-06-07 13:51:07"},"1.1.3":{"tag":"1.1.3","author":"creativestrategy24","date":"2026-06-08 02:11:19"},"1.1.4":{"tag":"1.1.4","author":"creativestrategy24","date":"2026-06-14 13:20:01"},"1.1.5":{"tag":"1.1.5","author":"creativestrategy24","date":"2026-06-18 08:15:19"},"1.1.6":{"tag":"1.1.6","author":"creativestrategy24","date":"2026-06-19 05:16:59"},"1.1.7":{"tag":"1.1.7","author":"creativestrategy24","date":"2026-07-06 13:48:29"},"1.1.8":{"tag":"1.1.8","author":"creativestrategy24","date":"2026-07-15 13:44:44"},"1.1.9":{"tag":"1.1.9","author":"creativestrategy24","date":"2026-08-04 07:07:00"},"1.2.0":{"tag":"1.2.0","author":"creativestrategy24","date":"2026-08-15 06:49:28"},"1.2.1":{"tag":"1.2.1","author":"creativestrategy24","date":"2026-08-15 09:54:09"},"1.2.2":{"tag":"1.2.2","author":"creativestrategy24","date":"2026-08-15 13:44:06"},"1.2.3":{"tag":"1.2.3","author":"creativestrategy24","date":"2026-08-15 14:10:32"},"1.2.4":{"tag":"1.2.4","author":"creativestrategy24","date":"2026-08-16 04:32:22"}},"upgrade_notice":{"1.2.4":"<p>Stops a shortcode that names a Pro-only view from quietly showing the registration form, which could record a registration the visitor never intended. Raises the My Page one-time code limit so that people sharing one public IP address \u2014 a university, a company, a conference venue \u2014 no longer lock each other out. No database changes and no action required.<\/p>","1.2.3":"<p>Fixes a member CSV export that silently stopped at 100 rows, and paged lists that could repeat or pass over a record when several shared the same date. No database changes and no action required.<\/p>","1.2.2":"<p>Corrects the encryption key warning, which pointed at wp-config.php even on sites that keep the key in the database. Where the previous key is still recoverable, the warning now says where it is. The warning can only be dismissed by submitting its button, so it cannot be dismissed by a prefetched link. Key rotation no longer risks passing over a record. No database changes and no action required.<\/p>","1.2.1":"<p>Adds a warning that appears if the encryption key changes, so the problem is caught while it is still reversible. Corrects what the Setup screen and the readme say about where the key is stored. No database changes and no action required.<\/p>","1.2.0":"<p>Adds a &quot;What&#039;s New&quot; screen under the Conference menu that lists this plugin&#039;s features and what the separately distributed Pro edition adds. No database changes, no behaviour changes; no action required.<\/p>","1.1.12":"<p>Repairs sites where a database upgrade had been skipped, which could overstate the net amount received. The schema auto-upgrades to v3.4.0 and the 1.1.9 and 1.1.10 data upgrades are re-run once; sites that are already correct are unaffected. No action required.<\/p>","1.1.11":"<p>Runs pending database upgrades on activation, so they can no longer be skipped. Sites that had already skipped an upgrade are repaired by 1.1.12, not by this release.<\/p>","1.1.10":"<p>Fixes refunds made before 1.1.9 not being counted, which overstated the net amount received. The schema auto-upgrades to v3.3.0 and those refunds move into the settlement ledger; no action required. Payments refunded in full now count as settled.<\/p>","1.1.9":"<p>Separates the billed amount from the amount actually received, so over- and under-payments can be settled by refund or surcharge. The database schema auto-upgrades to v3.2.0 and payments reconciled earlier have their paid amount backfilled from the billed amount; no action required.<\/p>","1.1.7":"<p>Fixes a failure when saving a member who has no member number (empty member numbers are now stored as NULL). No database changes; no action required. If your site already has members whose member number was saved as an empty string, re-saving them normalizes the value automatically.<\/p>","1.1.2":"<p>Addresses v1.1.1 review feedback: removes online\/Peatix add-on fields, drops unused libraries and updates Stripe\/FPDI, moves font storage out of the plugin folder, and limits the public fee endpoint to published events. No action required.<\/p>","1.1.1":"<p>Addresses WordPress.org review feedback from v1.1.0 (source code disclosure, core-file loading, REST permission callbacks, HEREDOC removal). No database changes; no action required.<\/p>","1.1.0":"<p>Addresses WordPress.org review feedback from v1.0.3. Paid add-on modules are no longer included; Stripe payment is now part of the free plugin. Existing data is preserved; database schema auto-upgrades to v3.0.0.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3563718,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3563718,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3563718,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3563718,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.10","1.1.11","1.1.12","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.2.0","1.2.1","1.2.2","1.2.3","1.2.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3563727,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3563727,"resolution":"2","location":"assets","locale":"","width":1280,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3563727,"resolution":"3","location":"assets","locale":"","width":1280,"height":900}},"screenshots":{"1":"Dashboard \u2014 event overview and quick actions","2":"Registration form \u2014 participant registration with group support","3":"Payment management \u2014 bank transfer and Stripe payment tracking with invoice generation"}},"plugin_section":[],"plugin_tags":[1802,118,2431,507,603],"plugin_category":[40,45,58],"plugin_contributors":[266083],"plugin_business_model":[],"class_list":["post-299592","plugin","type-plugin","status-publish","hentry","plugin_tags-academic","plugin_tags-conference","plugin_tags-event","plugin_tags-payment","plugin_tags-registration","plugin_category-calendar-and-events","plugin_category-ecommerce","plugin_category-user-management","plugin_contributors-creativestrategy24","plugin_committers-creativestrategy24"],"banners":{"banner":"https:\/\/ps.w.org\/conferencemanager\/assets\/banner-772x250.png?rev=3563718","banner_2x":"https:\/\/ps.w.org\/conferencemanager\/assets\/banner-1544x500.png?rev=3563718","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/conferencemanager\/assets\/icon-128x128.png?rev=3563718","icon_2x":"https:\/\/ps.w.org\/conferencemanager\/assets\/icon-256x256.png?rev=3563718","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/conferencemanager\/assets\/screenshot-1.png?rev=3563727","caption":"Dashboard \u2014 event overview and quick actions"},{"src":"https:\/\/ps.w.org\/conferencemanager\/assets\/screenshot-2.png?rev=3563727","caption":"Registration form \u2014 participant registration with group support"},{"src":"https:\/\/ps.w.org\/conferencemanager\/assets\/screenshot-3.png?rev=3563727","caption":"Payment management \u2014 bank transfer and Stripe payment tracking with invoice generation"}],"raw_content":"<!--section=description-->\n<p>Conference Manager is a WordPress plugin designed for academic societies and conference organizers. It provides end-to-end management of event registration, payments, and document generation.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Member management (import\/export via CSV\/Excel)<\/li>\n<li>Event and session management<\/li>\n<li>Registration forms with group (team) registration support<\/li>\n<li>Bank transfer and Stripe credit card payment<\/li>\n<li>Automatic invoice and receipt PDF generation<\/li>\n<li>Participant list and MyPage (with Passkey\/WebAuthn authentication)<\/li>\n<li>AES-256-GCM encryption for personal data<\/li>\n<li>Audit logging, rate limiting, and bot protection<\/li>\n<li>Transactional email notifications (OTP, confirmations)<\/li>\n<li>SNS share buttons (Twitter\/X, Facebook, LINE)<\/li>\n<li>Full Japanese \/ English localization<\/li>\n<\/ul>\n\n<p>A separately distributed Pro edition (Conference Manager Pro) adds abstract submission and peer review, sponsor management, bulk email and other features for larger conferences. It is a different plugin and is not required: everything listed above works in full here, with nothing locked or time-limited. See Conference &gt; What's New in the admin menu for the full list.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following external services.<\/p>\n\n<h4>Stripe Payments (optional)<\/h4>\n\n<p>When the site administrator configures Stripe API keys (Secret and Publishable) under Conference \u2192 Setup, and a participant chooses Stripe at checkout, the plugin:<\/p>\n\n<ul>\n<li>Loads Stripe.js from <code>https:\/\/js.stripe.com<\/code> on the registration page.<\/li>\n<li>Creates a PaymentIntent on Stripe's servers via the Stripe PHP SDK.<\/li>\n<li>Stripe Elements (an iframe hosted by Stripe) collects the card data directly; the card number never touches the WordPress server.<\/li>\n<li>Optionally receives webhook callbacks from Stripe to confirm payment status.<\/li>\n<\/ul>\n\n<p>What data is sent to Stripe:<\/p>\n\n<ul>\n<li>Payment amount and currency.<\/li>\n<li>Participant email address (for Stripe receipts).<\/li>\n<li>Billing details if provided by the participant.<\/li>\n<li>Registration ID and registration number as metadata.<\/li>\n<\/ul>\n\n<p>When:<\/p>\n\n<ul>\n<li>Only when a participant selects Stripe as the payment method and submits the registration form.<\/li>\n<li>When Stripe sends a webhook back to the site (server-to-server callback).<\/li>\n<\/ul>\n\n<p>Links:<\/p>\n\n<ul>\n<li>Stripe Terms of Service: <a href=\"https:\/\/stripe.com\/legal\/ssa\">https:\/\/stripe.com\/legal\/ssa<\/a><\/li>\n<li>Stripe Privacy Policy: <a href=\"https:\/\/stripe.com\/privacy\">https:\/\/stripe.com\/privacy<\/a><\/li>\n<\/ul>\n\n<h4>IPAex Font Download (PDF generation)<\/h4>\n\n<p>To render Japanese text in PDF documents (invoice, receipt), the plugin needs the open-source IPAex Gothic and IPAex Mincho fonts. From the admin Dashboard you can install them with one click; the plugin then downloads the font files (one-time, per font). No user data is transmitted \u2014 it is a file download only. If the server cannot reach the download host, you can instead upload the <code>.ttf<\/code> files directly from the Dashboard (no external connection required).<\/p>\n\n<ul>\n<li>Download host (mirror maintained by the plugin author): <a href=\"https:\/\/cs24.biz\/conference\/fonts\/\">https:\/\/cs24.biz\/conference\/fonts\/<\/a><\/li>\n<li>Data sent: none (file download only)<\/li>\n<li>The download URL can be overridden via the <code>conf_manager_font_source_url<\/code> filter.<\/li>\n<li>Original font source \/ IPAex Font License (IPA, Information-technology Promotion Agency): <a href=\"https:\/\/moji.or.jp\/ipafont\/license\/\">https:\/\/moji.or.jp\/ipafont\/license\/<\/a><\/li>\n<\/ul>\n\n<h3>Development \/ Building from source<\/h3>\n\n<p>The admin and public interfaces are built with React (JSX). The human-readable\nsource for the compiled, minified bundles <code>build\/admin-app.js<\/code> and\n    build\/public-app.js is shipped inside this plugin under the <code>src\/<\/code> directory:<\/p>\n\n<ul>\n<li><code>src\/admin\/<\/code>  \u2014 source for <code>build\/admin-app.js<\/code> (admin dashboard app)<\/li>\n<li><code>src\/public\/<\/code> \u2014 source for <code>build\/public-app.js<\/code> (public registration \/ MyPage app)<\/li>\n<\/ul>\n\n<p>Build toolchain: the project uses <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a>\n(a wrapper around webpack and Babel). The webpack configuration is included as\n    webpack.config.js, and all dependencies and build scripts are declared in\n    package.json (with <code>package-lock.json<\/code> for reproducible installs).<\/p>\n\n<p>To rebuild the compiled assets from source:<\/p>\n\n<ol>\n<li>Install Node.js 18+ and npm.<\/li>\n<li>From the plugin directory, run <code>npm install<\/code>.<\/li>\n<li>Run <code>npm run build<\/code>. This regenerates <code>build\/admin-app.js<\/code> and\n   build\/public-app.js (and their <code>*.asset.php<\/code> dependency manifests).\nUse <code>npm start<\/code> for an unminified development watch build.<\/li>\n<\/ol>\n\n<p>Third-party libraries bundled into the compiled JavaScript (all open source,\ninstalled from the public npm registry and declared in <code>package.json<\/code>):<\/p>\n\n<ul>\n<li><code>@stripe\/react-stripe-js<\/code> and <code>@stripe\/stripe-js<\/code> \u2014 Stripe Elements payment UI (MIT)<\/li>\n<li><code>html5-qrcode<\/code> \u2014 QR code scanner used for participant check-in (Apache-2.0)<\/li>\n<\/ul>\n\n<p>WordPress-provided packages (<code>wp-element<\/code>, <code>wp-components<\/code>, <code>wp-api-fetch<\/code>,\n    wp-i18n, <code>react<\/code>, <code>react-jsx-runtime<\/code>) are declared as externals and are NOT\nbundled \u2014 they are loaded from WordPress core at runtime.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>Go to \"Conference\" in the admin menu to start configuring your event.<\/li>\n<li>(Optional) To accept credit card payments, obtain Stripe API keys from your Stripe account and enter them in Conference \u2192 Setup.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20charge%20any%20fees%3F\"><h3>Does this plugin charge any fees?<\/h3><\/dt>\n<dd><p>No. The plugin itself is free and GPL-licensed, and nothing in it is locked, time-limited or unlocked by payment. If you enable Stripe payments, Stripe's standard transaction fees apply and payments go directly to your own Stripe account \u2014 this plugin does not take any percentage.<\/p><\/dd>\n<dt id=\"is%20there%20a%20paid%20version%3F\"><h3>Is there a paid version?<\/h3><\/dt>\n<dd><p>The plugin author distributes a separate Pro edition with additional features for larger conferences. It is a different plugin, sold and updated outside WordPress.org, and it is not required to use this one. No part of it is included here, and no feature of this plugin is withheld pending an upgrade. The Conference &gt; What's New screen lists what is in this plugin and what the Pro edition adds.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20japanese%3F\"><h3>Does the plugin support Japanese?<\/h3><\/dt>\n<dd><p>Yes. The plugin is fully internationalized and includes Japanese translations. PDF documents use IPA fonts for proper Japanese rendering.<\/p><\/dd>\n<dt id=\"what%20are%20the%20server%20requirements%3F\"><h3>What are the server requirements?<\/h3><\/dt>\n<dd><p>WordPress 6.9 or later, PHP 8.4 or later, and MariaDB 10.5 or later (or MySQL 8.0+).<\/p><\/dd>\n<dt id=\"how%20is%20personal%20data%20protected%3F\"><h3>How is personal data protected?<\/h3><\/dt>\n<dd><p>Email addresses, phone numbers, and postal addresses are encrypted with AES-256-GCM before they are written to the database.<\/p>\n\n<p>For the strongest protection, define <code>CONF_MANAGER_ENCRYPTION_KEY<\/code> in <code>wp-config.php<\/code> before activating the plugin (it must be at least 16 characters; a shorter value is ignored and the fallback below is used instead). The key then lives outside the database, so a database-only compromise \u2014 an SQL injection, or a leaked backup \u2014 does not expose the key along with the data it protects.<\/p>\n\n<p>If that constant is not defined, the plugin generates a random key on first activation and stores it in <code>wp_options<\/code>, so that encryption works without any setup. This is the default. Note that the key then resides in the same database as the data it encrypts.<\/p>\n\n<p>Conference \u2192 Setup shows which of the two modes your site is using.<\/p>\n\n<p>Important: do not add or change the encryption key once the plugin has stored data. Decryption always uses the key currently in effect, so replacing it makes existing encrypted data permanently unreadable.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Fixed: a shortcode naming a view that only exists in the Pro edition \u2014 for example [conf_manager view=\"reviewer-apply\"] or view=\"sponsors\" \u2014 quietly displayed the attendee registration form instead. Anyone opening what was meant to be a reviewer application or a sponsor listing could submit a registration, and it was recorded as a real one. Those views now stop instead of falling back, and a note explaining why is shown to users who can edit the page. A mistyped view name still falls back to the registration form, as before.<\/li>\n<li>Fixed: the one-time code for My Page was limited to 3 requests per hour per IP address, with a one hour lockout. At a university, a company or a conference venue, where many people share a single public IP address, the fourth person to request a code locked everyone out for an hour. Because the send itself was refused, no code arrived and the cause was invisible from the organiser's side. The limit is now 50 per hour with a ten minute lockout, while the existing per-address limit of 5 per hour continues to stop abuse aimed at one mailbox.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fixed: exporting members to CSV returned at most 100 rows. The export asked for up to 10,000, but the underlying search caps a request at 100, so the file was silently short \u2014 it looked like a complete export. It now pages through every matching record. If an export ever reaches the 20,000 row safety limit, the file says so on its last line instead of ending quietly.<\/li>\n<li>Fixed: lists that page through records were ordered by a value that repeats \u2014 the date a record was created, or an event's start date. Rows sharing that value have no guaranteed order between pages, so a record could appear twice or be passed over. Every paged list now falls back to the record id, which is unique.<\/li>\n<li>Fixed: after a successful encryption key rotation the plugin still warned that data could not be read, because it kept comparing against the previous key. The warning is now cleared when the rotation completes with no errors \u2014 and deliberately kept when any record failed, since that is exactly when the warning is worth seeing.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Fixed: the encryption key warning told every site to restore the key in wp-config.php, even when the key was never kept there. Sites installed with the default settings keep an automatically generated key in the database instead, so that advice sent administrators looking for something that was not there. The warning now says where the key actually is.<\/li>\n<li>Fixed: in the most common way this warning appears \u2014 adding the CONF_MANAGER_ENCRYPTION_KEY constant to wp-config.php on a site that had been running on the automatically generated key \u2014 the previous key is still held in the database, and the warning now says so and how to put it back. That case is fully recoverable in one step; it previously read as though the data were lost.<\/li>\n<li>Security: dismissing the encryption key warning now requires submitting the form's button. It was previously a link, and a link that changes state can be followed by a browser or extension prefetching it, which would have moved the reference point forward and removed the warning without anyone clicking it \u2014 erasing the only sign that the key had changed. Requests that are not form submissions are refused.<\/li>\n<li>Fixed: the key rotation routine paged through records by position rather than by record, while updating those same records as it went. Nothing guaranteed the order between pages, so a record could be passed over and left encrypted with the previous key. It now advances by record id, and stops if a page fails to advance.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Security: the plugin now notices when the encryption key changes and says so in the admin area. Personal data encrypted with the previous key cannot be read until that key is restored \u2014 the data is intact, but nothing in the plugin can recover it on its own, so the warning appears while the mistake is still easy to undo. Only a hash of the key is stored; the key itself never is.<\/li>\n<li>Fixed: the key rotation routine skipped any table without a \"status\" column and still reported success, which would have left some records readable only with the old key.<\/li>\n<li>The Setup screen no longer claims that encrypted data is unreadable if the database is compromised, regardless of where the key is kept. That is true only when the key is defined in wp-config.php. With the default automatic key, the key lives in the same database as the data, and the screen now says so.<\/li>\n<li>The readme's answer on personal data protection now states which key location is recommended and why, that a key shorter than 16 characters is ignored, and that adding or changing the key after data has been stored makes existing data permanently unreadable.<\/li>\n<li>Removed unused code that generated a fresh encryption key. It was never reachable, but wiring it up would have made existing encrypted data unrecoverable.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: a \"What's New\" screen under the Conference menu, listing what this plugin can do \u2014 newest additions first, with the version each one arrived in \u2014 followed by what the separately distributed Pro edition adds. The screen is static: it renders no images, makes no external requests, and stores nothing.<\/li>\n<li>The readme now states plainly that a separate Pro edition exists. This plugin is unchanged in what it does: every feature it ships remains fully functional, and none of the Pro edition's code is included in this package.<\/li>\n<\/ul>\n\n<h4>1.1.12<\/h4>\n\n<ul>\n<li>Fix: sites that had already skipped a database upgrade are now repaired. Before 1.1.11, activating the plugin recorded the schema version without running the pending upgrades, which left the recorded version up to date while the data was not. Because the version already looked current, 1.1.11 alone could not detect or repair those sites. This release re-runs the 1.1.9 and 1.1.10 data upgrades once, so the amount actually received is filled in and refunds made before 1.1.9 are moved into the settlement ledger. Both steps only touch rows that were never migrated, so sites that are already correct are left untouched.<\/li>\n<li>Database schema auto-upgrades to v3.4.0.<\/li>\n<\/ul>\n\n<h4>1.1.11<\/h4>\n\n<ul>\n<li>Fix: pending database migrations were skipped when the plugin was updated by deactivating it, replacing the folder and activating it again. Activation stamped the schema version without running the migrations, so the upgrade steps introduced in 1.1.9 and 1.1.10 never ran on those sites. Activation now runs them. This stops the problem from happening again, but it does not recover a site that had already skipped a migration \u2014 see 1.1.12, which does. Sites updated through the normal WordPress plugin updater were never affected.<\/li>\n<\/ul>\n\n<h4>1.1.10<\/h4>\n\n<ul>\n<li>Fix: refunds issued before the settlement ledger was introduced in 1.1.9 were not counted, so the net amount received was overstated by the refunded amount and the payment could be shown as fully settled. Those refunds are migrated into the ledger on upgrade. A full refund is migrated using the amount actually received, because full refunds recorded before 1.1.9 stored only the tax-exclusive amount.<\/li>\n<li>Fix: a payment that has been refunded in full is no longer reported as needing a surcharge. A full refund cancels the registration, so the billed amount is no longer outstanding and the payment now counts as settled. Partial refunds are unchanged and are still settled against the difference.<\/li>\n<li>Fix: uploading or deleting an abstract template on the event screen did nothing because of a missing script import.<\/li>\n<li>Database schema auto-upgrades to v3.3.0.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Payments: the billed amount and the amount actually received are now tracked separately. When confirming a payment you can record the real amount received (for example when a bank transfer fee was deducted) together with a handover note for the reception desk or accounting. The payment list gains Billed, Paid and Difference columns and highlights rows that still need attention.<\/li>\n<li>Payments: a single \"Settle\" dialog replaces the old refund dialog and covers all four cases \u2014 refunding the difference, collecting a surcharge, refunding in full and cancelling the registration, and correcting a mis-recorded paid amount. Refunds and surcharges are kept as a dated ledger with the method and the staff member who handled them, and are reflected in the event totals.<\/li>\n<li>Participants: a registration's fee category can now be corrected after payment has been received. The billed amount is updated while the amount actually received is left untouched, so the resulting difference is surfaced as \"Refund due\" or \"Surcharge due\" instead of being silently lost. Receipts that were already issued are regenerated under the same receipt number.<\/li>\n<li>Participants: the list is now scoped to a single event (defaulting to the most recent one), shows status and settlement badges, and consolidates category correction and status changes into one \"Edit \/ Payment\" dialog.<\/li>\n<li>Fix: full refunds are now calculated on the tax-inclusive amount actually received. Previously a full refund recorded only the tax-exclusive amount, so a \u00a58,800 payment was recorded as an \u00a58,000 refund while Stripe refunded the full \u00a58,800.<\/li>\n<li>Fix: payments reconciled before this release, which carry no recorded paid amount, have it backfilled from the billed amount on upgrade. Without this, correcting a fee category would move the substituted value along with the billed amount and a needed refund would never be detected.<\/li>\n<li>CSV export gains paid amount, refund, surcharge, net paid, difference and handover-note columns, and no longer quotes plain numbers so they open as numbers in Excel.<\/li>\n<li>Payment confirmation emails now show the billed amount and the amount received side by side.<\/li>\n<li>Database schema auto-upgrades to v3.2.0.<\/li>\n<li>Updated the bundled Japanese translation for the new strings.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Improve: email verification (OTP) and My Page login-code emails now include the sender site name, purpose, and a contact footer (taken from your site settings) instead of a bare code. This reduces the chance of the message being flagged as phishing and rejected or spam-foldered by strict mail providers (e.g. Yahoo! Japan).<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Fix: editing and saving a member who has no member number no longer fails with \"Failed to update member.\" Previously, when two or more members had no member number, saving the second such member triggered a unique-key conflict on an empty member number. Empty member numbers are now stored as NULL (consistent with member creation), so any number of members can be saved without a member number.<\/li>\n<li>Members: added a little more spacing between each field label and the control above it in the New\/Edit Member dialog for easier reading.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Receipts: participants can now edit the addressee name and company\/department of their receipt from My Page and have the PDF reissued under the same receipt number (so only one valid receipt ever exists). Useful when payment was made under a company, workplace or family name. Ownership is verified before editing, and the proviso text is unchanged.<\/li>\n<li>Registrations: added an optional bank-transfer name note field, so a participant paying by bank transfer under a different account name (for example a company or family member) can tell the organizer the name the transfer will arrive under. It is shown to administrators on the Participants and Payments screens and is never printed on the receipt.<\/li>\n<li>Updated the bundled Japanese translation for the new strings.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Notifications: the recipient for the new-registration admin notice is now configurable on the Setup screen. You can enter one or more addresses (comma-separated); leaving it blank falls back to the WordPress admin email. The notice is enabled by default and includes a link to the admin dashboard while keeping personal contact details out of the email body.<\/li>\n<li>Participants: administrators can now correct a registration's fee category and on-site\/online participation type from the Participants screen. The fee, tax, label and status are recalculated automatically; a pending payment amount and any issued invoice are kept in sync. Editing is limited to unpaid (pending\/confirmed) individual registrations.<\/li>\n<li>Fix: the admin screen no longer goes blank when publishing a newly created event (and similar actions). A display-error boundary now recovers gracefully with a reload prompt instead of a white screen.<\/li>\n<li>Updated the bundled Japanese translation for the new strings.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Free events: registrations whose total is \u00a50 are now confirmed automatically (no payment record is created, and the confirmation email omits the bank-transfer details). Applies to both individual and group registrations.<\/li>\n<li>Event editor: fee fields now accept and keep a value of 0 (previously 0 was cleared to blank), with a placeholder and a note clarifying that blank or 0 means free. Added a delete button for custom fee types in the on-site fee table.<\/li>\n<li>Safety: uninstall now keeps your data by default, and a duplicate-load guard prevents fatal errors when an older copy of the plugin remains installed in another folder.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Internationalization: the plugin source language is now English. All user-facing strings in the PHP backend and the React admin\/registration screens use English source text with <code>__()<\/code>\/<code>_e()<\/code> and the <code>conferencemanager<\/code> text domain, so the plugin can be translated into any language via translate.wordpress.org. The bundled Japanese translation (<code>languages\/conferencemanager-ja.po<\/code>\/<code>.mo<\/code> and the React translation JSON) provides the complete Japanese UI as before.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Plugin Review feedback response (from the v1.1.1 submission):\n\n<ul>\n<li>Trialware: removed all online-meeting (Zoom\/Meet\/Teams) and Peatix integration fields from the core plugin (database columns, admin UI, REST handling and documentation). These belong to separately distributed add-ons; the core plugin no longer ships any locked or skipped feature code. On-site\/online participation fee tiers remain fully functional.<\/li>\n<li>Third-party libraries: removed the unused <code>chillerlan\/php-qrcode<\/code> and <code>web-auth\/webauthn-lib<\/code> dependencies (passkey support is implemented with native PHP), updated <code>stripe\/stripe-php<\/code> to 20.2.0, and updated the bundled <code>setasign\/fpdi<\/code> to 2.6.7 (security advisory CVE-2026-45802).<\/li>\n<li>Writable data location: downloaded\/uploaded PDF fonts are now stored under <code>wp-content\/uploads\/conf-manager\/fonts\/<\/code> instead of inside the plugin folder, so plugin updates and read-only installs are unaffected.<\/li>\n<li>REST API: the public fee-calculation endpoint (<code>\/public\/events\/{id}\/fee<\/code>) now returns 404 for non-published events, matching the event-detail endpoint, so unpublished pricing is never exposed.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Plugin Review feedback response (from the v1.1.0 submission):\n\n<ul>\n<li>Source code: the React\/JSX source for the compiled <code>build\/admin-app.js<\/code> and <code>build\/public-app.js<\/code> bundles is now shipped inside the plugin (<code>src\/<\/code>), together with the build configuration (<code>webpack.config.js<\/code>, <code>package.json<\/code>, <code>package-lock.json<\/code>). See the new \"Development \/ Building from source\" section.<\/li>\n<li>Core files: moved <code>require_once ABSPATH . 'wp-admin\/includes\/file.php'<\/code> so it immediately precedes the <code>download_url()<\/code> \/ <code>wp_handle_upload()<\/code> call that needs it.<\/li>\n<li>REST API: token-authenticated public endpoints (MyPage, my registrations, group staff, email preferences, logout) now validate the CSRF token and session token in their <code>permission_callback<\/code>.<\/li>\n<li>Privacy: the public email-based member existence check no longer returns any personal data (name); it returns only an existence flag and non-identifying metadata, protected by combined IP + email rate limiting.<\/li>\n<li>Removed HEREDOC syntax: the default Terms-of-Service content is now rendered from a template partial via output buffering (<code>templates\/default-terms-content.php<\/code>).<\/li>\n<\/ul><\/li>\n<li>Fix: The \"fonts not installed\" admin notice linked to the wrong page slug, causing a \"you do not have permission\" error; it now opens the Dashboard correctly.<\/li>\n<li>Improvement: PDF fonts (IPAex Gothic \/ Mincho) are now downloaded from the plugin author's own mirror (with automatic retry), and a manual <code>.ttf<\/code> upload option was added to the Dashboard for servers that cannot reach the download host. The download URL is filterable via <code>conf_manager_font_source_url<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Plugin Review feedback response (from the initial v1.0.3 submission):\n\n<ul>\n<li>Removed optional paid add-on gating; all features included in this plugin are fully functional and free.<\/li>\n<li>Removed inline <code>&lt;style&gt;<\/code> tags from PDF templates; PDF stylesheets are now loaded from dedicated CSS files.<\/li>\n<li>Added Stripe payment integration (requires the site administrator's own Stripe API keys).<\/li>\n<li>Documented all external services (Stripe, IPA fonts) in the External Services section below.<\/li>\n<li>Audited every REST API route to ensure <code>permission_callback<\/code> is set appropriately for the route's access requirements.<\/li>\n<li>Removed <code>load_plugin_textdomain()<\/code> (translations are now loaded automatically by WordPress).<\/li>\n<li>Added <code>composer.json<\/code> to the distribution package.<\/li>\n<\/ul><\/li>\n<li>New: Email opt-in\/opt-out feature for compliance with the Japanese Anti-Spam Email Act.<\/li>\n<li>New: \"Email Preferences\" tab in the member's MyPage.<\/li>\n<li>New: RFC 8058 compliant List-Unsubscribe header linking to MyPage.<\/li>\n<li>Fix: Unified text domain to <code>conferencemanager<\/code>; added translators comments and <code>phpcs:ignore<\/code> comments for safe dynamic SQL queries.<\/li>\n<li>Database: Schema upgraded to v3.0.0; unused add-on tables are no longer created.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Initial submission to the WordPress.org plugin directory.<\/li>\n<\/ul>","raw_excerpt":"Academic conference management plugin \u2014 registration, payment, and document automation for scholarly events.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/299592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=299592"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/creativestrategy24"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=299592"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=299592"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=299592"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=299592"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=299592"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=299592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}