<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: hubs</title>
    <description>The latest articles on DEV Community by hubs (@hub24).</description>
    <link>https://dev.to/hub24</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1229891%2F89d5018a-9707-4347-bbd0-cdfdedb12b65.png</url>
      <title>DEV Community: hubs</title>
      <link>https://dev.to/hub24</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hub24"/>
    <language>en</language>
    <item>
      <title>facetWP-creation of Cards</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Fri, 27 Feb 2026 15:42:30 +0000</pubDate>
      <link>https://dev.to/hub24/facetwp-creation-of-cards-1cnf</link>
      <guid>https://dev.to/hub24/facetwp-creation-of-cards-1cnf</guid>
      <description>&lt;p&gt;{{Please leave this line alone (sandbox heading)}}&amp;lt;!--&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;              Welcome to the sandbox!              *&lt;/li&gt;
&lt;li&gt;           Please leave this part alone            *&lt;/li&gt;
&lt;li&gt;          The page is cleared regularly            *&lt;/li&gt;
&lt;li&gt;    Feel free to try your editing skills below     *
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■--&amp;gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;
┌─────────────────────────────────────────────────────────┐
│              MINI-CATALOG SYSTEM ARCHITECTURE            │
└─────────────────────────────────────────────────────────┘

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   DATA SOURCE   │───▶│   STRUCTURE     │───▶│  PRESENTATION  │
│  (Source Data)  │    │  (WordPress)    │    │   (FacetWP)     │
├─────────────────┤    ├─────────────────┤    ├─────────────────┤
│ Public Data     │    │ Custom Post Type│    │ Listing Builder │
│ Source (e.g.,   │    │ "Catalog Items" │    │ Card Template   │
│ EU Database)    │    │ (via CPT-UI)    │    ├─────────────────┤
├─────────────────┤    ├─────────────────┤    │ • Card Design   │
│ SELECT ONLY:    │    │ ACF Pro Fields: │    │ • Grid Layout   │
│ ✓ Item Title    │    │ • Title         │    │ • Filters       │
│ ✓ Country       │    │ • Country       │    │ • Search        │
│ ✓ Category      │    │ • Website       │    └─────────────────┘
│ ✓ Technologies  │    │ • Type          │            │
│ ✓ Sector        │    │ • Technologies  │            ▼
│ ✓ Website       │    │ • Sector        │    ┌─────────────────┐
│ ✗ No Personal   │    │ • Description   │    │   FINAL OUTPUT  │
│   Data          │    └─────────────────┘    │  Mini-Catalog   │
└─────────────────┘              │             │  Cards with:    │
         │                       │             │ • Clean design  │
         ▼                       ▼             │ • Hover effects │
┌─────────────────────────────────────────────────────────┐   │ • 2-3 columns   │
│                 GDPR SAFE ZONE                       │   └─────────────────┘
│  ✓ No personal data stored                           │
│  ✓ Only institutional information                    │
│  ✓ Public data only                                  │
│  ✓ Legal notice on website                           │
└──────────────────────────────────────────────────────┘
&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/Wordpress/comments/1rcg5la/facetwpgenerationg_a_card_within_the/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/Wordpress/comments/1rcg5la/facetwpgenerationg_a_card_within_the/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;: FacetWP isn’t really “building the cards” fully on its own. &lt;/p&gt;

&lt;p&gt;It just shows a list of results. You still need to decide what each result should look like (title + fields) and style it with CSS.&lt;br&gt;
therefore a simple Approach would be like so:&lt;/p&gt;

&lt;p&gt;Make one card layout (title link + a few fields).&lt;br&gt;
Only show a field if it has a value (so we don’t get empty “Type:” lines).&lt;br&gt;
Use paging (show 12–24 items per page) so it stays fast.&lt;br&gt;
our grid code is fine. It will automatically switch between 2–3 columns depending on screen width.&lt;br&gt;
we need top Keep hover effects light, and don’t rely on hover for mobile. therefore we Need to make the title/card clickable.&lt;br&gt;
For accessibility: we could make use of real links/buttons and make sure keyboard users can tab to the card links.&lt;/p&gt;

&lt;p&gt;hi there good evening, dear friends,&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;how are you doing are generating a card in the FacetWP Listing Builder.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;I currently want to build a mini-catalog website using:&lt;/p&gt;

&lt;p&gt;WordPress&lt;br&gt;
&lt;code&gt;&lt;br&gt;
CPT-UI (for custom post types)&lt;br&gt;
ACF Pro (for custom fields)&lt;br&gt;
FacetWP (for filtering/search)&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The Goal: well i want to display ~300 catalog items as clean, professional cards. Using ONLY public data (no personal info for GDPR safety).&lt;br&gt;
And since i was receiving lots of help - also on such WordPress-Postings - i want to ask here - if somebody could help out here!  &lt;br&gt;
so here is  the start: ... see below my Current Setup and the plan - with some ascii-images that i have created.&lt;/p&gt;

&lt;p&gt;First of all - as i am pretty new to FacetWP - some preliminary questions and some assumptions:&lt;/p&gt;

&lt;p&gt;a. well the facetwp allows us to visually design how we search results (posts, products, etc.). that said:&lt;br&gt;
b. all the data should appear on WordPress site&lt;/p&gt;

&lt;p&gt;the question is how to generate a card using the FacetWP-Listing Builder?&lt;/p&gt;

&lt;p&gt;Which methods and techniques are here used / useful. which pitfalls are known and what approaches can you recommend?&lt;/p&gt;

&lt;p&gt;below i have written down some thoughts and ideas and some possivle "aproaches"&lt;/p&gt;

&lt;p&gt;look forward to hear from you.&lt;/p&gt;

&lt;p&gt;greetings&lt;br&gt;
ps. see some of the thinks i allready have - and which are the conceptual basics here - now i have to find out how to operate all these things.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;a. a shematic view on the set: &lt;/p&gt;

&lt;pre&gt;

`Week 1: Setup
├── Create CPT via CPT-UI
├── Add ACF fields
└── Import data (manually or via CSV)

and then : Design
├── Build basic card in FacetWP
├── Add grid layout
├── Style hover effects
└── Test on mobile`

&lt;/pre&gt;

&lt;p&gt;and then - in the next Week: Filters &amp;amp; Polish&lt;/p&gt;

&lt;pre&gt;

&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
├── Configure facets&lt;br&gt;
├── Add facet labels&lt;br&gt;
├── Test all combinations&lt;br&gt;
└── GDPR/legal review&lt;/code&gt;&lt;/p&gt;



&lt;p&gt; &lt;br&gt;
furthermore:  hmmm - see some gerneral aspects of the card-creation-process:  see the example:&lt;/p&gt;

&lt;pre&gt;

&lt;/pre&gt;

&lt;p&gt;┌─────────────────────────────────────────────────────────┐&lt;br&gt;
│              MINI-CATALOG SYSTEM ARCHITECTURE            │&lt;br&gt;
└─────────────────────────────────────────────────────────┘&lt;/p&gt;

&lt;p&gt;┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐&lt;br&gt;
│   DATA SOURCE   │───▶│   STRUCTURE     │───▶│  PRESENTATION  │&lt;br&gt;
│  (Source Data)  │    │  (WordPress)    │    │   (FacetWP)     │&lt;br&gt;
├─────────────────┤    ├─────────────────┤    ├─────────────────┤&lt;br&gt;
│ Public Data     │    │ Custom Post Type│    │ Listing Builder │&lt;br&gt;
│ Source (e.g.,   │    │ "Catalog Items" │    │ Card Template   │&lt;br&gt;
│ EU Database)    │    │ (via CPT-UI)    │    ├─────────────────┤&lt;br&gt;
├─────────────────┤    ├─────────────────┤    │ • Card Design   │&lt;br&gt;
│ SELECT ONLY:    │    │ ACF Pro Fields: │    │ • Grid Layout   │&lt;br&gt;
│ ✓ Item Title    │    │ • Title         │    │ • Filters       │&lt;br&gt;
│ ✓ Country       │    │ • Country       │    │ • Search        │&lt;br&gt;
│ ✓ Category      │    │ • Website       │    └─────────────────┘&lt;br&gt;
│ ✓ Technologies  │    │ • Type          │            │&lt;br&gt;
│ ✓ Sector        │    │ • Technologies  │            ▼&lt;br&gt;
│ ✓ Website       │    │ • Sector        │    ┌─────────────────┐&lt;br&gt;
│ ✗ No Personal   │    │ • Description   │    │   FINAL OUTPUT  │&lt;br&gt;
│   Data          │    └─────────────────┘    │  Mini-Catalog   │&lt;br&gt;
└─────────────────┘              │             │  Cards with:    │&lt;br&gt;
         │                       │             │ • Clean design  │&lt;br&gt;
         ▼                       ▼             │ • Hover effects │&lt;br&gt;
┌─────────────────────────────────────────────────────────┐   │ • 2-3 columns   │&lt;br&gt;
│                 GDPR SAFE ZONE                       │   └─────────────────┘&lt;br&gt;
│  ✓ No personal data stored                           │&lt;br&gt;
│  ✓ Only institutional information                    │&lt;br&gt;
│  ✓ Public data only                                  │&lt;br&gt;
│  ✓ Legal notice on website                           │&lt;br&gt;
└──────────────────────────────────────────────────────┘&lt;/p&gt;



&lt;p&gt;with the card-design overview:&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Option 1: Minimal               Option 2: With Icons           Option 3: Compact&lt;/p&gt;

&lt;pre&gt;

┌─────────────────┐            ┌─────────────────┐            ┌─────────────────┐
│ Item Name       │            │  Item Name      │            │ Item Name       │
│                 │            │                 │            │ ┌─────────────┐ │
│ Type: Value     │            │ Type: ● Value   │            │ │ Type/Country│ │
│ Country: Value  │            │ Country:  DE    │            │ └─────────────┘ │
│                 │            │ Tech:  Cloud    │            │                 │
│ [Details]       │            │ [Details]       │            │ [→]             │
└─────────────────┘            └─────────────────┘            └─────────────────┘


&lt;/pre&gt;

&lt;p&gt;step-by step Card Building: - my aproaches&lt;/p&gt;

&lt;p&gt;Step  1: outer Card&lt;/p&gt;

&lt;pre&gt;

┌─────────────────────────────────┐
│  Padding: 20px                  │
│  Border: 1px solid #e5e5e5      │
│  Border-Radius: 8px             │
│  Background: #ffffff            │
└─────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt;STep 2: Titel&lt;/p&gt;

&lt;pre&gt;

┌─────────────────────────────────┐
│   Titel (klickbar)              │
│  Font: Large, Bold              │
│  Margin-bottom: 10px            │
└─────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt;Step 3: Meta-Bereich&lt;/p&gt;

&lt;pre&gt;

┌─────────────────────────────────┐
│  Typ: Beispiel                  │
│  Technologien: Cloud, AI        │ ← Font: Small
│  Sektor: Health                 │ ← Color: #666
└─────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Button&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;

┌─────────────────────────────────┐
│     [ Zum Eintrag ]             │ ← Border-Radius: 6px
└─────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt;see the current setup:&lt;/p&gt;

&lt;pre&gt;

┌─────────────────────────────────────────────────────────┐
│                    SYSTEM ARCHITECTURE                  │
├─────────────────────────────────────────────────────────┤
│ 1. Custom Post Type "Catalog Items" (CPT-UI)            │
│ 2. ACF Fields: Title, Country, Type,                    │
│    Technologies, Sector, Website, Description           │
│ 3. FacetWP Listing Builder for card design              │
│ 4. Frontend: Filterable grid of cards                   │
└─────────────────────────────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt;guesses - i think that i can add lots of the above mentioned data - here - in this fields&lt;/p&gt;

&lt;p&gt;And in  the following i have some screenshots - that may  be helpful too: hmm - are those the right pointers for creating a grid and styling 'cards':  see also here; &lt;a href="https://d.pr/i/Je02RL" rel="noopener noreferrer"&gt;https://d.pr/i/Je02RL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and besides that: can we use the style tab to style the cards:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://d.pr/i/fD120E" rel="noopener noreferrer"&gt;https://d.pr/i/fD120E&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
 &lt;br&gt;
i have created the taxos ( taxonomies ) in the list builder.&lt;/p&gt;

&lt;p&gt;and see what i have to do now:&lt;/p&gt;

&lt;p&gt;i have to creat the following things&lt;/p&gt;

&lt;p&gt;Basic card with padding, border, border-radius&lt;br&gt;
Clickable title linked to single page&lt;br&gt;
Meta information in small gray text&lt;br&gt;
"View Item" button&lt;br&gt;
Grid layout with CSS&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;the Card Design i am aiming&lt;/p&gt;

&lt;pre&gt;

┌─────────────────────────────────┐
│   [Item Title - clickable]      │
├─────────────────────────────────┤
│ Type: Example Value             │
│ Technologies: Cloud, AI, IoT    │
│ Sector: Healthcare              │
├─────────────────────────────────┤
│         [ View Item ]           │
└─────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt;btw. do you think that i need to have this&lt;/p&gt;

&lt;p&gt;.&lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
facetwp-template {&lt;br&gt;
    display: grid;&lt;br&gt;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));&lt;br&gt;
    gap: 24px;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.catalog-card {&lt;br&gt;
    transition: all 0.3s ease;&lt;br&gt;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.catalog-card:hover {&lt;br&gt;
    transform: translateY(-4px);&lt;br&gt;
    box-shadow: 0 10px 20px rgba(0,0,0,0.15);&lt;br&gt;
}&lt;code&gt;&lt;br&gt;
 &lt;/code&gt;&lt;br&gt;
hmm -  well i am looking for advice on:&lt;/p&gt;

&lt;p&gt;Grid Layout - 2 vs 3 columns on desktop? What's your experience?&lt;br&gt;
Hover Effects - Subtle vs noticeable? Any creative ideas?&lt;br&gt;
Empty Fields - How do you handle missing data elegantly?&lt;br&gt;
Performance - Best practices for ~300 items with filters?&lt;br&gt;
Accessibility - What should I consider for card interfaces?&lt;br&gt;
Responsive Design - How do your cards behave on mobile?&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;What's working well:&lt;/p&gt;

&lt;p&gt;FacetWP Listing Builder is intuitive for visual design&lt;br&gt;
Clear separation (CPT for structure, ACF for data, FacetWP for display)&lt;br&gt;
No code needed for basic card layout&lt;br&gt;
Current challenges:&lt;/p&gt;

&lt;p&gt;Adding facet labels requires custom PHP&lt;br&gt;
Ensuring consistent card heights&lt;br&gt;
Mobile optimization&lt;br&gt;
Performance with many filters&lt;br&gt;
Questions for the community:&lt;/p&gt;

&lt;p&gt;How do you structure your ACF fields for catalog items?&lt;br&gt;
Any FacetWP tips/tricks you've discovered?&lt;br&gt;
What's your approach to card design in 2024?&lt;br&gt;
How do you handle GDPR when displaying third-party data?&lt;br&gt;
Would love to see examples of your FacetWP projects and hear about what worked (or didn't)!&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
 &lt;br&gt;
&lt;strong&gt;update:&lt;/strong&gt; wIt will automatically switch between 2–3 columns depending on screen width.&lt;br&gt;
we need top Keep hover effects light, and don’t rely on hover for mobile. therefore we Need to make the title/card clickable.&lt;br&gt;
For accessibility: we could make use of real links/buttons and make sure keyboard users can tab to the card links.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FacetWP isn’t really “building the cards” fully on its own.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;It just shows a list of results. You still need to decide what each result should look like (title + fields) and style it with CSS.&lt;/p&gt;

&lt;p&gt;therefore a simple Approach would be like so:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make one card layout (title link + a few fields).&lt;/li&gt;
&lt;li&gt;Only show a field if it has a value (so we don’t get empty “Type:” lines). Use paging (show 12–24 items per page) so it stays fast.&lt;/li&gt;
&lt;li&gt;our grid code is fine. It will automatically switch between 2–3 columns depending on screen width.&lt;/li&gt;
&lt;li&gt;we need top Keep hover effects light, and don’t rely on hover for mobile. therefore we Need to make the title/card clickable.&lt;/li&gt;
&lt;li&gt;For accessibility: we could make use of real links/buttons and make sure keyboard users can tab to the card links.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt; "Only show fields if they have values" This is GOLD for clean design!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FacetWP Listing Builder:&lt;/strong&gt;&lt;br&gt;
 For each field: Check "Show if not empty"&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;Don't load all 300 at once"  - we need to take care for the performance tip par excellence!&lt;br&gt;
 &lt;/p&gt;

&lt;pre&gt;

My previous thinking:           Corrected understanding:
┌─────────────────┐             ┌─────────────────┐
│ FacetWP         │             │ FacetWP         │
│ "builds" the    │             │ delivers data   │
│ card            │             │                 │
├─────────────────┤             ├─────────────────┤
│ That was too    │             │ YOU tell it:    │
│ optimistic      │             │ "Show title,    │
│                 │             │ then ACF field X│
└─────────────────┘             │ then button"    │
                                 └─────────────────┘
                                        │
                                        ▼
                                ┌─────────────────┐
                                │ CSS formats     │
                                │ everything into │
                                │ a proper card   │
                                └─────────────────┘

 &lt;/pre&gt;
 

 

**"Only show fields if they have values"**
 

&lt;pre&gt;

Without condition check:        With condition check:
┌─────────────────┐             ┌─────────────────┐
│ Hub XYZ         │             │ Hub XYZ         │
│ Type:           │ ← empty!    │ Technologies:   │
│ Technologies:   │             │ Cloud, AI       │
│ Cloud, AI       │             │ Sector: Health  │
│ Sector: Health  │             └─────────────────┘
│ Website:        │ ← empty!     
└─────────────────┘

 &lt;/pre&gt;


In FacetWP Listing Builder:
👉 For each field: Check "Show if not empty"

 

**Performance tip par excellence!**


&lt;pre&gt;

Bad practice:                    Good practice:
┌─────────────────┐             ┌─────────────────┐
│ 300 Cards       │             │ Page 1: 12 Cards│
│ → slow          │             │ → fast          │
│ → overwhelming  │             │ → clear         │
│ → mob nightmare │          │ → "Load More"      │
└─────────────────┘             │   or pager      │
                               └─────────────────┘

 &lt;/pre&gt;
 

 

Practical Implementation in FacetWP Listing Builder
 

STEP 1: Base Structure (always visible)



&lt;pre&gt;

┌─────────────────────────────────────┐
│ ⬛ TITLE (Post Title)               │ ← always there
│    • Link: Post URL                 │
│    • Style: Large, Bold             │
├─────────────────────────────────────┤
│                                     │
│ STEP 2: Conditional Fields          │
│ ┌─────────────────────────────────┐ │
│ │ [SHOW ONLY IF NOT EMPTY]        │ │
│ │ ⬛ Type ACF Field               │ │
│ │   • Label: "Type: "             │ │
│ │   • Condition:"Show if not empty "│
│ └─────────────────────────────────┘ │
│                                     │
│ ┌─────────────────────────────────┐ │
│ │ [SHOW ONLY IF NOT EMPTY]        │ │
│ │ ⬛ Technologies ACF Field       │ │
│ │   • Label: "Technologies: "     │ │
│ │   • Condition: "Show if not empty"│
│ └─────────────────────────────────┘ │
│                                     │
│ ┌─────────────────────────────────┐ │
│ │ [SHOW ONLY IF NOT EMPTY]        │ │
│ │ ⬛ Sector ACF Field             │ │
│ │   • Label: "Sector: "           │ │
│ │   • Condition: "Show if not empty"│
│ └─────────────────────────────────┘ │
├─────────────────────────────────────┤
│ ⬛ BUTTON                           │ ← always there
│    • Text: "View Details"           │
│    • Link: Post URL                 │
└─────────────────────────────────────┘

 &lt;/pre&gt;
 

 
**BEFORE (all fields, even empty ones):**


&lt;pre&gt;
 
┌─────────────────────────────────┐
│ Digital Hub Berlin              │
│ Type:                           │ ← empty!
│ Technologies: Cloud, AI         │
│ Sector:                         │ ← empty!
│ Website:                        │ ← empty!
│ [View Hub]                      │
└─────────────────────────────────┘
&lt;/pre&gt;

&lt;p&gt;AFTER (only filled fields):&lt;/p&gt;

&lt;pre&gt;
┌─────────────────────────────────┐
│ Digital Hub Berlin              │
│ Technologies: Cloud, AI         │
│ [View Hub]                      │
└─────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt;→ MUCH cleaner!&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FacetWP → Settings → Pager&lt;/strong&gt;:&lt;br&gt;
 &lt;/p&gt;

&lt;pre&gt;

┌─────────────────────────────────────┐
│ ☑ Enable pager                     │
│                                     │
│ Results per page: 12                │
│                                     │
│ Pager style:                        │
│ (●) Numbers                         │
│ ( ) Load more button                │
│ ( ) Infinite scroll                 │
└─────────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt;Frontend result:&lt;/p&gt;

&lt;pre&gt;
┌───────────────────────────────────┐
│ Page 1 of 25 (total 300 items)    │
│                                   │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐   │
│ │Card1│ │Card2│ │Card3│ │Card4│   │
│ └─────┘ └─────┘ └─────┘ └─────┘   │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐   │
│ │Card5│ │Card6│ │Card7│ │Card8│   │
│ └─────┘ └─────┘ └─────┘ └─────┘   │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐   │
│ │Card9│ │Card10││Card11││Card12│  │
│ └─────┘ └─────┘ └─────┘ └─────┘   │
│                                   │
│ ◀ 1 2 3 4 5 ... 25 ▶             │
└───────────────────────────────────┘

&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;br&gt;
`&lt;br&gt;
/* Equal height cards with different content &lt;em&gt;/&lt;br&gt;
.facetwp-template {&lt;br&gt;
    display: grid;&lt;br&gt;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));&lt;br&gt;
    gap: 24px;&lt;br&gt;
    align-items: stretch;  /&lt;/em&gt; Critical for equal heights */&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.catalog-card {&lt;br&gt;
    display: flex;&lt;br&gt;
    flex-direction: column;&lt;br&gt;
    height: 100%;  /* Full height in grid */&lt;br&gt;
    padding: 20px;&lt;br&gt;
    border: 1px solid #e5e5e5;&lt;br&gt;
    border-radius: 8px;&lt;br&gt;
    background: #ffffff;&lt;br&gt;
    transition: all 0.3s ease;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.catalog-card:hover {&lt;br&gt;
    transform: translateY(-4px);&lt;br&gt;
    box-shadow: 0 10px 20px rgba(0,0,0,0.15);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.catalog-card .button {&lt;br&gt;
    margin-top: auto;  /* Button always at bottom */&lt;br&gt;
    align-self: flex-start;&lt;br&gt;
    padding: 8px 16px;&lt;br&gt;
    background: #0073aa;&lt;br&gt;
    color: white;&lt;br&gt;
    text-decoration: none;&lt;br&gt;
    border-radius: 4px;&lt;br&gt;
    border: none;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;/* Meta information styling */&lt;br&gt;
.card-meta {&lt;br&gt;
    font-size: 0.9em;&lt;br&gt;
    color: #666;&lt;br&gt;
    margin: 10px 0;&lt;br&gt;
    line-height: 1.6;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.card-meta p {&lt;br&gt;
    margin: 5px 0;&lt;br&gt;
}  `&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
&lt;strong&gt;Responsive Behavior&lt;/strong&gt;&lt;br&gt;
 &lt;/p&gt;

&lt;pre&gt;

Desktop (3 columns):        Tablet (2 columns):         Mobile (1 column):
┌───┬───┬───┐              ┌───┬───┐                   ┌─────────┐
│ C │ C │ C │              │ C │ C │                   │    C    │
├───┼───┼───┤              ├───┼───┤                   ├─────────┤
│ C │ C │ C │              │ C │ C │                   │    C    │
├───┼───┼───┤              ├───┼───┤                   ├─────────┤
│ C │ C │ C │              │ C │ C │                   │    C    │
└───┴───┴───┘              └───┴───┘                   └─────────┘

&lt;/pre&gt;

&lt;p&gt;see the code&lt;br&gt;
`&lt;br&gt;
CSS handles this automatically with:&lt;br&gt;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));&lt;/p&gt;

&lt;p&gt;Media queries for fine-tuning:&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/media"&gt;@media&lt;/a&gt; (max-width: 768px) {&lt;br&gt;
    .facetwp-template {&lt;br&gt;
        gap: 16px;  /* Smaller gap on mobile */&lt;br&gt;
    }&lt;br&gt;
}`&lt;/p&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;p&gt;Accessibility Implementation&lt;/p&gt;

&lt;p&gt;Keyboard Navigation:&lt;/p&gt;

&lt;pre&gt;
&lt;/pre&gt;

&lt;p&gt;┌─────────────────────────────────┐&lt;br&gt;
│ [Tab] → &lt;a href="https://dev.tofocus"&gt;Hub Title&lt;/a&gt;     │&lt;br&gt;
│   ↓                             │&lt;br&gt;
│ [Tab] → &lt;a href="https://dev.tofocus"&gt;View Button&lt;/a&gt;   │&lt;br&gt;
│   ↓                             │&lt;br&gt;
│ [Enter] → Open link             │&lt;br&gt;
└─────────────────────────────────┘&lt;/p&gt;



&lt;p&gt;HTML structure:&lt;br&gt;
&lt;a href="..."&gt;&lt;br&gt;
    Hub Name&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
... content ...&lt;br&gt;
&lt;a href="..."&gt;&lt;br&gt;
    View Details&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Implementation Checklist&lt;br&gt;
Listing Builder: Enable "Show if not empty" for all ACF fields&lt;br&gt;
Pagination: Set to 12-24 items per page&lt;br&gt;
CSS: Implement equal height cards (button always at bottom)&lt;br&gt;
Testing: Check cards with 1-2 fields vs. fully filled ones&lt;br&gt;
Mobile: Test in Chrome DevTools for all screen sizes&lt;br&gt;
Accessibility: Ensure keyboard navigation works&lt;br&gt;
Performance: Monitor load time with 300+ items&lt;/p&gt;

&lt;p&gt;Bonus: Handling Empty States&lt;br&gt;
What if ALL optional fields are empty?&lt;br&gt;
 &lt;/p&gt;

&lt;pre&gt;

        ┌─────────────────────────────────┐
        │ Digital Hub Berlin             │
        │ [View Hub]                     │
        └─────────────────────────────────┘

&lt;/pre&gt;      

&lt;p&gt;→ Still works! Clean and honest.&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
summary &lt;/p&gt;

&lt;p&gt;FacetWP delivers data → I design the cards&lt;br&gt;
Conditional display → Only show what exists&lt;br&gt;
Pagination is crucial → Never overwhelm the user/browser&lt;br&gt;
CSS does the heavy lifting → Grid, hover effects, responsiveness&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>ui</category>
      <category>webdev</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>Generating a Card in the FacetWP Listing Builder</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Tue, 24 Feb 2026 17:39:31 +0000</pubDate>
      <link>https://dev.to/hub24/generating-a-card-in-the-facetwp-listing-builder-j47</link>
      <guid>https://dev.to/hub24/generating-a-card-in-the-facetwp-listing-builder-j47</guid>
      <description>&lt;p&gt;good day dear folks&lt;/p&gt;

&lt;p&gt;"Generating a Card in the FacetWP Listing Builder"&lt;/p&gt;

&lt;p&gt;description: "A step-by-step guide on building a mini-catalog with WordPress, CPT-UI, ACF Pro, and FacetWP, focusing on card design, performance, and GDPR."&lt;/p&gt;

&lt;h2&gt;
  
  
  tags: "wordpress, facetwp, tutorial, webdev"
&lt;/h2&gt;

&lt;p&gt;Hi there, good evening, dear friends,&lt;/p&gt;

&lt;p&gt;How are you doing? Today, we're going to dive into generating a card in the FacetWP Listing Builder.&lt;/p&gt;

&lt;p&gt;I currently want to build a mini-catalog website using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WordPress&lt;/li&gt;
&lt;li&gt;CPT-UI (for custom post types)&lt;/li&gt;
&lt;li&gt;ACF Pro (for custom fields)&lt;/li&gt;
&lt;li&gt;FacetWP (for filtering/search)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Goal:&lt;/strong&gt; I want to display ~300 catalog items as clean, professional cards, using &lt;strong&gt;ONLY public data&lt;/strong&gt; (no personal info for GDPR safety).&lt;/p&gt;

&lt;p&gt;Since I've been receiving lots of help on such WordPress postings, I want to ask here if somebody could help out!&lt;/p&gt;

&lt;p&gt;So, here is the start... see below my current setup and the plan, with some ASCII images that I have created.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Things First: Understanding FacetWP
&lt;/h2&gt;

&lt;p&gt;First of all, as I am pretty new to FacetWP, here are some preliminary questions and assumptions:&lt;/p&gt;

&lt;p&gt;a. FacetWP allows us to visually design how we search results (posts, products, etc.). That said:&lt;br&gt;
b. All the data should appear on the WordPress site.&lt;/p&gt;

&lt;p&gt;The core question is: &lt;strong&gt;how to generate a card using the FacetWP Listing Builder?&lt;/strong&gt;&lt;br&gt;
Which methods and techniques are used here? Which pitfalls are known and what approaches can you recommend?&lt;/p&gt;

&lt;p&gt;Below, I have written down some thoughts, ideas, and some possible "approaches."&lt;/p&gt;

&lt;p&gt;I look forward to hearing from you.&lt;/p&gt;

&lt;p&gt;Greetings,&lt;br&gt;
ps. See some of the things I already have, which are the conceptual basics. Now I have to find out how to operate all these things.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Master Plan
&lt;/h2&gt;

&lt;p&gt;A schematic view of the setup:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 1: Setup&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── Create CPT via CPT-UI
├── Add ACF fields
└── Import data (manually or via CSV)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Then: Design&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── Build basic card in FacetWP
├── Add grid layout
├── Style hover effects
└── Test on mobile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Then: Filters &amp;amp; Polish&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── Configure facets
├── Add facet labels
├── Test all combinations
└── GDPR/legal review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  System Architecture &amp;amp; GDPR Safety
&lt;/h2&gt;

&lt;p&gt;Here is a general overview of the card-creation process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────┐
│              MINI-CATALOG SYSTEM ARCHITECTURE           │
└─────────────────────────────────────────────────────────┘

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   DATA SOURCE   │───▶│   STRUCTURE     │───▶│  PRESENTATION   │
│  (Source Data)  │    │  (WordPress)    │    │   (FacetWP)     │
├─────────────────┤    ├─────────────────┤    ├─────────────────┤
│ Public Data     │    │ Custom Post Type│    │ Listing Builder │
│ Source (e.g.,   │    │ "Catalog Items" │    │ Card Template   │
│ EU Database)    │    │ (via CPT-UI)    │    ├─────────────────┤
├─────────────────┤    ├─────────────────┤    │ • Card Design   │
│ SELECT ONLY:    │    │ ACF Pro Fields: │    │ • Grid Layout   │
│ ✓ Item Title    │    │ • Title         │    │ • Filters       │
│ ✓ Country       │    │ • Country       │    │ • Search        │
│ ✓ Category      │    │ • Website       │    └─────────────────┘
│ ✓ Technologies  │    │ • Type          │            │
│ ✓ Sector        │    │ • Technologies  │            ▼
│ ✓ Website       │    │ • Sector        │    ┌─────────────────┐
│ ✗ No Personal   │    │ • Description   │    │   FINAL OUTPUT  │
│   Data          │    └─────────────────┘    │  Mini-Catalog   │
└─────────────────┘              │             │  Cards with:    │
         │                       │             │ • Clean design  │
         ▼                       ▼             │ • Hover effects │
┌─────────────────────────────────────────────────────────┐   │ • 2-3 columns   │
│                 GDPR SAFE ZONE                           │   └─────────────────┘
│  ✓ No personal data stored                                │
│  ✓ Only institutional information                         │
│  ✓ Public data only                                       │
│  ✓ Legal notice on website                                │
└─────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Card Design Overview
&lt;/h2&gt;

&lt;p&gt;Here are a few design options I'm considering:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Option 1: Minimal&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Option 2: With Icons&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Option 3: Compact&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;┌─────────────────┐&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;┌─────────────────┐&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;┌─────────────────┐&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ Item Name       │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│  Item Name      │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Item Name       │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│                 │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│                 │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ ┌─────────────┐ │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ Type: Value     │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Type: ● Value   │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ │ Type/Country│ │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ Country: Value  │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Country:  DE    │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ └─────────────┘ │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│                 │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Tech:  Cloud    │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│                 │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ [Details]       │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ [Details]       │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ [→]             │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;└─────────────────┘&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;└─────────────────┘&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;└─────────────────┘&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step-by-Step Card Building: My Approaches
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Outer Card&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┐
│  Padding: 20px                  │
│  Border: 1px solid #e5e5e5      │
│  Border-Radius: 8px             │
│  Background: #ffffff             │
└─────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Title&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┐
│   Title (clickable)              │
│  Font: Large, Bold              │
│  Margin-bottom: 10px            │
└─────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Meta Area&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┐
│  Type: Example                  │
│  Technologies: Cloud, AI        │ ← Font: Small
│  Sector: Health                 │ ← Color: #666
└─────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Button&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┐
│     [ View Item ]               │ ← Border-Radius: 6px
└─────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Current Setup: A Summary
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────┐
│                    SYSTEM ARCHITECTURE                   │
├─────────────────────────────────────────────────────────┤
│ 1. Custom Post Type "Catalog Items" (CPT-UI)           │
│ 2. ACF Fields: Title, Country, Type,                    │
│    Technologies, Sector, Website, Description           │
│ 3. FacetWP Listing Builder for card design              │
│ 4. Frontend: Filterable grid of cards                   │
└─────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I've created the taxonomies in the Listing Builder. I think I can add lots of the above-mentioned data in these fields.&lt;/p&gt;

&lt;h2&gt;
  
  
  My To-Do List for the Card Design
&lt;/h2&gt;

&lt;p&gt;I have to create the following things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic card with padding, border, border-radius&lt;/li&gt;
&lt;li&gt;Clickable title linked to single page&lt;/li&gt;
&lt;li&gt;Meta information in small gray text&lt;/li&gt;
&lt;li&gt;"View Item" button&lt;/li&gt;
&lt;li&gt;Grid layout with CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Card Design I am aiming for:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┐
│   [Item Title - clickable]      │
├─────────────────────────────────┤
│ Type: Example Value             │
│ Technologies: Cloud, AI, IoT    │
│ Sector: Healthcare              │
├─────────────────────────────────┤
│         [ View Item ]           │
└─────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Game-Changing Advice I Received
&lt;/h2&gt;

&lt;p&gt;The community provided some incredible insights. Here’s the corrected understanding and best practices.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Concept: FacetWP's Role
&lt;/h3&gt;

&lt;p&gt;My previous thinking was that FacetWP "builds" the card. The reality is that &lt;strong&gt;FacetWP delivers the data, and you tell it what to display.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My previous thinking:           Corrected understanding:
┌─────────────────┐             ┌─────────────────┐
│ FacetWP         │             │ FacetWP         │
│ "builds" the    │             │ delivers data   │
│ card            │             │                 │
├─────────────────┤             ├─────────────────┤
│ That was too    │             │ YOU tell it:    │
│ optimistic      │             │ "Show title,    │
│                 │             │ then ACF field X│
└─────────────────┘             │ then button"    │
                                  └─────────────────┘
                                          │
                                          ▼
                                  ┌─────────────────┐
                                  │ CSS formats     │
                                  │ everything into │
                                  │ a proper card   │
                                  └─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Golden Rule: Conditional Display
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"Only show fields if they have values."&lt;/strong&gt; This is GOLD for a clean design!&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Without condition check:&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;With condition check:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;┌─────────────────┐&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;┌─────────────────┐&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ Hub XYZ         │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Hub XYZ         │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;│ Type:           │&lt;/code&gt; ← empty!&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Technologies:   │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ Technologies:   │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Cloud, AI       │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ Cloud, AI       │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Sector: Health  │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ Sector: Health  │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;└─────────────────┘&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;│ Website:        │&lt;/code&gt; ← empty!&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;└─────────────────┘&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;In FacetWP Listing Builder:&lt;/strong&gt; For each field, check &lt;strong&gt;"Show if not empty"&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Performance Tip Par Excellence: Pagination
&lt;/h3&gt;

&lt;p&gt;Don't load all 300 at once!&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Bad practice:&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Good practice:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;┌─────────────────┐&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;┌─────────────────┐&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ 300 Cards       │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ Page 1: 12 Cards│&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ → slow          │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ → fast         │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ → overwhelming  │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ → clear        │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ → mobile nightmare│&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ → "Load More"  │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;└─────────────────┘&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│   or pager     │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                        `└─────────────────┘`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;FacetWP → Settings → Pager:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[x] Enable pager&lt;/li&gt;
&lt;li&gt;Results per page: 12&lt;/li&gt;
&lt;li&gt;Pager style: (●) Numbers / ( ) Load more / ( ) Infinite scroll&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practical Implementation in FacetWP
&lt;/h2&gt;

&lt;p&gt;Here’s how the logic translates into a card structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;STEP 1: Base Structure (always visible)
┌─────────────────────────────────────┐
│ ⬛ TITLE (Post Title)                │ ← always there
│    • Link: Post URL                  │
│    • Style: Large, Bold              │
├─────────────────────────────────────┤
│                                      │
│ STEP 2: Conditional Fields           │
│ ┌─────────────────────────────────┐ │
│ │ [SHOW ONLY IF NOT EMPTY]        │ │
│ │ ⬛ Type ACF Field                │ │
│ │   • Label: "Type: "             │ │
│ │   • Condition: "Show if not empty"│
│ └─────────────────────────────────┘ │
│                                      │
│ ┌─────────────────────────────────┐ │
│ │ [SHOW ONLY IF NOT EMPTY]        │ │
│ │ ⬛ Technologies ACF Field        │ │
│ │   • Label: "Technologies: "     │ │
│ │   • Condition: "Show if not empty"│
│ └─────────────────────────────────┘ │
│                                      │
│ ┌─────────────────────────────────┐ │
│ │ [SHOW ONLY IF NOT EMPTY]        │ │
│ │ ⬛ Sector ACF Field              │ │
│ │   • Label: "Sector: "           │ │
│ │   • Condition: "Show if not empty"│
│ └─────────────────────────────────┘ │
├─────────────────────────────────────┤
│ ⬛ BUTTON                            │ ← always there
│    • Text: "View Details"           │
│    • Link: Post URL                 │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Result: From Cluttered to Clean&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BEFORE (all fields, even empty ones):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┐
│ Digital Hub Berlin             │
│ Type:                          │ ← empty!
│ Technologies: Cloud, AI        │
│ Sector:                        │ ← empty!
│ Website:                       │ ← empty!
│ [View Hub]                     │
└─────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;AFTER (only filled fields):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┐
│ Digital Hub Berlin             │
│ Technologies: Cloud, AI        │
│ [View Hub]                     │
└─────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ &lt;strong&gt;MUCH cleaner!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The CSS: Making it a Real Grid
&lt;/h2&gt;

&lt;p&gt;This CSS handles the grid, the card styling, and ensures equal heights (button always at the bottom).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Equal height cards with different content */&lt;/span&gt;
&lt;span class="nc"&gt;.facetwp-template&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto-fill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;minmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stretch&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c"&gt;/* Critical for equal heights */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.catalog-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c"&gt;/* Full height in grid */&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#e5e5e5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.catalog-card&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-4px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.catalog-card&lt;/span&gt; &lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c"&gt;/* Pushes button to the bottom */&lt;/span&gt;
    &lt;span class="nl"&gt;align-self&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex-start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0073aa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Meta information styling */&lt;/span&gt;
&lt;span class="nc"&gt;.card-meta&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.9em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#666&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.card-meta&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Responsive Behavior
&lt;/h3&gt;

&lt;p&gt;The CSS handles this automatically with &lt;code&gt;grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Desktop (3 cols):&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Tablet (2 cols):&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Mobile (1 col):&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;┌───┬───┬───┐&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;┌───┬───┐&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;┌─────────┐&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ C │ C │ C │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ C │ C │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│    C    │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;├───┼───┼───┤&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;├───┼───┤&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;├─────────┤&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;│ C │ C │ C │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│ C │ C │&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;│    C    │&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;└───┴───┴───┘&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;└───┴───┘&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;└─────────┘&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For fine-tuning on mobile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.facetwp-template&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c"&gt;/* Smaller gap on mobile */&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Accessibility Implementation
&lt;/h3&gt;

&lt;p&gt;Ensure keyboard users can navigate your cards easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keyboard Navigation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Tab] → [Hub Title] (focus)
  ↓
[Tab] → [View Button] (focus)
  ↓
[Enter] → Open link
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Suggested HTML structure:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-link"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"View details for Hub Name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Hub Name
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
... content ...
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"View full details"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    View Details
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implementation Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Listing Builder:&lt;/strong&gt; Enable "Show if not empty" for all ACF fields.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Pagination:&lt;/strong&gt; Set to 12-24 items per page.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;CSS:&lt;/strong&gt; Implement equal height cards (button always at bottom).&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Testing:&lt;/strong&gt; Check cards with 1-2 fields vs. fully filled ones.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Mobile:&lt;/strong&gt; Test in Chrome DevTools for all screen sizes.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Accessibility:&lt;/strong&gt; Ensure keyboard navigation works.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Performance:&lt;/strong&gt; Monitor load time with 300+ items.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bonus: Handling Empty States
&lt;/h2&gt;

&lt;p&gt;What if ALL optional fields are empty?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┐
│ Digital Hub Berlin             │
│ [View Hub]                     │
└─────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ Still works! Clean and honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary &amp;amp; Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;FacetWP delivers data, you design the cards.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Conditional display&lt;/strong&gt; is crucial—only show what exists.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Pagination is crucial&lt;/strong&gt;—never overwhelm the user or the browser.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;CSS does the heavy lifting&lt;/strong&gt;—grid, hover effects, and responsiveness.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Questions for the Community
&lt;/h2&gt;

&lt;p&gt;I'm still looking for advice on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Grid Layout:&lt;/strong&gt; 2 vs 3 columns on desktop? What's your experience?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hover Effects:&lt;/strong&gt; Subtle vs noticeable? Any creative ideas?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empty Fields:&lt;/strong&gt; How do you handle missing data elegantly?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance:&lt;/strong&gt; Best practices for ~300 items with filters?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; What should I consider for card interfaces?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Design:&lt;/strong&gt; How do your cards behave on mobile?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What's working well:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FacetWP Listing Builder is intuitive for visual design.&lt;/li&gt;
&lt;li&gt;Clear separation (CPT for structure, ACF for data, FacetWP for display).&lt;/li&gt;
&lt;li&gt;No code needed for basic card layout.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Current challenges:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding facet labels requires custom PHP.&lt;/li&gt;
&lt;li&gt;Ensuring consistent card heights.&lt;/li&gt;
&lt;li&gt;Mobile optimization.&lt;/li&gt;
&lt;li&gt;Performance with many filters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;I'd love to hear from you!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do you structure your ACF fields for catalog items?&lt;/li&gt;
&lt;li&gt;Any FacetWP tips/tricks you've discovered?&lt;/li&gt;
&lt;li&gt;What's your approach to card design in 2024?&lt;/li&gt;
&lt;li&gt;How do you handle GDPR when displaying third-party data?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would love to see examples of your FacetWP projects and hear about what worked (or didn't)!&lt;/p&gt;

&lt;p&gt;Thanks in advance!&lt;/p&gt;

</description>
      <category>wordpress</category>
    </item>
    <item>
      <title>New: WordPress 6.6.2 Maintenance-Release: 15 bug fixes in Core and 11 in Bockeditor.</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Tue, 10 Sep 2024 23:13:34 +0000</pubDate>
      <link>https://dev.to/hub24/new-wordpress-662-maintenance-release-15-bug-fixes-in-core-and-11-in-bockeditor-3d0o</link>
      <guid>https://dev.to/hub24/new-wordpress-662-maintenance-release-15-bug-fixes-in-core-and-11-in-bockeditor-3d0o</guid>
      <description>&lt;p&gt;This minor release includes 15 bug fixes in Core and 11 in the Block Editor, addressing issues like unexpected CSS specificity changes in certain themes. &lt;/p&gt;

&lt;p&gt;For a full summary of the maintenance updates, you can refer to the Release Candidate announcement.&lt;br&gt;
WordPress 6.6.2 is a short-cycle release. The next major release will be version 6.7 planned for November 12, 2024.&lt;br&gt;
If you have sites that support automatic background updates, the update process will begin automatically.&lt;/p&gt;

&lt;p&gt;You can download WordPress 6.6.2 from WordPress.org, or visit your WordPress Dashboard, click “Updates”, and then click “Update Now”.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>WordPress - what are some must-have plugins that you basically install every time you start a new project?</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Wed, 17 Jul 2024 22:00:17 +0000</pubDate>
      <link>https://dev.to/hub24/wordpress-what-are-some-must-have-plugins-that-you-basically-install-every-time-you-start-a-new-project-fdh</link>
      <guid>https://dev.to/hub24/wordpress-what-are-some-must-have-plugins-that-you-basically-install-every-time-you-start-a-new-project-fdh</guid>
      <description>&lt;p&gt;WordPress - what are some must-have plugins that you basically install every time you start a new project? &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>WordPress 6.6: What’s new for developers? news in july 10th</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Sat, 13 Jul 2024 21:20:19 +0000</pubDate>
      <link>https://dev.to/hub24/wordpress-66-whats-new-for-developers-news-in-july-10th-2kk9</link>
      <guid>https://dev.to/hub24/wordpress-66-whats-new-for-developers-news-in-july-10th-2kk9</guid>
      <description>&lt;p&gt;What’s new for developers? (July 2024) By Justin Tadlock&lt;br&gt;
&lt;a href="https://developer.wordpress.org/news/2024/07/10/whats-new-for-developers-july-2024/" rel="noopener noreferrer"&gt;https://developer.wordpress.org/news/2024/07/10/whats-new-for-developers-july-2024/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What’s new for developers? (July 2024) By Justin Tadlock&lt;br&gt;
July 10, 2024&lt;/p&gt;

&lt;p&gt;covering: Blocks, Plugins, Themes&lt;/p&gt;

&lt;p&gt;WordPress 6.6 is just days away, and it’s always an exciting time for developers when a new major release ships. There are lots of new features to tinker with and handy updates to make extending and using WordPress just a little nicer.&lt;/p&gt;

&lt;p&gt;Officially, version 6.6 is expected to ship on July 16, 2024 (read the development cycle timeline for more information). &lt;/p&gt;

&lt;p&gt;If you haven’t already done so, now is a great time to test your plugins and themes against the latest changes. WordPress 6.6 RC 3 is the most up-to-date version to check out.&lt;/p&gt;

&lt;p&gt;Also, be sure to read the Field Guide, which covers all the major changes you should know about. It has links to all the Developer Notes and a breakdown of what happened during the development cycle.&lt;/p&gt;

&lt;p&gt;As usual, this post will contain a list of development-related changes in the past month. Be sure to test them while using WordPress and Gutenberg trunk. Some of the features and changes listed below, unless otherwise noted, are under development and won’t be released until WordPress 6.7.&lt;/p&gt;

&lt;p&gt;mehr Infos, Hintergründe&lt;/p&gt;

&lt;p&gt;WordPress 6.6 with Anne McCarthy &lt;br&gt;
&lt;a href="https://youtu.be/MRUAzefDhjI" rel="noopener noreferrer"&gt;https://youtu.be/MRUAzefDhjI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Plugins and tools - WordPress 6.6 developer notes&lt;/p&gt;

&lt;p&gt;There are several dev notes for WordPress 6.6 that cover new features, updated APIs, and progress on experimental features:&lt;br&gt;
Custom post type actions with Data Views&lt;/p&gt;

&lt;p&gt;A new API in Gutenberg 18.6 lets you register and unregister post type actions when building custom Data Views. Currently, these actions appear in two places in the UI:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Site Editor views
Sidebar in the Post or Site Editor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The API is currently a part of the Editor package but will likely be moved to a dedicated package in the future.&lt;/p&gt;

&lt;p&gt;JSON Schema for .wp-env.json&lt;/p&gt;

&lt;p&gt;.wp-env.json files now have JSON Schema support, which you can define via the standard $schema property. This should make it easier to validate your JSON code in your preferred code editor.&lt;br&gt;
Block Bindings API bug fixes&lt;/p&gt;

&lt;p&gt;Several important bug fixes landed for the Block Bindings API:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reverted a change that caused values beginning with a number to break.
Applied a fix for the Site Editor breaking when selecting bound and unbound blocks.
Corrected an issue where Button blocks with empty content would not work within bindings.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Themes&lt;br&gt;
WordPress 6.6 developer notes&lt;br&gt;
That latest WordPress release will include many theme-heavy features and enhancements. Be sure to read through the dev notes to catch up before 6.6 goes live:&lt;/p&gt;

&lt;p&gt;WordPress 6.6 is changing the game for Custom Fields &lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=YNtHywyxWdc" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=YNtHywyxWdc&lt;/a&gt;&lt;br&gt;
WordPress is bringing Custom Fields to blocks. The Block Bindings API is going to change the way we code for postmeta, and WordPress 6.6 is our first glimpse. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>events.wordpress.org - all over the world: 3,925 events this year :: 108 countries :: 540,537 participants</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Sat, 13 Jul 2024 15:06:50 +0000</pubDate>
      <link>https://dev.to/hub24/eventswordpressorg-all-over-the-world-3925-events-this-year-108-countries-540537-participants-44ik</link>
      <guid>https://dev.to/hub24/eventswordpressorg-all-over-the-world-3925-events-this-year-108-countries-540537-participants-44ik</guid>
      <description>&lt;p&gt;Meet the community - behind WordPress: &lt;a href="https://events.wordpress.org" rel="noopener noreferrer"&gt;https://events.wordpress.org&lt;/a&gt; - all over the world:  3,925 events this year :: 108 countries :: 540,537 participants&lt;/p&gt;

&lt;p&gt;All over the world contributors meet to share, learn, and collaborate on the WordPress project.&lt;/p&gt;

&lt;p&gt;Where WordPress contributors meet&lt;/p&gt;

&lt;p&gt;see a full list of events:  Meet the community - behind WordPress: &lt;a href="https://events.wordpress.org" rel="noopener noreferrer"&gt;https://events.wordpress.org&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;a. Wordcamp: &lt;a href="https://central.wordcamp.org/" rel="noopener noreferrer"&gt;https://central.wordcamp.org/&lt;/a&gt;  Wordcamps all arount the world&lt;br&gt;
b. &lt;a href="https://www.meetup.com/pro/wordpress" rel="noopener noreferrer"&gt;https://www.meetup.com/pro/wordpress&lt;/a&gt;  WordPress-Meetups &lt;br&gt;
c. &lt;a href="https://doaction.org/" rel="noopener noreferrer"&gt;https://doaction.org/&lt;/a&gt; - do action hackatons : &lt;/p&gt;

</description>
    </item>
    <item>
      <title>What’s new in WordPress 6.6:</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Sun, 07 Jul 2024 22:42:44 +0000</pubDate>
      <link>https://dev.to/hub24/whats-new-in-wordpress-66-185o</link>
      <guid>https://dev.to/hub24/whats-new-in-wordpress-66-185o</guid>
      <description>&lt;p&gt;What’s new in WordPress 6.6: &lt;br&gt;
&lt;a href="https://kinsta.com/blog/wordpress-6-6/" rel="noopener noreferrer"&gt;https://kinsta.com/blog/wordpress-6-6/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;see the many great plans - see the awesome outline:&lt;/p&gt;

&lt;p&gt;Pattern overrides, Block Bindings API, Data Views, new design tools, and much more!&lt;/p&gt;

&lt;p&gt;WordPress 6.6 is planned for release on July 16, 2024. The new version focuses on refining and enhancing several features introduced in previous versions. However, plenty of additions take the core one step further along the path of phase 3 of WordPress development.&lt;/p&gt;

&lt;p&gt;A total of 299 Core Track tickets are included in WordPress 6.6, along with 392 enhancements, 462 bug fixes, and 46 accessibility improvements for the Block Editor.&lt;/p&gt;

&lt;p&gt;Among the many new features coming with WordPress 6.6, block pattern overrides are the ones we like the most. Initially planned for release with WordPress 6.5, then postponed to 6.6, the pattern overrides are the second implementation of the Block Bindings API and give us a better idea of what’s coming with future WordPress releases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kinsta.com/blog/wordpress-6-6/" rel="noopener noreferrer"&gt;https://kinsta.com/blog/wordpress-6-6/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Neu: die KDE kommt mit Plasma 6, Frameworks 6 &amp; Gear 24.02</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Wed, 28 Feb 2024 21:33:24 +0000</pubDate>
      <link>https://dev.to/hub24/neu-die-kde-kommt-mit-plasma-6-frameworks-6-gear-2402-58fb</link>
      <guid>https://dev.to/hub24/neu-die-kde-kommt-mit-plasma-6-frameworks-6-gear-2402-58fb</guid>
      <description>&lt;p&gt;Neu: die KDE kommt mit Plasma 6, Frameworks 6 &amp;amp; Gear 24.02&lt;/p&gt;

&lt;p&gt;KDE Plasma die eine moderne, und ausgesprochen funktionsreiche Desktop-Umgebung für Linux-basierte Betriebssysteme. Heute, am 28. Feb. 24 kommt KDE mit einem neuen Release.&lt;/p&gt;

&lt;p&gt;Aus dem Release-Text: &lt;a href="https://kde.org/de/announcements/megarelease/6/"&gt;https://kde.org/de/announcements/megarelease/6/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;KDE - seit langem für sein elegantes Design, die anpassbare Benutzeroberfläche und die umfangreichen Anwendungen bekannt, außerdem ist es Open Source, enthält keine Werbung und legt großen Wert auf den Schutz Eurer Privatsphäre und persönlichen Daten. Probiert es aus: Installiert Plasma auf Eurem aktuellen Laptop und genießt ganz einfach alle Vorteile eines hochmodernen Computererlebnisses - ganz einfach auch dann, wenn Eure Hardware nicht von Windows 11 unterstützt wird.&lt;/p&gt;

&lt;p&gt;gleich zwei Sprünge in die Zukunft&lt;/p&gt;

&lt;p&gt;Mit Plasma 6 wurde der KDE-Technologie-Stack zwei großen Upgrades unterzogen: einem Übergang zur neuesten Version unseres Anwendungsframeworks Qt und einer Migration auf die moderne Linux-Grafikplattform Wayland. Wir haben unser Bestes getan, um sicherzustellen, dass diese Änderungen für die Benutzer so reibungslos und unmerklich wie möglich ablaufen.&lt;/p&gt;

&lt;p&gt;Wir werden weiterhin Unterstützung für die ältere X11-Sitzung für Benutzer bereitstellen, die vorerst lieber dabei bleiben möchten.&lt;/p&gt;

&lt;p&gt;mehr Infos, Daten, Hintergründe - Quellen, Ideen u. mehr!!&lt;/p&gt;

&lt;p&gt;kde.org: &lt;a href="https://kde.org/"&gt;https://kde.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;announcements: &lt;a href="https://kde.org/de/announcements/megarelease/6/"&gt;https://kde.org/de/announcements/megarelease/6/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Features - news - improvements:&lt;/p&gt;

&lt;p&gt;Colors: Plasma on Wayland now has partial support for High Dynamic Range (HDR). On supported monitors and software, this will provide you with richer and deeper colors for your games, videos, and visual creations.&lt;/p&gt;

&lt;p&gt;New Wallpaper: Transform your desktop with the mesmerizing 'Scarlet Tree' wallpaper by axo1otl. Capture the dynamic interplay between the sun's vibrant energy and the comet's celestial dance.&lt;/p&gt;

&lt;p&gt;floating Panel: With Plasma 6, the panel now floats by default.&lt;/p&gt;

&lt;p&gt;New Defaults!: Plasma 6.0 is a major new version, and we decided to change a few default settings to make it easier to use. Plasma is still as configurable as ever, and you can change these settings back to how they were in Plasma 5 if you preferred them that way.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Bluesky hat mittlerweile mehr als 5 Millionen user - es öffnet sich noch weiter</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Sun, 25 Feb 2024 22:33:33 +0000</pubDate>
      <link>https://dev.to/hub24/bluesky-hat-mittlerweile-mehr-als-5-millionen-user-es-offnet-sich-noch-weiter-5dia</link>
      <guid>https://dev.to/hub24/bluesky-hat-mittlerweile-mehr-als-5-millionen-user-es-offnet-sich-noch-weiter-5dia</guid>
      <description>&lt;p&gt;Bluesky hat mittlerweile mehr als 5 Millionen user - es öffnet sich noch weiter&lt;/p&gt;

&lt;p&gt;Es passiert sehr viel bei Bluesky: Bluesky öffnet sich noch weiter und kann jetzt auf verschiedenen Servern genutzt werden. User sind  aufgrund dieser Neuerungen nun auch in der Lage ihre Daten selbst hosten können. Damit sind sie nicht mehr zwingend darauf angewiesen, einen Account auf einem der Bluesky-eigenen Server einzurichten; Auch ohne einen solchen (account) sind sie in der Lage mit allen anderen dort kommunizieren. Ist das nicht ein bisschen wie das bei Mastodon auch läuft?&lt;/p&gt;

&lt;p&gt;[b]mehr infos - mehr Daten und Hintergründe: [/b] &lt;a href="https://en.wikipedia.org/wiki/Bluesky_(social_network)"&gt;https://en.wikipedia.org/wiki/Bluesky_(social_network)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In September 2023, Bluesky Social reached 1 million registered users,[30] and in November, it surpassed 2 million users.[31]&lt;/p&gt;

&lt;p&gt;In December 2023, Bluesky announced a new company logo, which was also used as the icon for the official app and website. This icon was a blue butterfly, inspired by existing users'  usage of the butterfly emoji to indicate their handles on the service. The launch of this new icon corresponded with the release of a public view for posts on the network, allowingthose without accounts on the service to view its posts. The platform became open to all public registrations on 6 February 2024, when the previous invitation-only format was dropped.&lt;/p&gt;

&lt;p&gt;Bluesky unveiled open source code in May 2022 for an early version of its distributed social network protocol, Authenticated Data Experiment (ADX),since renamed the Authenticated Transfer (AT) Protocol.[11] The team opened its early code and placed it under an MIT License so that the development process would be seen in public.&lt;br&gt;
The AT Protocol's initial federation architecture centers around three main services: a Personal Data Server (PDS), Relay (previously referred to as a Big Graph Service, or BGS), and an AppView.[44] A PDS is a server which hosts user data[ in "Data Repositories", which utilize a Merkle tree. The PDS also handles user authentication and manages the signing keys for its hosted repositories. A Relay is described as analogous to an indexer on the web, ingesting repositories from a variety of different PDS hosts and serving them in a single unified stream for other services to ingest. AppViews, meanwhile, are services which consume data from a Relay and hydrate that data to provide behavior for specific clients, e.g. the microblogging feature set for the Bluesky Social app.&lt;/p&gt;

&lt;p&gt;Im Prinzip funktioniert das so wie beim Konkurrenten Mastodon, der Teil des größeren Fediverse ist, es gibt aber auch Unterschiede. Außerdem legt Bluesky mit dem AT Protocol ein anderes Protokoll zugrunde, eine Verbindung der Dienste wurde aber bereits angekündigt – und auf Mastodon kontrovers diskutiert.&lt;/p&gt;

&lt;p&gt;Das teilte das Team in einem Blogeintrag mit und erläutert, dass der Dienst jetzt föderiert. Das bedeutet, dass User ihre Daten selbst hosten können. Damit sind sie nicht mehr darauf angewiesen, einen Account auf dem Server von Bluesky einzurichten, können aber trotzdem mit allen anderen dort kommunizieren. Im Prinzip funktioniert das so wie beim Konkurrenten Mastodon, der Teil des größeren Fediverse ist, es gibt aber auch Unterschiede. Außerdem legt Bluesky mit dem AT Protocol ein anderes Protokoll zugrunde, eine Verbindung der Dienste wurde aber bereits angekündigt – und auf Mastodon kontrovers diskutiert.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Bluesky_(social_network)"&gt;https://en.wikipedia.org/wiki/Bluesky_(social_network)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>socialmedia</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Its alive: WPTavern is back; some of the most impresse site</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Sun, 18 Feb 2024 22:42:59 +0000</pubDate>
      <link>https://dev.to/hub24/its-alive-wptavern-is-back-some-of-the-most-impresse-site-1g28</link>
      <guid>https://dev.to/hub24/its-alive-wptavern-is-back-some-of-the-most-impresse-site-1g28</guid>
      <description>&lt;p&gt;Its alive: WPTavern is back; some of the most impresse site&lt;/p&gt;

&lt;p&gt;It’s alive - !! WPTavern is back - one of the most impressive WP-News site is back ;)&lt;/p&gt;

&lt;p&gt;Okay I have reviewed all the applications, and invited seven people to participate in a […]&lt;br&gt;
&lt;a href="https://wptavern.com/its-alive"&gt;https://wptavern.com/its-alive&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay I have reviewed all the applications, and invited seven people to participate in a $25/hr trial contract where they will have full access to the site, and can post and participate however they like, they just need to log their hours. After a two-week trial, we’ll decide which two will receive full-time Audrey Capital employment offers, and will set up some fair and transparent system for freelancers to contribute to the site as well.&lt;br&gt;
Thank you to everyone who applied, even if you are not one of the seven that made it to this next stage.&lt;/p&gt;

&lt;p&gt;stay tuned - check back &lt;a href="https://wptavern.com/"&gt;https://wptavern.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;more news - ideas and backgrounds:&lt;br&gt;
&lt;a href="https://wordpress.org/"&gt;https://wordpress.org/&lt;/a&gt;&lt;br&gt;
more developer-news: &lt;a href="https://developer.wordpress.org/"&gt;https://developer.wordpress.org/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>wordpress</category>
      <category>beginners</category>
      <category>php</category>
    </item>
    <item>
      <title>wordpress-plugin (widget) that performs a Neaby-search on the openstreetmap-endpoint: around x find y</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Sun, 18 Feb 2024 22:40:48 +0000</pubDate>
      <link>https://dev.to/hub24/wordpress-plugin-widget-that-performs-a-neaby-search-on-the-openstreetmap-endpoint-around-x-find-y-2kom</link>
      <guid>https://dev.to/hub24/wordpress-plugin-widget-that-performs-a-neaby-search-on-the-openstreetmap-endpoint-around-x-find-y-2kom</guid>
      <description>&lt;p&gt;i am about to create a wordpress-plugin that offers the output of the following data ... the data of a a Neaby-search:&lt;/p&gt;

&lt;p&gt;can we create a quewry that shows up all the schools that are in the near - in other words &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(it is a area search) how to perform a search - for &lt;a href="http://www.overpass-turbo.eu"&gt;http://www.overpass-turbo.eu&lt;/a&gt; :&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;example:&lt;/strong&gt; what i am after. how to create a request to find all the schools - in the area of - let us say munich - in a radius of 10 km for example!?&lt;/p&gt;

&lt;p&gt;a output that shows all the schools around a certain point - or in other words; all in Munich - in a area /(radius) of let us say 10 kilometers can we create a query that works on Overpass-turbo.eu&lt;/p&gt;

&lt;p&gt;eg like so: first of all see the intened osm - nearby-search that runs against the overpass-Turbo.eu -API&lt;/p&gt;

&lt;p&gt;`[out:csv(::id,::type,::lon,::lat,amenity,name,"addr:postcode","addr:city","addr:street","addr:housenumber","contact:website",website,"contact:email")]&lt;br&gt;
    [timeout:600];&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;area[name="München"];
nwr(area)[name="Marienplatz"];
nwr["amenity"="school"](around:10000);
out center;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;it gives back the results:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`@id @type   @lon    @lat    amenity name    addr:postcode   addr:city   addr:street addr:housenumber    contact:website website contact:email
312793352   node    11.5815046  48.1322045  school  Schulverbund München    80469   München Kohlstraße  5       https://www.schulverbund.de/    
703266518   node    11.5746643  48.1387135  school  EAM School of International Business                    https://eam-muenchen.com/       
1096318121  node    11.5827303  48.1368214  school  Otto-Falckenberg-Schule 80539   München Stollbergstraße 7a      https://www.otto-falckenberg-schule.de/ 
1096318127  node    11.5822067  48.1376239  school  Otto-Falckenberg-Schule 80539   München Falckenbergstraße   2       https://www.otto-falckenberg-schule.de/ 
1142514805  node    11.5665710  48.1353750  school  Evangelisches Bildungszentrum   80331   München Herzog-Wilhelm-Straße   24  https://www.stadtakademie-muenchen.de/      stadtakademie.muenchen@elkb.de
1576527684  node    11.5728245  48.1336093  school  Theresia-Gerhardinger-Grundschule am Anger                      https://gs-am-anger.de/ 
1576528339  node    11.5721671  48.1333479  school  Theresia-Gerhardinger-Gymnasium am Anger                        https://www.tggaa.de/   
2493656150  node    11.5814603  48.1366835  school  Förderschule an der Herrnstraße 80539   München Herrnstraße 21      https://stadt.muenchen.de/service/info/sonderpaedagogisches-foerderzentrum-muenchen-mitte-2-herrnstr-21/1060084/    
2654727020  node    11.5812823  48.1365482  school  Grundschule an der Herrnstraße`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;well i think that firstly i should to take care that i have to create the WordPress Plugin Structure: Set up the basic structure of your WordPress plugin, including a main PHP file and any additional files or folders you may need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Register the Widget&lt;/strong&gt;: then i need to define a  certain kind of a custom widget class that extends the WP_Widget class provided by WordPress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implement&lt;/strong&gt; the &lt;strong&gt;Widget Logic&lt;/strong&gt;: Within your custom widget class, implement the logic to retrieve data from the Overpass API and format it for display.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Display&lt;/strong&gt; the &lt;strong&gt;Widget&lt;/strong&gt;: Register a callback function to output the widget content, including any HTML markup necessary to display the data.&lt;/p&gt;

&lt;p&gt;Here's a basic outline of how you might approach each step:&lt;br&gt;
`&lt;br&gt;
    &amp;lt;?php&lt;br&gt;
    /*&lt;br&gt;
    Plugin Name: osm Nearby Schools Widget&lt;br&gt;
    Description: Widget to display nearby schools using Overpass API.&lt;br&gt;
    Version: 0.9&lt;br&gt;
    Author: osm-fan &lt;br&gt;
    */&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Step 2: well - first of all - we ought to register the Widget propperly
class Nearby_Schools_Widget extends WP_Widget {
    // Constructor
    public function __construct() {
        parent::__construct(
            'nearby_schools_widget', // Base ID
            'Nearby Schools Widget', // Name
            array( 'description' =&amp;gt; 'Displays nearby schools using Overpass API' ) // Args
        );
    }

    // Step 4: we ought to display the Widget
    public function widget( $args, $instance ) {
        // Widget output
        echo $args['before_widget'];
        echo $args['before_title'] . 'Nearby Schools' . $args['after_title'];
        echo '&amp;lt;ul&amp;gt;';

        // Step 3: Implement the Widget Logic
        $schools = $this-&amp;gt;get_nearby_schools();
        foreach ($schools as $school) {
            echo '&amp;lt;li&amp;gt;' . $school-&amp;gt;name . '&amp;lt;/li&amp;gt;';
        }

        echo '&amp;lt;/ul&amp;gt;';
        echo $args['after_widget'];
    }

    // Step 3: here we  implement the Widget Logic
    private function get_nearby_schools() {
        $url = 'http://overpass-api.de/api/interpreter';
        $data = array(
            'data' =&amp;gt; '[out:json][timeout:25];(node["amenity"="school"](around:10000,48.1351,11.5820););out;',
        );

        $response = wp_remote_post( $url, array(
            'body' =&amp;gt; $data,
        ) );

        if ( is_wp_error( $response ) ) {
            return array();
        }

        $body = wp_remote_retrieve_body( $response );
        $schools = json_decode( $body );

        return $schools-&amp;gt;elements;
    }
}

// Step 2: Register the Widget
function register_nearby_schools_widget() {
    register_widget( 'Nearby_Schools_Widget' );
}
add_action( 'widgets_init', 'register_nearby_schools_widget' );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;hmm - well - i think that this could be a first step into the direction:  i think that this  code sets up a WordPress plugin that creates a widget called "OSM-Nearby Schools Widget"&lt;/p&gt;

&lt;p&gt;Well the widget retrieves nearby schools using Overpass API within a 10km radius of Munich's coordinates (48.1351 latitude, 11.5820 longitude), and displays them in an unordered list.  Well we may need to adjust the coordinates and then run it against the Overpass API query to fit even more specific requirements.&lt;/p&gt;

&lt;p&gt;Do you have some additional ideas - what to add to the plugin(logic)?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>wordpress</category>
      <category>php</category>
    </item>
    <item>
      <title>Answer: Running a script in Google Colab - throws back no results</title>
      <dc:creator>hubs</dc:creator>
      <pubDate>Sat, 10 Feb 2024 07:52:59 +0000</pubDate>
      <link>https://dev.to/hub24/answer-running-a-script-in-google-colab-throws-back-no-results-422</link>
      <guid>https://dev.to/hub24/answer-running-a-script-in-google-colab-throws-back-no-results-422</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AoTUKOcU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/stackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/77856952/running-a-script-in-google-colab-throws-back-no-results/77857172#77857172" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: Running a script in Google Colab - throws back no results
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Jan 22 '24&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/77856952/running-a-script-in-google-colab-throws-back-no-results/77857172#77857172" rel="noopener noreferrer"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oeieW07A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/stackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          2
        &lt;/div&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h2-sXgSn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/stackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;The website you're trying to scrap from probably has some sort of anti-bot protection with CloudFlare or similar services, hence your scrapper are not extracting anything. You need to use &lt;code&gt;selenium&lt;/code&gt; with a headless browser like Headless Chrome or PhantomJS. Selenium automates a real browser, which can navigate Cloudflare's anti-bot…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/77856952/running-a-script-in-google-colab-throws-back-no-results/77857172#77857172" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
