{"id":10742,"date":"2010-09-30T18:28:37","date_gmt":"2010-09-30T18:28:37","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/noshop\/"},"modified":"2026-08-04T03:36:03","modified_gmt":"2026-08-04T03:36:03","slug":"noshop","status":"publish","type":"plugin","link":"https:\/\/cor.wordpress.org\/plugins\/noshop\/","author":6971216,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"4.7","requires_php":"","requires_plugins":null,"header_name":"NoShop","header_author":"Jesper Angelo","header_description":"","assets_banners_color":"0c1117","last_updated":"2026-08-04 03:36:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"http:\/\/jesper.angelo.net\/wordpress\/noshop\/","header_author_uri":"http:\/\/jesper.angelo.net\/","rating":5,"author_block_rating":0,"active_installs":10,"downloads":15612,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.3":{"tag":"0.3","author":"dkguru","date":"2010-09-30 18:33:10"},"0.3.1":{"tag":"0.3.1","author":"dkguru","date":"2010-09-30 18:40:16"},"0.9.5":{"tag":"0.9.5","author":"dkguru","date":"2026-08-03 07:12:21"},"1.0.0":{"tag":"1.0.0","author":"dkguru","date":"2026-08-04 03:36:03"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":"1"},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3632447,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3632447,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3632447,"resolution":"772x250","location":"assets","locale":"","width":751,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.3","0.3.1","0.9.5","1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3632447,"resolution":"1","location":"assets","locale":"","width":1029,"height":1055},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3632447,"resolution":"2","location":"assets","locale":"","width":1033,"height":1059}},"screenshots":{"1":"NoShop! in action","2":"NoShop! Admin interface"}},"plugin_section":[],"plugin_tags":[245,46339,702,1242],"plugin_category":[45],"plugin_contributors":[87994],"plugin_business_model":[],"class_list":["post-10742","plugin","type-plugin","status-publish","hentry","plugin_tags-list","plugin_tags-noshop","plugin_tags-products","plugin_tags-shop","plugin_category-ecommerce","plugin_contributors-dkguru","plugin_committers-dkguru"],"banners":{"banner":"https:\/\/ps.w.org\/noshop\/assets\/banner-772x250.png?rev=3632447","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/noshop\/assets\/icon-128x128.png?rev=3632447","icon_2x":"https:\/\/ps.w.org\/noshop\/assets\/icon-256x256.png?rev=3632447","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/noshop\/assets\/screenshot-1.jpg?rev=3632447","caption":"NoShop! in action"},{"src":"https:\/\/ps.w.org\/noshop\/assets\/screenshot-2.jpg?rev=3632447","caption":"NoShop! Admin interface"}],"raw_content":"<!--section=description-->\n<p>NoShop Product Page allows you to create a formatted list of products\/items with pictures.<\/p>\n\n<p>This allows you to create a shopping cart like product page or employee list with pictures without having to install and maintain a full shopping cart.<\/p>\n\n<p>Note: This plugin is now version 1.0. - after more than a decade of being dormant, it has been revived and updated for modern WordPress versions. :-)<\/p>\n\n<p>Data is stored in the wordpress database.<\/p>\n\n<p>Pictures has to be pre-uploaded to somewhere and then referenced via URL.<\/p>\n\n<p>For each item you can add specifications tags.<\/p>\n\n<p><a href=\"https:\/\/dkguru.wordpress.com\/2026\/08\/02\/reviving-noshop-after-more-than-a-decade\/\">My blog post<\/a> about reviving this plugin.<\/p>\n\n<!--section=installation-->\n<h4>How to install the plugin and get it working.<\/h4>\n\n<ol>\n<li><p>Upload the downloaded <code>noshop<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory. (Or install via WP plugin directory)<\/p><\/li>\n<li><p>Activate the plugin through the 'Plugins' menu in WordPress.<\/p><\/li>\n<li><p>Add products on the option page.<\/p><\/li>\n<li><p>Place <code>[NoShop &lt;category name&gt;]<\/code> in your page.<\/p><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20is%20this%20so%20clunky\"><h3>Why is this so clunky<\/h3><\/dt>\n<dd><p>This plugin is still meant to be simple, but please feel free to visit my page and submit some comments and suggestions :-)<\/p><\/dd>\n<dt id=\"are%20there%20other%20plugins%20that%20works%21\"><h3>Are there other plugins that works!<\/h3><\/dt>\n<dd><p>This works! I am currently using it in a live environment - however - it IS clunky...<\/p>\n\n<p>I wrote is because I couldn't find any other plugins that does the same (simple list of products - no shopping cart - no fancy setup).<\/p>\n\n<p>If you find a solution that's easy to use, feel free to tell me and I'll happily stop wasting my time re-inventing the wheel :-)<\/p><\/dd>\n<dt id=\"i%20know%20this%20plugin%20is%20free%2C%20but...%20can%20i%20contribute%3F\"><h3>I know this plugin is free, but... can I contribute?<\/h3><\/dt>\n<dd><p>If you really want to contribute, please consider donating to my wife's nonprofit <a href=\"http:\/\/donorbox.org\/linp\">Living Islands Donation Page<\/a>. They are doing what they can to support Micronesia and the Pacific Islands. Any donation is greatly appreciated.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public (re-)release in 2026<\/li>\n<\/ul>\n\n<h4>0.9.5<\/h4>\n\n<ul>\n<li>Text domain and cache group finalization\n\n<ul>\n<li>Reverted text domain to the canonical 'noshop' used by the plugin and ensured all i18n calls use that domain.<\/li>\n<li>Standardized internal cache groups to 'noshop' for consistency.<\/li>\n<li>Updated final version metadata and readme entries for 0.9.5.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>0.9.4<\/h4>\n\n<ul>\n<li>Final sweep &amp; release housekeeping\n\n<ul>\n<li>Finalized escaping of all admin outputs and form fields; ensured internationalization domain is present on strings.<\/li>\n<li>Replaced remaining direct $_SERVER reads with wp_unslash-ed locals to satisfy static checks.<\/li>\n<li>Removed development logging (error_log) from production paths.<\/li>\n<li>Added object caching (wp_cache_get\/wp_cache_set) for product lists, product lookups and specs to reduce DB load.<\/li>\n<li>Replaced unlink() in tests with wp_delete_file() and added ABSPATH guards to test files.<\/li>\n<li>Prepared release notes and created release ZIP (noshop-0.9.3.zip) in the workspace root.<\/li>\n<li>Bumped plugin version to 0.9.4.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>0.9.3<\/h4>\n\n<ul>\n<li>Hardening &amp; Compatibility: Addressed plugin-checker findings and improved WP best-practices.\n\n<ul>\n<li>Added ABSPATH protection to prevent direct file access in main plugin file and tests.<\/li>\n<li>Replaced plugin-defined global is_ssl() with a namespaced fallback (noshop_is_ssl) and unslashed $_SERVER access.<\/li>\n<li>Removed legacy global path variables; use plugin_dir_url()\/plugin_dir_path() instead.<\/li>\n<li>Enqueued front-end stylesheet via wp_enqueue_style() on wp_enqueue_scripts instead of echoing  tags.<\/li>\n<li>Replaced raw SQL and prepared interpolations with WPDB helpers: $wpdb-&gt;insert, $wpdb-&gt;update, $wpdb-&gt;delete, and preserved $wpdb-&gt;prepare only for placeholders.<\/li>\n<li>Escaped all admin outputs (esc_html \/ esc_attr \/ esc_url \/ esc_textarea) and used checked() helper for checkboxes.<\/li>\n<li>Ensured admin form actions use esc_url() and preserved nonces (wp_nonce_field + check_admin_referer).<\/li>\n<li>Guarded debug logging (error_log) behind WP_DEBUG.<\/li>\n<li>Added ABSPATH guards to PHPUnit test files.<\/li>\n<li>Updated readme header (Requires at least 4.7, Tested up to 7.0) and bumped Stable tag to 0.9.3.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>0.9.2<\/h4>\n\n<ul>\n<li>License: Updated license to GNU General Public License version 3 (GPLv3).\n\n<ul>\n<li>Added full license file at trunk\/COPYING.<\/li>\n<li>Updated plugin header and readme to reference GPLv3.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>0.9.1<\/h4>\n\n<ul>\n<li>Security &amp; Compatibility: Updated for PHP 8+ and WordPress 7 compatibility.\n\n<ul>\n<li>Converted old PHP4 constructor to modern __construct and removed unsafe static calls.<\/li>\n<li>Converted createtable() and createsubtable() to instance methods and updated call sites.<\/li>\n<li>Ensured callbacks use array(callback) style where required.<\/li>\n<\/ul><\/li>\n<li>Sanitization &amp; Hardening\n\n<ul>\n<li>Replaced legacy stripslashes\/addslashes\/mysql_real_escape_string usage with wp_unslash + sanitize_text_field, sanitize_textarea_field, esc_url_raw and intval.<\/li>\n<li>Added nonces (wp_nonce_field + check_admin_referer) to admin forms to protect against CSRF.<\/li>\n<li>Escaped outputs (esc_url \/ esc_html) for admin notices and links.<\/li>\n<\/ul><\/li>\n<li>Template &amp; Theming\n\n<ul>\n<li>Added load_template() helper so themes can override table.template.xhtml and subtable.template.xhtml by placing files in theme\/noshop\/.<\/li>\n<\/ul><\/li>\n<li>Admin UX &amp; Error Reporting\n\n<ul>\n<li>Added admin notices and error_log entries when the plugin instance is missing and a shortcode could not be rendered.<\/li>\n<li>Added settings messages for DB operations (add\/update\/delete) using add_settings_error\/settings_errors.<\/li>\n<\/ul><\/li>\n<li>Tests\n\n<ul>\n<li>Added PHPUnit tests for basic class existence, shortcode replacement and full template replacement flow (trunk\/tests\/).<\/li>\n<\/ul><\/li>\n<li>Misc\n\n<ul>\n<li>Replaced hardcoded PayPal donate form with a Donorbox link (http:\/\/donorbox.org\/linp).<\/li>\n<li>Replaced legacy path handling with plugin_dir_url()\/plugin_dir_path() and admin_url().<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>0.8.4<\/h4>\n\n<ul>\n<li>Change: Reversed This ChangeLog<\/li>\n<li>New: Added {hashtitle} that will take you directly to a product on the page (See table.template.xhtml for example)<\/li>\n<li>New: Added {autourlbegin} and {autourlend} that will create the A HREF tag for you, but NOT do so if you do not have an URL for the product.\n   {url} still works and is still used for the product image so the template has an example of both.<\/li>\n<\/ul>\n\n<h4>0.8.3<\/h4>\n\n<ul>\n<li>Fix: Corrected call to dbDelta() and update_option(). Database should now upgrade without need for deactivate\/activate<\/li>\n<\/ul>\n\n<h4>0.8.2<\/h4>\n\n<ul>\n<li>Added note about multi-categories.<\/li>\n<li>Added link to settings page to Wordpress Plugin Directory Support page for this plugin.<\/li>\n<\/ul>\n\n<h4>0.8.1<\/h4>\n\n<ul>\n<li>Tested on WordPress 3.4.2 - Passed!<\/li>\n<li>DB Version updated to 0.8.1 to keep in sync with plugin<\/li>\n<\/ul>\n\n<h4>0.8<\/h4>\n\n<ul>\n<li>New: Sorting index for entries<\/li>\n<li>New: Added Category name and index as variable to template (use {cat} and {ndx}).<\/li>\n<li>New: Added Category name and index as HTML comment in table.template.<\/li>\n<li>Fix: Multiple list on one page NOW WORKS! (I had a DAH moment :-)<\/li>\n<\/ul>\n\n<h4>0.7.8<\/h4>\n\n<ul>\n<li>Fix: Whoops, got my versioning out of sync. Fixed. :-)<\/li>\n<\/ul>\n\n<h4>0.7.7<\/h4>\n\n<ul>\n<li>Added delete button for products.<\/li>\n<li>Fix: Multiple Lists on same page now working.<\/li>\n<\/ul>\n\n<h4>0.7.6<\/h4>\n\n<ul>\n<li>Fix: Invalid argument supplied for foreach() - Thanks Gayan Hewa!<\/li>\n<\/ul>\n\n<h4>0.7.5<\/h4>\n\n<ul>\n<li>Added donation button. Thank you for considering it :-)<\/li>\n<li>Fixed this readme file (again!)<\/li>\n<\/ul>\n\n<h4>0.7.4<\/h4>\n\n<ul>\n<li>Rewrote CSS and XHTML templates for better CSS<\/li>\n<li>New CSS much leaner<\/li>\n<li>New simpler back end been revised but still buggy (will be released later this week)<\/li>\n<li>This version now allow for custom CSS separate from install<\/li>\n<li>Added width field for value headers<\/li>\n<\/ul>\n\n<h4>0.6<\/h4>\n\n<ul>\n<li>First rewrite. Horrible. Trying to forget.<\/li>\n<\/ul>\n\n<h4>0.5.3<\/h4>\n\n<ul>\n<li>Uh oh. DB didn't update. Temporary fix in there. Plz ignore update error - it's not real :-)<\/li>\n<\/ul>\n\n<h4>0.5.2<\/h4>\n\n<ul>\n<li>Moved output to template based output. Plugin now uses html templates and css for all formatting.<\/li>\n<li>Template per item: table.template.html<\/li>\n<li>Template per specification: subtable.template.html<\/li>\n<li>Keep templates in plugin directory.<\/li>\n<li>ONLY HARDCODED TEMPLATE for now. Later I'll add selectable :-)<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Redesigned options screen to more compact format.<\/li>\n<\/ul>\n\n<h4>0.5<\/h4>\n\n<ul>\n<li>Fixed small errors.<\/li>\n<li>Fixed versioning.<\/li>\n<li>Added imgurlmode field to DB (DB now version 0.5!)<\/li>\n<li>Fixed ' != ` error in dbDelta that prevented DB upgrade!<\/li>\n<\/ul>\n\n<h4>0.4.5<\/h4>\n\n<ul>\n<li>Added screenshots.<\/li>\n<\/ul>\n\n<h4>0.4.4<\/h4>\n\n<ul>\n<li>Added default image to settings.<\/li>\n<\/ul>\n\n<h4>0.4.3<\/h4>\n\n<ul>\n<li>Updated options page: Add specification button added<\/li>\n<li>Updated options page: Showing thumbnail picture preview<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Updated options page: Moved 'Create Product' to a button rather than a checkbox.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Error fix: Added 'static' to NoShop::Products()<\/li>\n<li>Updated this readme.txt<\/li>\n<\/ul>\n\n<h4>0.4<\/h4>\n\n<ul>\n<li>New and improved admin page<\/li>\n<\/ul>\n\n<h4>0.3<\/h4>\n\n<ul>\n<li>First version of admin page<\/li>\n<\/ul>\n\n<h4>0.2<\/h4>\n\n<ul>\n<li>Created functions to show database contents in list<\/li>\n<li>Created CSS<\/li>\n<\/ul>\n\n<h4>0.1<\/h4>\n\n<ul>\n<li>Copied hello.php<\/li>\n<\/ul>","raw_excerpt":"NoShop Product Page allows you to create a list of products\/items with pictures without using a full shopping cart.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/10742","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=10742"}],"author":[{"embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dkguru"}],"wp:attachment":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=10742"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=10742"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=10742"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=10742"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=10742"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=10742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}