{"id":396105,"date":"2026-10-31T11:59:02","date_gmt":"2026-10-31T11:59:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/caselens-before-and-after-gallery\/"},"modified":"2026-10-31T11:58:31","modified_gmt":"2026-10-31T11:58:31","slug":"caselens-before-and-after-gallery","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/caselens-before-and-after-gallery\/","author":16178929,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"CaseLens Before and After Gallery","header_author":"Rodney Lungayan","header_description":"A filterable before and after case gallery. Adds a Gallery Cases post type with procedure categories, patient detail fields you define yourself, and a searchable front-end gallery with before\/after photo pairs.","assets_banners_color":"4d8eb4","last_updated":"2026-10-31 11:58:31","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/rodneylungayan.com\/wordpress-plugins\/caselens-before-after-gallery\/","header_author_uri":"https:\/\/rodneylungayan.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":146,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"rodneylungayan","date":"2026-10-31 11:58:31","revision":3776781}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3776779,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3776779,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3776779,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3776779,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3776779,"resolution":"1","location":"assets","locale":"","width":1280,"height":805},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3776779,"resolution":"2","location":"assets","locale":"","width":1280,"height":960},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3776779,"resolution":"3","location":"assets","locale":"","width":1280,"height":865},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3776779,"resolution":"4","location":"assets","locale":"","width":1280,"height":960},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3776779,"resolution":"5","location":"assets","locale":"","width":1280,"height":960},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3776779,"resolution":"6","location":"assets","locale":"","width":1280,"height":960}},"screenshots":{"1":"The gallery: procedure menu, filter bar and the grid of before\/after cards.","2":"The filter dialog, built from the case fields you defined.","3":"One case: before and after pairs beside the case details.","4":"The case editor, with photo pairs and detail fields.","5":"The Case Fields screen.","6":"Gallery settings."}},"plugin_section":[],"plugin_tags":[11619,16203,210,176050,789],"plugin_category":[43,50],"plugin_contributors":[289908],"plugin_business_model":[],"class_list":["post-396105","plugin","type-plugin","status-publish","hentry","plugin_tags-before-after","plugin_tags-case-study","plugin_tags-gallery","plugin_tags-image-comparison","plugin_tags-portfolio","plugin_category-customization","plugin_category-media","plugin_contributors-rodneylungayan","plugin_committers-rodneylungayan"],"banners":{"banner":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/banner-772x250.png?rev=3776779","banner_2x":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/banner-1544x500.png?rev=3776779","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/icon-128x128.png?rev=3776779","icon_2x":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/icon-256x256.png?rev=3776779","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/screenshot-1.png?rev=3776779","caption":"The gallery: procedure menu, filter bar and the grid of before\/after cards."},{"src":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/screenshot-2.png?rev=3776779","caption":"The filter dialog, built from the case fields you defined."},{"src":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/screenshot-3.png?rev=3776779","caption":"One case: before and after pairs beside the case details."},{"src":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/screenshot-4.png?rev=3776779","caption":"The case editor, with photo pairs and detail fields."},{"src":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/screenshot-5.png?rev=3776779","caption":"The Case Fields screen."},{"src":"https:\/\/ps.w.org\/caselens-before-and-after-gallery\/assets\/screenshot-6.png?rev=3776779","caption":"Gallery settings."}],"raw_content":"<!--section=description-->\n<p>CaseLens turns a set of before and after photos into a browsable gallery of cases.<\/p>\n\n<p>It adds its own <strong>Gallery Cases<\/strong> post type and a hierarchical <strong>Procedures<\/strong> taxonomy, so your cases stay separate from posts and pages. Each case holds any number of before\/after photo pairs plus the detail fields you define, and visitors can narrow the gallery down by procedure, by those details, or by case number.<\/p>\n\n<p>Nothing else is needed: no page builder, no custom field plugin and no particular theme.<\/p>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li>A <strong>Gallery Cases<\/strong> post type with its own admin menu, list columns and editor.<\/li>\n<li>A hierarchical <strong>Procedures<\/strong> taxonomy for grouping cases, with parents and children.<\/li>\n<li><strong>Before and after photo pairs<\/strong> on each case, chosen from the media library, reorderable by drag.<\/li>\n<li><strong>Case fields you define yourself<\/strong> \u2014 text, number, single choice and multiple choice \u2014 grouped however you like.<\/li>\n<li>A front-end gallery with a procedure menu, a filter dialog built from your own fields, a case-number search and \"Load more\".<\/li>\n<li>Clean URLs: <code>\/gallery\/<\/code>, <code>\/gallery\/procedure\/<\/code> and <code>\/gallery\/procedure\/case\/<\/code>, with 301 redirects from older query-string links.<\/li>\n<li>Titles, descriptions and canonical tags for procedure pages, on plain WordPress and through Yoast SEO when it is active.<\/li>\n<li>Templates you can override from your theme, and filters for the generated meta.<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<p>The first page of cases is rendered by PHP, so the gallery is visible to visitors and to search engines without JavaScript. The script then adds procedure switching without a page reload, the filter dialog and the \"Load more\" button, all through the plugin's own REST routes under <code>caselens\/v1<\/code>.<\/p>\n\n<h4>Shortcode<\/h4>\n\n<p>Place the gallery on any page:<\/p>\n\n<pre><code>[caselens_gallery]\n<\/code><\/pre>\n\n<p>Attributes:<\/p>\n\n<ul>\n<li><code>procedure<\/code> \u2014 show only one procedure, by slug.<\/li>\n<li><code>per_page<\/code> \u2014 cases per page (3 to 60).<\/li>\n<li><code>columns<\/code> \u2014 grid columns (1 to 6).<\/li>\n<li><code>sidebar<\/code> \u2014 <code>yes<\/code> or <code>no<\/code>, for the procedure menu.<\/li>\n<li><code>filters<\/code> \u2014 <code>yes<\/code> or <code>no<\/code>, for the filter button.<\/li>\n<li><code>search<\/code> \u2014 <code>yes<\/code> or <code>no<\/code>, for the case-number search.<\/li>\n<\/ul>\n\n<p>For example: <code>[caselens_gallery procedure=\"breast\" columns=\"2\" sidebar=\"no\"]<\/code><\/p>\n\n<h4>Who it suits<\/h4>\n\n<p>Any site that shows paired results: clinics and practices, dentists, hair and beauty studios, renovation and landscaping firms, detailers, restorers, cleaning companies, trainers \u2014 anywhere a before and a after picture tell the story.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen.<\/li>\n<li>Activate it. A page called <strong>Gallery<\/strong> is created for you, holding the <code>[caselens_gallery]<\/code> shortcode.<\/li>\n<li>Go to <strong>Gallery Cases &gt; Procedures<\/strong> and add the groups your cases belong to.<\/li>\n<li>Go to <strong>Gallery Cases &gt; Case Fields<\/strong> and set the details each case should hold.<\/li>\n<li>Add your first case: give it procedures, add before\/after pairs, fill in the details and publish.<\/li>\n<li>Check <strong>Gallery Cases &gt; Settings<\/strong> for the URL base, wording, colour and grid options.<\/li>\n<\/ol>\n\n<p>If a gallery URL shows a 404 after you change the URL base, open <strong>Settings &gt; Permalinks<\/strong> and click <strong>Save Changes<\/strong>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20advanced%20custom%20fields%20or%20a%20page%20builder%3F\"><h3>Do I need Advanced Custom Fields or a page builder?<\/h3><\/dt>\n<dd><p>No. The plugin is self-contained. Case fields, photo pairs, the gallery and the case layout are all its own.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20layout%3F\"><h3>Can I change the layout?<\/h3><\/dt>\n<dd><p>Yes. Copy <code>templates\/gallery.php<\/code> or <code>templates\/single-case.php<\/code> from the plugin into a <code>caselens<\/code> folder inside your theme \u2014 for example <code>wp-content\/themes\/your-theme\/caselens\/single-case.php<\/code> \u2014 and edit your copy. Your copy is used instead of the plugin's.<\/p>\n\n<p>If your theme provides its own <code>single-caselens_case.php<\/code>, that takes over entirely.<\/p><\/dd>\n<dt id=\"what%20are%20the%20case%20fields%20for%3F\"><h3>What are the case fields for?<\/h3><\/dt>\n<dd><p>They are the rows in the details table beside the photos, and they are what the filter dialog is built from. Tick <strong>Filter<\/strong> on a field and it becomes a filter: choice fields become checkbox lists with counts, number fields become a minimum and maximum. Only values that cases actually have are offered.<\/p><\/dd>\n<dt id=\"does%20the%20gallery%20work%20without%20javascript%3F\"><h3>Does the gallery work without JavaScript?<\/h3><\/dt>\n<dd><p>Yes. The first page of cases and the whole procedure menu are rendered by PHP as ordinary links. JavaScript adds the filter dialog, \"Load more\" and switching procedures without a reload.<\/p><\/dd>\n<dt id=\"will%20deleting%20the%20plugin%20delete%20my%20cases%3F\"><h3>Will deleting the plugin delete my cases?<\/h3><\/dt>\n<dd><p>No, not unless you ask it to. There is a tick box under <strong>Gallery Cases &gt; Settings &gt; Uninstalling<\/strong>; leave it off and deleting the plugin removes only its settings.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20an%20seo%20plugin%3F\"><h3>Does it work with an SEO plugin?<\/h3><\/dt>\n<dd><p>Yes. Procedure pages get a generated title, description and canonical URL. When Yoast SEO is active these go through its own filters, so there is no duplication. The <code>caselens_procedure_meta<\/code> filter lets you change the generated wording.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20on%20a%20multisite%20network%3F\"><h3>Can I use it on a multisite network?<\/h3><\/dt>\n<dd><p>Yes. Activate it per site. Uninstalling cleans up each site in the network.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"A filterable before and after case gallery with its own post type, procedure categories and case detail fields you define yourself.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/396105","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=396105"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rodneylungayan"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=396105"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=396105"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=396105"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=396105"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=396105"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=396105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}