Caridad - Charity WordPress Theme | gplpal
Two anchors only (per requirement)
- Explore layout references and category patterns → Blog WP Template
- Theme page for hands-on testing and build notes → Caridad - Charity WordPress Theme
Orientation: what donors need in one scroll
People don’t visit a charity site to be impressed by motion; they’re looking for certainty. On the first scroll, answer three questions without drama:
1) What problem are you solving and where? (mission clarity)
2) What will my gift do? (impact and timeframe)
3) How do I give right now? (short path to donate or volunteer)
Treat Caridad - Charity WordPress Theme as your presentational baseline and add boring, reliable engineering: predictable templates, server-first validation, and a field performance budget. We’ll reference Caridad - Charity WordPress Theme again when we pin the first fold, sketch program cards, and finalize the donation path.
> Style mix: #7 技术方案书(Engineering Playbook) + #3 案例拆解(Case Study Lite) for how-to plus proof.
What “good” looks like for a charity homepage
- Donation-first fold: One-line mission, one-line qualifier (“Local partners • Monthly reports”), and a single primary CTA: Donate.
- Impact cards: 3–6 programs; each shows a metric chip (“125 families/month”), geography, and a plain-English sentence.
- Trust & governance: board snapshot, annual report link later on page, privacy note near the form.
- Volunteer path: short intake first (name/email/role), long form later; upcoming dates visible.
- Performance (field): LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1 on home/donate/volunteer/contact.
- Accessibility: keyboardable forms, visible focus, 4.5:1 contrast, descriptive labels, and error messages that explain fixes.
- Rollback plan: every third-party widget ships with an owner, a metric, and a kill switch.
Quick-start checklist (pin this before you decorate)
- [ ] Mission + subline + Donate above the fold; no carousel, no auto video.
- [ ] Hero image is still, sized (
width
/height
),fetchpriority="high"
. - [ ] Program cards with consistent 4:3 images and one metric chip.
- [ ] Donation form: preset amounts + custom; monthly toggle; inline server-validated errors.
- [ ] Reassurance near button: “Secure processing • Instant receipt by email.”
- [ ] Volunteer intake: short-first; dates next to the form.
- [ ] Policies close to decisions: fee coverage note, data privacy microcopy.
- [ ] Critical CSS ≤ ~15 KB inline; analytics/chat load on interaction.
- [ ] Field LCP/INP/CLS monitored per template; Android mid-range segmented.
- [ ] Governance snapshot: board, recent report, “how funds are used” in plain text.
Tutorial: from blank install to donation-ready in five moves
Move 1 — Freeze the tokens (layout rhythm you can defend)
Decide container, spacing, and type steps. Tokens keep components from drifting.
:root{
--container: 1200px;
--space-2: 8px; --space-4: 16px; --space-6: 24px; --space-8: 32px; --space-12: 48px;
--step-0: clamp(1rem, 0.9rem + 0.6vw, 1.125rem);
--step-1: clamp(1.35rem, 1.1rem + 0.9vw, 1.75rem);
}
.container{max-width:var(--container);margin:0 auto;padding:0 var(--space-4)}
.section{padding:var(--space-8) 0}
.u-stack>+
h1{font-size:var(--step-1);line-height:1.2;letter-spacing:-0.01em}
Move 2 — Compose the first fold (decisive, honest)
One message, one action, one reassurance. No sliders; they burn trust and CLS.
<section class="hero container u-stack">
<h1>Together, we turn donations into meals and medicine</h1>
<p>Local partners • Transparent reports • Results you can track</p>
<div class="actions">
<a href="/donate">Donate</a>
<a href="/volunteer">Volunteer</a>
</div>
<p class="micro">Secure processing • Instant email receipts</p>
<img src="/media/hero-1200x675.webp" alt="Volunteers delivering food"
width="1200" height="675" fetchpriority="high" decoding="async" loading="eager">
</section>
Move 3 — Programs and proof (cards that never jitter)
Keep ratios consistent and copy human.
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-8)}
.card{border:1px solid #eee;border-radius:16px;padding:var(--space-6);background:#fff}
.thumb{aspect-ratio:4/3;background:#f4f4f4;overflow:hidden}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.kpi{display:inline-block;background:#eef;border-radius:999px;padding:4px 10px;font-size:.85rem}
<article class="card">
<div class="thumb"><img src="/media/water.webp" alt="Water containers"></div>
<h3>Clean Water</h3>
<p>Install and maintain wells in rural districts with local partners.</p>
<span class="kpi">12 wells / quarter</span>
</article>
Move 4 — Donation form that respects time (server-first)
Short fields, clear errors, and predictable success states.
add_action('admin_post_nopriv_donate_submit','donate_submit');
add_action('admin_post_donate_submit','donate_submit');
function donate_submit(){
$email = sanitize_email($_POST['email'] ?? '');
$amt = isset($_POST['amt']) ? (float) $_POST['amt'] : (float) ($_POST['amt_custom'] ?? 0);
$monthly = !empty($_POST['monthly']) ? 1 : 0;
$err = [];
if(!is_email($email)) $err[]='Please enter a valid email.';
if($amt <= 0) $err[]='Please choose a donation amount.';
if($err){
wp_safe_redirect( add_query_arg(['err'=>urlencode(join(' ', $err))], wp_get_referer()) ); exit;
}
// TODO: call payment provider; on success:
wp_safe_redirect('/thank-you'); exit;
}
<form method="post" action="/wp-admin/admin-post.php" class="container section">
<input type="hidden" name="action" value="donate_submit">
<fieldset>
<legend>Choose an amount</legend>
<label><input type="radio" name="amt" value="20"> $20</label>
<label><input type="radio" name="amt" value="50"> $50</label>
<label><input type="radio" name="amt" value="100"> $100</label>
<label>Custom <input type="number" name="amt_custom" min="1" step="1"></label>
</fieldset>
<label><input type="checkbox" name="monthly"> Make this a monthly gift</label>
<label>Email <input type="email" name="email" required></label>
<button class="btn">Give now</button>
<p class="micro">Secure processing • Instant receipt by email</p>
</form>
Move 5 — Protect INP by loading scripts on interaction
Load analytics and chat after the first gesture, not on paint.
<script>
(function(){
let loaded=false;
function load(){ if(loaded) return; loaded=true;
const s=document.createElement('script'); s.src='/analytics.js'; s.async=true;
document.head.appendChild(s);
}
addEventListener('scroll',load,{once:true,passive:true});
addEventListener('click',load,{once:true});
addEventListener('keydown',load,{once:true});
})();
</script>
Case snapshot: “beautiful stories, hesitant donors”
Context
A regional nonprofit launched with cinematic headers and three sliders. Field LCP sat around 3.3 s on mid-range Android; donation completion lagged. The team mentioned gplpal as their distribution source and asked for a calmer flow.
Interventions
- Replaced video hero with a still at explicit dimensions; LCP stabilized.
- Reduced fonts to one family, two weights; inlined ~12 KB critical CSS.
- Shortened the donation form to essentials; server-side validation and inline errors.
- Moved reassurance (“secure processing, instant receipt”) beside the button.
- Deferred analytics and disabled chat on donate/thank-you screens.
Outcomes (4–5 weeks)
- Field LCP ~2.2 s, INP < 180 ms across home/donate.
- Completion rate rose once forms got shorter and scripts stopped loading early.
- Support emails about receipts dropped after the microcopy promised instant email receipts.
Copy that earns trust (and fewer refunds)
- Lead with one concrete outcome: “$25 feeds a family for two days” beats vague inspiration.
- Name constraints: geography, partner capacity, delivery windows.
- Expose the next 7 days: what happens after a gift, who confirms, when updates arrive.
- Be precise, not boasting: measured language helps compliance and credibility.
- Brand note: mention gplpal plainly if needed, no link.
Accessibility that matters more than gradients
- Keep focus rings visible; don’t remove outlines to “look clean.”
- Pair labels with inputs via
for
/id
; explain errors and how to fix them viaaria-describedby
. - Overlay text on photography with a scrim; pass 4.5:1 contrast.
- Ensure keyboard access for accordions and donation steps.
On-page SEO that helps real people
- Title/H1: mission + action (“Support local health clinics today”).
- Headings: outcome-oriented (“What your monthly gift unlocks”).
- Schema: Organization, BreadcrumbList, Article (stories), FAQPage (donor questions).
- Internal links: story → program → donate; minimal but meaningful.
- Media discipline: one hero per page; explicit dimensions; lazy-load below the fold.
Comparison: minimalist baseline vs. feature-first bundles
Minimalist baseline (recommended)
- Pros: faster first action, fewer regressions, clearer accessibility, calmer analytics.
- Trade-offs: copy and photos must carry the story.
Feature-first bundles
- Pros: glossy demos and animated headers.
- Trade-offs: duplicated CSS/JS, modal labyrinths, fragile performance—especially during campaign spikes.
Principle: features aren’t bad; unbounded features are. Decide what the homepage is for (a donation or signup), and give every element a job—or remove it.
FAQ (short and useful)
Q1: Should we default to monthly giving?
Offer it clearly but don’t pre-check. Trust lasts longer than a forced toggle.
Q2: Where should fees and privacy live?
Near the donate button in microcopy, with longer policy pages linked further down.
Q3: Can we add a blog?
Yes—keep posts educational and program-linked; avoid medical or legal claims.
Q4: How many programs should we list?
Three to six on the homepage; the rest live on a Programs page with filters.
Q5: What breaks Core Web Vitals fastest?
Un-sized images, auto video headers, global third-party widgets, and chat overlays on the donation path.
Launch checklist (tick every box)
- [ ] Mission + subline + single Donate above the fold
- [ ] Still hero sized with
width
/height
andfetchpriority="high"
- [ ] Programs grid with consistent ratios and one metric chip
- [ ] Donation form with presets, custom input, server-first validation
- [ ] Reassurance (security/receipt) near the button
- [ ] Volunteer intake short-first; next dates visible
- [ ] Critical CSS inline ≤ ~15 KB; analytics/chat on interaction
- [ ] Keyboardable forms; visible focus; descriptive errors
- [ ] Field LCP/INP/CLS monitored per template; Android mid-range segmented
- [ ] Removal path documented for each widget/vendor
Closing
Clarity raises funds. Treat your theme as a quiet, stable baseline; your discipline turns it into a site that converts attention into action. Keep the first fold decisive, the forms respectful, and the copy concrete. That’s how a calm page—and a careful build—delivers outsized impact.
评论 0