{"id":377488,"date":"2026-10-11T19:14:18","date_gmt":"2026-10-11T19:14:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/virtuelles-schwarzes-brett\/"},"modified":"2026-10-13T12:57:14","modified_gmt":"2026-10-13T12:57:14","slug":"deconde-virtuelles-schwarzes-brett","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/deconde-virtuelles-schwarzes-brett\/","author":23565295,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.10.0","stable_tag":"3.10.0","tested":"7.1.3","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Deconde Virtuelles Schwarzes Brett","header_author":"Manfred Seimetz","header_description":"Virtuelles schwarzes Brett mit Post-it-Zetteln, Foto-Upload und Freigabe-Workflow. Nutzung \u00fcber den Shortcode [schwarzes_brett].","assets_banners_color":"4a3521","last_updated":"2026-10-13 12:57:14","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/ko-fi.com\/deconde","header_plugin_uri":"","header_author_uri":"https:\/\/deconde.de\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":110,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.10.0":{"tag":"3.10.0","author":"deconde","date":"2026-10-13 12:57:14","revision":3743963},"3.9.1":{"tag":"3.9.1","author":"deconde","date":"2026-10-11 19:39:07","revision":3740025}},"upgrade_notice":{"3.10.0":"<p>Adds developer hooks for add-on plugins. No changes to the plugin&#039;s own behaviour; no special steps required.<\/p>","3.9.1":"<p>The credit link under the board is now off by default; re-enable it under Schwarzes Brett \u2192 Settings if you like.<\/p>","3.9.0":"<p>Internal function\/option\/hook names changed prefix from <code>vsb_<\/code> to <code>dvsb_<\/code>, and bundled translation files were removed in favour of translate.wordpress.org. No changes to the plugin&#039;s own features; a Pro add-on built against the old <code>vsb_<\/code> hooks would need to be updated.<\/p>","3.8.0":"<p>Plugin renamed to &quot;Deconde Virtuelles Schwarzes Brett&quot; (text domain changed accordingly). No functional changes, no action required.<\/p>","3.7.1":"<p>Changes the provider credit under the board to &quot;Provided by deconde&quot;. No special steps required for this update.<\/p>","3.7.0":"<p>Adds complete French and Spanish translations. No special steps required for this update.<\/p>","3.6.0":"<p>Adds a complete English translation. No special steps required for this update.<\/p>","3.5.1":"<p>Fixes the backend menu icon display (visibility and size). Update recommended.<\/p>","3.5.0":"<p>Adds an internal extension point for automatic moderation in the optional Pro add-on. No special steps required for this update.<\/p>","3.4.0":"<p>Adds further internal extension points for the optional Pro add-on (colour palettes, categories, CSV export). No special steps required for this update.<\/p>","3.3.0":"<p>Adds internal extension points for the optional Pro add-on. No special steps required for this update.<\/p>","3.2.0":"<p>First release on the WordPress.org plugin directory. No special steps required for this update.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3739999,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3739999,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3740042,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3740042,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.10.0","3.9.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3739999,"resolution":"1","location":"assets","locale":"","width":1280,"height":880},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3739999,"resolution":"2","location":"assets","locale":"","width":796,"height":980},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3739999,"resolution":"3","location":"assets","locale":"","width":1280,"height":448}},"screenshots":{"1":"The public board with approved post-it messages.","2":"Form for submitting a new message.","3":"Moderation view in the backend."}},"plugin_section":[],"plugin_tags":[11403,2316,34972,205,40184],"plugin_category":[44,50],"plugin_contributors":[285895],"plugin_business_model":[],"class_list":["post-377488","plugin","type-plugin","status-publish","hentry","plugin_tags-bulletin-board","plugin_tags-community","plugin_tags-notice-board","plugin_tags-photos","plugin_tags-post-it","plugin_category-discussion-and-community","plugin_category-media","plugin_contributors-deconde","plugin_committers-deconde"],"banners":{"banner":"https:\/\/ps.w.org\/deconde-virtuelles-schwarzes-brett\/assets\/banner-772x250.png?rev=3740042","banner_2x":"https:\/\/ps.w.org\/deconde-virtuelles-schwarzes-brett\/assets\/banner-1544x500.png?rev=3740042","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/deconde-virtuelles-schwarzes-brett\/assets\/icon-128x128.png?rev=3739999","icon_2x":"https:\/\/ps.w.org\/deconde-virtuelles-schwarzes-brett\/assets\/icon-256x256.png?rev=3739999","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/deconde-virtuelles-schwarzes-brett\/assets\/screenshot-1.png?rev=3739999","caption":"The public board with approved post-it messages."},{"src":"https:\/\/ps.w.org\/deconde-virtuelles-schwarzes-brett\/assets\/screenshot-2.png?rev=3739999","caption":"Form for submitting a new message."},{"src":"https:\/\/ps.w.org\/deconde-virtuelles-schwarzes-brett\/assets\/screenshot-3.png?rev=3739999","caption":"Moderation view in the backend."}],"raw_content":"<!--section=description-->\n<p>Virtuelles Schwarzes Brett adds a digital pinboard to your website where visitors and logged-in users can leave short messages as colourful post-it notes \u2014 for example for club, neighbourhood, or community websites.<\/p>\n\n<p>New messages are not publicly visible at first (\"pending\") and only appear on the board once an administrator has approved them in the backend. Posts can automatically disappear from the public board again after a configurable display duration.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li>Shortcode <code>[schwarzes_brett]<\/code> \u2013 the board can be embedded on any page or post.<\/li>\n<li>Form with required fields first name, last name, message (max. 280 characters).<\/li>\n<li>A way to get in touch is required: email OR phone number, shown on the post-it as a clickable <code>mailto:<\/code>\/<code>tel:<\/code> link.<\/li>\n<li>Optional photo upload (JPG, PNG, GIF, WEBP), maximum file size configurable in the backend.<\/li>\n<li>Approval workflow: new posts only become publicly visible after admin approval.<\/li>\n<li>Automatic expiry: admin-configurable display duration per post (0 = unlimited).<\/li>\n<li>Random pastel colour (8 shades) and a slight tilt per note for an authentic pinboard look.<\/li>\n<li>AJAX form, no page reload required.<\/li>\n<li>No WordPress user account needed to submit a message.<\/li>\n<li>Fully translation-ready (text domain <code>deconde-virtuelles-schwarzes-brett<\/code>); translations are provided via translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>Pro Version<\/h4>\n\n<p>There is a separate add-on plugin, <a href=\"https:\/\/deconde.de\/schwarzes-brett-pro\/\">Virtuelles Schwarzes Brett Pro<\/a>, that requires this free plugin and adds features such as multiple boards, categories, automatic moderation, pinned and expiring notes, email notifications, CSV export and custom colour palettes. This free version is complete and fully functional on its own; it contains no locked features, license checks or trial code.<\/p>\n\n<h4>Data Security<\/h4>\n\n<ul>\n<li>All form input is validated and sanitized server-side; all output is escaped appropriately for its context.<\/li>\n<li>Every form-processing action (submitting a message, deleting a message, approving\/rejecting, saving settings) is protected against CSRF with WordPress nonces.<\/li>\n<li>Database access is exclusively done through parameterized queries (<code>$wpdb-&gt;prepare()<\/code>).<\/li>\n<li>Photo uploads are validated against their actual file content (<code>wp_check_filetype_and_ext()<\/code>), not just the file extension.<\/li>\n<li>Approving, rejecting, removing, and all settings are restricted to users with the <code>manage_options<\/code> capability (typically administrators).<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Place the <code>[schwarzes_brett]<\/code> shortcode on any page, e.g. <code>[schwarzes_brett titel=\"Our Team Board\"]<\/code>.<\/li>\n<li>Under \"Schwarzes Brett \u2192 Settings\", adjust the display duration and maximum photo size as needed.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20to%20register%20to%20post%20a%20message%3F\"><h3>Do I need to register to post a message?<\/h3><\/dt>\n<dd><p>No. Submitting a message does not require a WordPress user account.<\/p><\/dd>\n<dt id=\"are%20new%20messages%20published%20immediately%3F\"><h3>Are new messages published immediately?<\/h3><\/dt>\n<dd><p>No. Every new message is \"pending\" at first and only appears on the public board once an administrator has approved it under \"Schwarzes Brett \u2192 Moderation\".<\/p><\/dd>\n<dt id=\"what%20happens%20once%20the%20display%20duration%20expires%3F\"><h3>What happens once the display duration expires?<\/h3><\/dt>\n<dd><p>The post automatically disappears from the public board but stays visible in the backend under \"Published messages\" for reference, until it is manually removed. With a display duration of 0, posts remain visible indefinitely.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20colour%20palette%20or%20the%20character%20limit%3F\"><h3>Can I customize the colour palette or the character limit?<\/h3><\/dt>\n<dd><p>The colour palette can be customized via the <code>dvsb_color_palette<\/code> filter, and the appearance via <code>assets\/style.css<\/code>. The message character limit (default 280 characters) can be changed in the form (<code>maxlength<\/code>) as well as server-side in <code>dvsb_ajax_add_note()<\/code>.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20ready%20for%20other%20languages%3F\"><h3>Is the plugin ready for other languages?<\/h3><\/dt>\n<dd><p>Yes. All text runs through the text domain <code>deconde-virtuelles-schwarzes-brett<\/code>, and WordPress loads the matching translation automatically for you. Translations are provided through <a href=\"https:\/\/translate.wordpress.org\/\">translate.wordpress.org<\/a>; anyone can contribute or improve a translation there.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.10.0<\/h4>\n\n<ul>\n<li>New: neutral developer hooks (filters\/actions) for add-on plugins \u2014 extra form fields, submission validation and status, note classes and header, moderation table columns, and a cleanup action on deletion. Without an add-on, behaviour is unchanged and every message still goes through manual approval.<\/li>\n<li>Changed: the board query now lives in the function <code>dvsb_query_visible_notes()<\/code>.<\/li>\n<\/ul>\n\n<h4>3.9.1<\/h4>\n\n<ul>\n<li>Changed: the \"Provided by deconde\" credit under the board is now optional and disabled by default (Settings \u2192 \"Credit\" checkbox), per WordPress.org guidelines.<\/li>\n<\/ul>\n\n<h4>3.9.0<\/h4>\n\n<ul>\n<li>Changed: removed dormant Pro-only code paths (multi-board, categories, automatic moderation, branding toggle) from the free plugin per the WordPress.org directory guidelines \u2014 these live exclusively in the separate Pro plugin now. The free version's own functionality is unchanged.<\/li>\n<li>Changed: all internal function, option, and hook names now use the <code>dvsb_<\/code> prefix (was <code>vsb_<\/code>) to avoid collisions with other plugins.<\/li>\n<li>Changed: removed <code>load_plugin_textdomain()<\/code> \u2014 not needed for WordPress.org-hosted plugins since WordPress 4.6.<\/li>\n<li>Changed: removed the bundled <code>.po<\/code>\/<code>.mo<\/code> translation files; translations are now provided via translate.wordpress.org.<\/li>\n<li>Fixed: the admin menu icon size is now set via <code>wp_add_inline_style()<\/code> instead of a directly printed <code>&lt;style&gt;<\/code> tag.<\/li>\n<\/ul>\n\n<h4>3.8.0<\/h4>\n\n<ul>\n<li>Changed: plugin renamed to \"Deconde Virtuelles Schwarzes Brett\" and the text domain updated to <code>deconde-virtuelles-schwarzes-brett<\/code> (per WordPress.org plugin directory naming guidelines \u2013 the previous name was too generic). No functional changes.<\/li>\n<\/ul>\n\n<h4>3.7.2<\/h4>\n\n<ul>\n<li>Added: donate link (Ko-fi) in readme.txt.<\/li>\n<\/ul>\n\n<h4>3.7.1<\/h4>\n\n<ul>\n<li>Changed: the credit line under the board now reads \"Provided by deconde\" instead of \"Powered by Virtuelles Schwarzes Brett\" (still links to deconde.de, now with a fitting provider name as link text).<\/li>\n<\/ul>\n\n<h4>3.7.0<\/h4>\n\n<ul>\n<li>New: complete French and Spanish translation (fr_FR, es_ES) for all frontend and backend text.<\/li>\n<\/ul>\n\n<h4>3.6.0<\/h4>\n\n<ul>\n<li>New: complete English translation (en_US and en_GB) for all frontend and backend text.<\/li>\n<\/ul>\n\n<h4>3.5.1<\/h4>\n\n<ul>\n<li>Fix: the backend menu icon was barely visible on the default admin colour scheme (dark icon on a dark menu bar) and rendered oversized in places.<\/li>\n<\/ul>\n\n<h4>3.5.0<\/h4>\n\n<ul>\n<li>New: further extension points for the Pro add-on \u2013 automatic moderation (rejection\/auto-approval before saving). Without Pro, behaviour is unchanged; every message still goes through manual approval.<\/li>\n<\/ul>\n\n<h4>3.4.0<\/h4>\n\n<ul>\n<li>New: further extension points for the Pro add-on \u2013 custom colour palettes, categories\/tags, and CSV export. Without Pro, behaviour is unchanged.<\/li>\n<li>Database table extended with a category column (preparation for Pro).<\/li>\n<\/ul>\n\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>New: defined extension points (filters\/actions) for the optional Pro add-on \u2013 without Pro, behaviour is unchanged.<\/li>\n<li>Database table prepared for the multi-board feature (Pro).<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>Security improvement: photo uploads are additionally validated against their actual file content (not just the file extension).<\/li>\n<li>More robust error handling for failed or oversized photo uploads.<\/li>\n<li>Custom menu icon in the WordPress backend.<\/li>\n<li>Preparation for release on the WordPress.org plugin directory (readme.txt, language files, uninstall routine).<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>New: optional photo upload for messages (JPG, PNG, GIF, WEBP), shown on the post-it.<\/li>\n<li>New: admin-configurable display duration \u2013 approved posts automatically disappear from the public board once it expires.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>New: approval workflow \u2013 new messages must be approved by an administrator before appearing on the board.<\/li>\n<li>Contact info (email or phone number) is a required field from this version on.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First version of the plugin: virtual notice board with post-it notes in 8 pastel colours, form with required fields first name, last name, and message, plus optional contact info.<\/li>\n<\/ul>","raw_excerpt":"Virtual notice board with post-it notes, optional photo upload, and an approval workflow run by an administrator.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/377488","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=377488"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/deconde"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=377488"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=377488"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=377488"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=377488"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=377488"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=377488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}