{"id":47,"date":"2026-05-03T01:15:55","date_gmt":"2026-05-03T01:15:55","guid":{"rendered":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/2026\/05\/03\/listing-pages\/"},"modified":"2026-05-03T01:15:55","modified_gmt":"2026-05-03T01:15:55","slug":"listing-pages","status":"publish","type":"post","link":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/2026\/05\/03\/listing-pages\/","title":{"rendered":"Listing Pages Explained"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Listing Pages Explained<\/h1>\n\n\n<p>A walkthrough of every component on the single listing page \u2014 what it shows, where the data comes from, and how to customize each piece.<\/p>\n\n\n<p>The listing page is a two-column layout: gallery on the left, sticky info card on the right.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Anatomy of the page<\/h2>\n\n\n<svg viewBox=\"0 0 720 480\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"max-width:100%;height:auto;display:block;margin:1rem auto;font-family:system-ui,sans-serif;\">\n  <rect x=\"20\" y=\"20\" width=\"680\" height=\"30\" rx=\"4\" fill=\"#fff\" stroke=\"#cbd5e1\"\/>\n  <text x=\"40\" y=\"40\" font-size=\"11\" fill=\"#5a6f84\">Home \u203a Vehicles \u203a 2018 Honda Civic Sport \u2014 One Owner<\/text>\n\n  <rect x=\"20\" y=\"70\" width=\"440\" height=\"220\" rx=\"6\" fill=\"#FAFAF7\" stroke=\"#cbd5e1\"\/>\n  <text x=\"240\" y=\"180\" text-anchor=\"middle\" font-size=\"14\" fill=\"#5a6f84\" font-weight=\"500\">Featured image (4:3, large)<\/text>\n  <text x=\"35\" y=\"100\" font-size=\"9\" fill=\"#5a6f84\" font-style=\"italic\">A<\/text>\n\n  <rect x=\"20\" y=\"300\" width=\"100\" height=\"60\" rx=\"4\" fill=\"#cbd5e1\"\/>\n  <rect x=\"130\" y=\"300\" width=\"100\" height=\"60\" rx=\"4\" fill=\"#e2e8f0\"\/>\n  <rect x=\"240\" y=\"300\" width=\"100\" height=\"60\" rx=\"4\" fill=\"#e2e8f0\"\/>\n  <rect x=\"350\" y=\"300\" width=\"100\" height=\"60\" rx=\"4\" fill=\"#e2e8f0\"\/>\n  <text x=\"35\" y=\"320\" font-size=\"9\" fill=\"#5a6f84\" font-style=\"italic\">B<\/text>\n\n  <rect x=\"20\" y=\"380\" width=\"80\" height=\"32\" rx=\"5\" fill=\"#fff\" stroke=\"#cbd5e1\"\/>\n  <text x=\"60\" y=\"400\" text-anchor=\"middle\" font-size=\"11\" fill=\"#1a1a1a\">Share<\/text>\n  <rect x=\"110\" y=\"380\" width=\"80\" height=\"32\" rx=\"5\" fill=\"#fff\" stroke=\"#cbd5e1\"\/>\n  <text x=\"150\" y=\"400\" text-anchor=\"middle\" font-size=\"11\" fill=\"#1a1a1a\">Report<\/text>\n\n  <rect x=\"20\" y=\"425\" width=\"440\" height=\"40\" rx=\"5\" fill=\"#fff\" stroke=\"#cbd5e1\"\/>\n  <text x=\"40\" y=\"445\" font-size=\"11\" fill=\"#5a6f84\">\u2014 DESCRIPTION \u2014<\/text>\n  <text x=\"35\" y=\"455\" font-size=\"9\" fill=\"#5a6f84\" font-style=\"italic\">C<\/text>\n\n  <rect x=\"480\" y=\"70\" width=\"220\" height=\"320\" rx=\"6\" fill=\"#fff\" stroke=\"#cbd5e1\"\/>\n  <text x=\"500\" y=\"98\" font-size=\"13\" font-weight=\"700\" fill=\"#1a1a1a\">Listing Title<\/text>\n  <text x=\"500\" y=\"118\" font-size=\"13\" font-weight=\"700\" fill=\"#1a1a1a\">(2 lines)<\/text>\n  <text x=\"500\" y=\"148\" font-size=\"22\" fill=\"#0F4C3A\" font-weight=\"700\">$14,800<\/text>\n  <text x=\"565\" y=\"148\" font-size=\"10\" fill=\"#5a6f84\">or best offer<\/text>\n  <line x1=\"500\" y1=\"165\" x2=\"680\" y2=\"165\" stroke=\"#e2e8f0\"\/>\n\n  <text x=\"500\" y=\"185\" font-size=\"10\" fill=\"#5a6f84\">Condition<\/text>\n  <text x=\"680\" y=\"185\" text-anchor=\"end\" font-size=\"10\" font-weight=\"600\">Like New<\/text>\n  <text x=\"500\" y=\"203\" font-size=\"10\" fill=\"#5a6f84\">Location<\/text>\n  <text x=\"680\" y=\"203\" text-anchor=\"end\" font-size=\"10\" font-weight=\"600\">Brooklyn, NY<\/text>\n  <text x=\"500\" y=\"221\" font-size=\"10\" fill=\"#5a6f84\">Posted<\/text>\n  <text x=\"680\" y=\"221\" text-anchor=\"end\" font-size=\"10\" font-weight=\"600\">3 days ago<\/text>\n  <text x=\"500\" y=\"239\" font-size=\"10\" fill=\"#5a6f84\">Listing ID<\/text>\n  <text x=\"680\" y=\"239\" text-anchor=\"end\" font-size=\"10\" font-weight=\"600\">#52<\/text>\n\n  <rect x=\"500\" y=\"255\" width=\"180\" height=\"32\" rx=\"5\" fill=\"#0F4C3A\"\/>\n  <text x=\"590\" y=\"276\" text-anchor=\"middle\" font-size=\"11\" fill=\"#fff\" font-weight=\"600\">Show Contact Email<\/text>\n  <rect x=\"500\" y=\"293\" width=\"180\" height=\"32\" rx=\"5\" fill=\"#fff\" stroke=\"#0F4C3A\" stroke-width=\"1.5\"\/>\n  <text x=\"590\" y=\"314\" text-anchor=\"middle\" font-size=\"11\" fill=\"#0F4C3A\" font-weight=\"600\">Show Phone Number<\/text>\n\n  <line x1=\"500\" y1=\"340\" x2=\"680\" y2=\"340\" stroke=\"#e2e8f0\"\/>\n  <circle cx=\"510\" cy=\"362\" r=\"10\" fill=\"#cbd5e1\"\/>\n  <text x=\"525\" y=\"362\" font-size=\"10\" font-weight=\"600\" fill=\"#1a1a1a\">ftadmin<\/text>\n  <text x=\"525\" y=\"376\" font-size=\"9\" fill=\"#5a6f84\">Member since 2026 \u00b7 1 listing<\/text>\n\n  <text x=\"495\" y=\"80\" font-size=\"9\" fill=\"#5a6f84\" font-style=\"italic\">D<\/text>\n<\/svg>\n\n\n<figure class=\"wp-block-table\"><table>\n<thead><tr>\n<th>Letter<\/th>\n<th>Section<\/th>\n<th>Source<\/th>\n<\/tr><\/thead><tbody>\n<tr>\n<td><strong>A<\/strong><\/td>\n<td>Featured image<\/td>\n<td>Post&#8217;s featured image, sized to <code>best-classifieds-listing-large<\/code> (1200\u00d7800)<\/td>\n<\/tr>\n<tr>\n<td><strong>B<\/strong><\/td>\n<td>Gallery thumbs <em>[Pro]<\/em><\/td>\n<td><code>_bc_gallery<\/code> post meta (array of attachment IDs)<\/td>\n<\/tr>\n<tr>\n<td><strong>C<\/strong><\/td>\n<td>Description<\/td>\n<td>The post content<\/td>\n<\/tr>\n<tr>\n<td><strong>D<\/strong><\/td>\n<td>Sidebar info card<\/td>\n<td><code>_bc_price<\/code>, <code>_bc_condition<\/code>, <code>_bc_location<\/code>, post date, post ID, contact meta<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">The gallery <em>[Pro]<\/em><\/h2>\n\n\n<p>The free theme shows only the featured image. Pro adds a multi-image gallery driven by the <code>_bc_gallery<\/code> post meta \u2014 an array of attachment IDs.<\/p>\n\n\n<p>When the gallery has 2+ images:<\/p>\n\n\n<ol class=\"wp-block-list\">\n<li>The first image becomes the large hero photo.<\/li>\n<li>Thumbnails appear in a row below.<\/li>\n<li>Clicking a thumbnail swaps the hero photo (no page reload).<\/li>\n<li>Click the hero photo to open a fullscreen lightbox with arrow-key nav.<\/li>\n<\/ol>\n\n\n<p>The WOW Feeder writes 3 photos per listing by default (configurable 1\u20136).<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Sidebar info card<\/h2>\n\n\n<p>Sticky on desktop (stays in view as you scroll the description), static on mobile.<\/p>\n\n\n<h3 class=\"wp-block-heading\">Price<\/h3>\n\n\n<p><code>_bc_price<\/code> post meta. Three accepted formats:<\/p>\n\n\n<figure class=\"wp-block-table\"><table>\n<thead><tr>\n<th>Stored value<\/th>\n<th>Renders as<\/th>\n<\/tr><\/thead><tbody>\n<tr>\n<td><code>14800<\/code><\/td>\n<td>$14,800 (currency-symbol prefix, comma-formatted)<\/td>\n<\/tr>\n<tr>\n<td><code>$14,800<\/code><\/td>\n<td>$14,800 (verbatim \u2014 pre-formatted strings preserved)<\/td>\n<\/tr>\n<tr>\n<td><code>$1,800\/mo<\/code><\/td>\n<td>$1,800\/mo (verbatim)<\/td>\n<\/tr>\n<tr>\n<td><code>$60 \/ hr<\/code><\/td>\n<td>$60 \/ hr (verbatim)<\/td>\n<\/tr>\n<tr>\n<td><code>Contact for price<\/code><\/td>\n<td>Contact for price (verbatim)<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n<p>The detection uses <code>is_numeric()<\/code> plus a check for the currency symbol. <strong>If your stored value contains <code>$<\/code> or any non-numeric character, it&#8217;s rendered as-is<\/strong>. Otherwise, the symbol gets prepended.<\/p>\n\n\n<h3 class=\"wp-block-heading\">Condition<\/h3>\n\n\n<p><code>_bc_condition<\/code> post meta. Free text. Common values: New, Like New, Used &#8211; Excellent, Used &#8211; Good, Used &#8211; Fair.<\/p>\n\n\n<h3 class=\"wp-block-heading\">Location<\/h3>\n\n\n<p><code>_bc_location<\/code> post meta. Free text. Used here AND on the listing card and breadcrumb.<\/p>\n\n\n<h3 class=\"wp-block-heading\">Posted<\/h3>\n\n\n<p>The post date, formatted via <code>human_time_diff()<\/code> (e.g. &#8220;3 days ago&#8221;). To show the absolute date instead:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>add_filter( &#039;best_classifieds_listing_posted_format&#039;, function() {\n    return &#039;absolute&#039;; \/\/ or &#039;relative&#039; (default)\n} );<\/code><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Listing ID<\/h3>\n\n\n<p>The post ID, prefixed with <code>#<\/code>. Useful for users referencing a listing in support emails or messaging.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Contact reveal buttons<\/h2>\n\n\n<p>The two buttons under the info \u2014 &#8220;Show Contact Email&#8221; and &#8220;Show Phone Number&#8221; \u2014 use a <strong>two-click reveal pattern<\/strong>:<\/p>\n\n\n<ol class=\"wp-block-list\">\n<li><strong>First click:<\/strong> the encoded value is decoded and shown in the button itself, with a soft pop animation. The button switches to monospace font for clean alignment.<\/li>\n<li><strong>Second click:<\/strong> opens <code>mailto:<\/code> (mail composer) or <code>tel:<\/code> (dialer \/ Skype \/ FaceTime).<\/li>\n<\/ol>\n\n\n<p>The encoded format is base64 in a <code>data-encoded<\/code> attribute. This isn&#8217;t strong protection \u2014 sophisticated scrapers can defeat it \u2014 but it stops naive <code>view-source<\/code> regex sweeps. For real anti-scraping, gate the contact section behind login (Pro setting).<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Seller card<\/h2>\n\n\n<p>Shows the post author&#8217;s gravatar + display name + member-since date + total listing count. Clicking it goes to the seller&#8217;s archive page (<code>\/author\/{username}\/<\/code>) which shows all their listings.<\/p>\n\n\n<p>To customize the seller card layout, override the partial in a child theme: <code>template-parts\/listing-seller.php<\/code>.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">OSM map <em>[Pro]<\/em><\/h2>\n\n\n<p>If the listing has both <code>_bc_lat<\/code> and <code>_bc_lng<\/code> meta, Pro renders an embedded OpenStreetMap below the description. No API key needed (we use OSM tiles via Leaflet, which is GPL-friendly and free).<\/p>\n\n\n<p>The marker is the listing&#8217;s location; the zoom level defaults to 14. To change defaults:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>add_filter( &#039;best_classifieds_map_zoom&#039;, function() { return 12; } );\nadd_filter( &#039;best_classifieds_map_tile_url&#039;, function() {\n    return &#039;https:\/\/your-tile-server.example.com\/{z}\/{x}\/{y}.png&#039;;\n} );<\/code><\/pre>\n\n\n<p>If you prefer Google Maps, contact us \u2014 there&#8217;s a paid Pro extension for that.<\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Similar listings <em>[Pro]<\/em><\/h2>\n\n\n<p>Below the description, a &#8220;Similar listings&#8221; section shows up to 4 other listings from the same sub-category. Excludes the current listing.<\/p>\n\n\n<p>To turn it off or change the count:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>add_filter( &#039;best_classifieds_similar_listings_count&#039;, function() {\n    return 6; \/\/ or 0 to disable\n} );<\/code><\/pre>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Comments \/ Reviews<\/h2>\n\n\n<p>The free theme uses standard WordPress comments. Pro replaces this with <strong>5-star reviews<\/strong> (writes one review per user per listing, with a moderation queue at <strong>Classifieds Pro \u2192 Reviews<\/strong>).<\/p>\n\n\n<p>To force standard comments even with Pro active:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>add_filter( &#039;best_classifieds_use_pro_reviews&#039;, &#039;__return_false&#039; );<\/code><\/pre>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h2 class=\"wp-block-heading\">Hooks for adding your own sections<\/h2>\n\n\n<p>The single listing template fires these action hooks where you can inject custom content from a child theme or plugin:<\/p>\n\n\n<figure class=\"wp-block-table\"><table>\n<thead><tr>\n<th>Hook<\/th>\n<th>Position<\/th>\n<th>Used by<\/th>\n<\/tr><\/thead><tbody>\n<tr>\n<td><code>best_classifieds_after_listing_image<\/code><\/td>\n<td>Below the gallery<\/td>\n<td>Pro: gallery thumbnails, action buttons<\/td>\n<\/tr>\n<tr>\n<td><code>best_classifieds_after_listing_content<\/code><\/td>\n<td>Below the description<\/td>\n<td>Pro: OSM map, similar listings<\/td>\n<\/tr>\n<tr>\n<td><code>best_classifieds_after_listing_sidebar<\/code><\/td>\n<td>Below the sidebar info card<\/td>\n<td>Pro: messaging widget, reviews summary<\/td>\n<\/tr>\n<tr>\n<td><code>best_classifieds_listing_actions<\/code><\/td>\n<td>Inside the sidebar (replaces default actions)<\/td>\n<td>Pro: messaging button, save-to-favorites<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n<p>Example \u2014 add a custom &#8220;Make an offer&#8221; button:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>add_action( &#039;best_classifieds_listing_actions&#039;, function( $post_id ) {\n    $price = get_post_meta( $post_id, &#039;_bc_price&#039;, true );\n    if ( $price &amp;&amp; false !== strpos( strtolower( $price ), &#039;offer&#039; ) ) {\n        echo &#039;&lt;button class=&quot;bc-btn bc-btn-outline&quot;&gt;Make an offer&lt;\/button&gt;&#039;;\n    }\n} );<\/code><\/pre>\n\n\n<p>See <a href=\".\/customizing-and-hooks\/\">Customizing &#038; Hooks<\/a> for the full reference.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A walkthrough of every component on the single listing page \u2014 what it shows, where the data comes from, and how to customize each piece.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-47","post","type-post","status-publish","format-standard","hentry","category-using-best-classifieds"],"_links":{"self":[{"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/posts\/47","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/comments?post=47"}],"version-history":[{"count":0,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/posts\/47\/revisions"}],"wp:attachment":[{"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/media?parent=47"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/categories?post=47"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.fasterthemes.com\/best-classifieds-wordpress-theme\/wp-json\/wp\/v2\/tags?post=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}