首页/新闻资讯/正文详情

wp-calypso 促销区块组件(Promo Section)完全指南:布局、属性与实战用例

发布时间:2026/9/24 16:32:15 来源:云帆数科 栏目:资讯中心
wp-calypso 促销区块组件(Promo Section)完全指南:布局、属性与实战用例
前端CMS【免费下载链接】wp-calypsoThe JavaScript and API powered WordPress.com项目地址https://gitcode.com/gh_mirrors/wp/wp-calypso点击查看免费下载Promo Section 是 wp-calypso 中用于排版PromoCard组件、构建推广型页面布局的容器组件主要服务于 Earn赚钱板块与 Marketing Tools营销工具等页面。本文基于 client/components/promo-section/README.md 展开结合仓库源码深入讲解其数据模型、两种调用形态、子组件PromoCard、PromoCardCta、PromoCardPrice的完整属性并通过源码级证据与可运行示例帮助你直接复用这套促销卡片方案搭建同类营销落地页。组件定位与适用场景PromoSection是一个纯展示型布局组件它本身不持有业务状态只负责把一组PromoCard按“1 个主推卡 若干普通卡”的结构排列成页面其设计初衷是为 Earn 板块和 Marketing Tools 提供统一的推广卡片排版。从入口文件 client/components/promo-section/index.tsx 可以看到它的渲染结构非常精简const PromoSection: FunctionComponent Props ( { header, promos } ) { return ( div classNamepromo-section { header PromoSectionCard isPrimary { ...header } / } div classNamepromo-section__promos { promos.map( ( promo, i ) ( PromoSectionCard { ...promo } key{ i } / ) ) } /div /div ); };结构约定如下传入header时它会被渲染为isPrimary{ true }的主推卡片位于区块顶部视觉上更突出详见后文is-primary样式promos数组中的每一项渲染为一张普通PromoCard统一收容在.promo-section__promos容器内由 CSS 自动完成栅格排列。快速上手一个最小可用示例原文档给出了最基础的PromoCard用法README.mdimport PromoCard from calypso/my-sites/promo-section/promo-card; const PromoCardExample () { return ( PromoCard titleUnder-used Feature img src/calypso/images/wordpress/logo-stars.svg width170 height143 altWordPress logo / p This is a description of the action. It gives a bit more detail and explains what we are inviting the user to do. /p /PromoCard ); };几点说明PromoCard可直接嵌套任意 JSX 作为children因此既可以直接放img也可以传结构化image属性见下文原文档中的导入路径calypso/my-sites/promo-section/promo-card为历史路径别名写法当前仓库中该组件实际位于calypso/components/promo-section/promo-card见 promo-card/index.tsx 及 docs/example.jsx 中的导入方式引用时以实际存在的components路径为准。声明式数据驱动PromoSection 的属性模型PromoSection的使用方式是传数据对象而非手写 JSX其完整类型定义位于 index.tsxexport interface PromoSectionCardProps extends PromoCardProps { body: string | TranslateResult; actions?: PromoCardCtaProps; } export interface Props { header?: PromoSectionCardProps; promos: PromoSectionCardProps[]; }header可选。用于主推卡片自动加isPrimary如 Earn 页“Start earning money”的引导卡promos必填数组。每项是一个卡片数据对象运行时被展开为PromoSectionCard { ...promo } /每个卡片对象在PromoCardProps基础上额外要求body正文文案支持 i18n 的TranslateResult并可选actionsCTA 配置类型见 cta.tsx。内部PromoSectionCard会对actions做一次分发index.tsx若actions.cta提供了自定义component则直接渲染该自定义组件否则渲染内置的PromoCardCtaCTA 按钮 可选的 “Learn more” 链接。仓库提供了完整的声明式示例 docs/example.tsx直接可复制运行import earnSectionImage from calypso/assets/images/earn/earn-section.svg; import recurringImage from calypso/assets/images/earn/recurring.svg; import simplePaymentsImage from calypso/assets/images/earn/simple-payments.svg; import PromoSection, { Props as PromoSectionProps } from calypso/components/promo-section; const PromoSectionExample () { const promos: PromoSectionProps { header: { title: Start earning money, image: { path: earnSectionImage }, body: There is a range of ways to earn money through your WordPress.com Site., }, promos: [ { title: Collect one-time payments, body: Add a payment button to any post or page to collect PayPal payments for physical products, digital goods, services, or donations. Available to any site with a Premium plan., image: { path: simplePaymentsImage }, actions: { cta: { text: Collect One-time Payments, action: / } }, }, { title: Collect payments, body: Charge for services, collect membership dues, or take one-time or recurring donations. Automate recurring payments, and use your site to earn reliable revenue. Available to any site with a paid plan., image: { path: recurringImage }, actions: { cta: { text: Collect Payments, action: / } }, }, ], }; return ( div classNamedesign-assets__group PromoSection { ...promos } / /div ); }; export default PromoSectionExample;可以看到CTA 的action可以直接传字符串路径内部会转成href也可以传函数或对象具体见下文 PromoCardCta 一节。PromoCard促销卡片的核心展示单元PromoCard本质是“基于Card、参照ActionPanel结构”设计的展示卡片用于推广套餐功能与合作伙伴内容见 promo-card/README.md。其渲染底层直接复用了ActionPanel系列组件promo-card/index.tsxActionPanel className{ classes } { image ! isCompact ( ActionPanelFigure inlineBodyText{ false } align{ imageActionPanelAlignment } { isImage( image ) ? ( img src{ image.path } alt{ image.alt || } className{ image.className } / ) : ( image ) } { titleComponentLocation TitleLocation.FIGURE titleComponentHeader } /ActionPanelFigure ) } { icon ! isCompact ( ActionPanelFigure inlineBodyText{ false } alignleft Gridicon icon{ icon } size{ 32 } / { titleComponentLocation TitleLocation.FIGURE titleComponentHeader } /ActionPanelFigure ) } ActionPanelBody { title ( ActionPanelTitle className{ clsx( { is-primary: isPrimary } ) } { icon isCompact Gridicon icon{ icon } size{ 32 } / } { title } { badgeComponent } /ActionPanelTitle ) } { titleComponentLocation TitleLocation.BODY titleComponentHeader } { isPrimary ? Children.map( children, ( child ) { if ( ! child || ! isValidElement { isPrimary?: boolean } ( child ) ) { return child; } return PromoCardCta child.type ? cloneElement( child, { isPrimary } ) : child; } ) : children } /ActionPanelBody /ActionPanel完整属性表类型定义见 promo-card/index.tsx属性类型默认值说明titlestring \| TranslateResult—卡片标题支持 i18n 翻译结果titleComponentReactElement—自定义标题元素可放置在 BODY 或 FIGURE 区域titleComponentLocationTitleLocationTitleLocation.BODY自定义标题的位置BODY位于正文区、FIGURE位于图示区iconstring—Gridicon 图标名非 compact 时渲染在左侧图示区compact 时渲染在标题内imageImage \| ReactElement—图片既可传{ path, className?, alt?, align? }对象也可直接传任意 React 元素isPrimarybooleanfalse是否为主推卡视觉与排版上更突出badgestring \| ReactElement—标题旁的角标徽章渲染为BadgeclassNamestring—追加到卡片根节点的自定义类名childrenReactNode—卡片正文内容variationPromoCardVariationPromoCardVariation.Default卡片形态compact紧凑模式 /default默认模式Image对象的align字段支持left | right用于控制图示在ActionPanelFigure中的对齐方向默认left见 index.tsx。isPrimary 与 compact 两种形态的行为差异从源码可以看到两处关键分支逻辑isPrimary主推卡PromoCardCta child.type ? cloneElement( child, { isPrimary } ) : child—— 会自动把children中的PromoCardCta注入isPrimary让主按钮样式同步为 primary同时标题使用品牌字体并放大字号图文居中排版见 style.scss 中.is-primary规则如$font-title-medium、justify-content: center等。compact紧凑卡isCompact variation PromoCardVariation.Compact此时不渲染image 与 icon 的ActionPanelFigure图示区图标改为内嵌在标题行内并以 20px 网格图标展示适合空间受限的列表场景style.scss。响应式行为两张卡片的样式共同负责响应式布局PromoCard在480px断点由纵向改为横向图文并排主推卡在660px隐藏图示、800px恢复图示避免 660–800px 区间插图过小1280px时左右内边距加大style.scssPromoSection的.promo-section__promos在移动端单列1280px断点切换为flex-direction: row每张卡宽度calc(50% - 1em)实现两列栅格style.scss。PromoCardCta主按钮与 Learn more 链接CTA 子组件负责渲染主行动按钮cta.tsx其属性与内部逻辑如下interface CtaAction { url: URL; onClick: ClickCallback; selfTarget?: boolean; label?: string; } export interface CtaButton { text: string | TranslateResult; action: URL | ClickCallback | CtaAction; isPrimary?: boolean; component?: JSX.Element; disabled?: boolean; busy?: boolean; }cta.text按钮文案cta.action支持三种形态——字符串 URL、点击回调函数、或{ url, onClick, selfTarget }对象component自定义按钮元素若存在则 PromoSection 优先渲染它而非内置按钮disabled/busy按钮禁用与加载态直接透传给automattic/components的ButtonlearnMoreLink可选次级链接渲染为 borderless 的 “Learn more” 按钮默认文案可被label覆盖且 URL 会经过localizeUrl本地化处理cta.tsx。按钮 props 的拼装逻辑值得注意cta.tsx对象形态的 action 会同时设置href、onClick与selfTarget当存在href且未设置selfTarget时自动补target_blank新标签打开随后删除 React 不认识的selfTarget属性以避免控制台警告。promo-card自带的文档示例 docs/example.jsx 展示了完整写法包括通过useSelector( getSelectedSiteSlug )动态拼接结账链接PromoCard titleUnder-used Feature image{ img } isPrimary{ false } p This is a description of the action. It gives a bit more detail and explains what we are inviting the user to do. /p PromoCardCTA cta{ { text: translate( Upgrade to Pro Plan ), action: { url: /checkout/${ siteSlug }/pro, onClick: clicked, selfTarget: true, }, } } / /PromoCardPromoCardPrice价格展示组件PromoCardPrice用于在卡片中展示价格、折扣与附加信息price.tsx属性类型说明formattedPricestring \| TranslateResult价格文案不传时默认渲染为 “Free”经translate处理discountstring \| TranslateResult \| null折扣文案渲染为绿色折扣标签同时给原价加删除线additionalPriceInformationstring \| TranslateResult \| ReactElement价格下方的附加说明可传任意 React 元素其格式化约定见源码注释formattedPrice应遵循格式span$price/span /interval例如span$1/span /year配合 SCSS 中.price__cost span的大号价格样式style.scss即可渲染出“大号价格 小号计费周期”的经典定价卡片效果。小结如何在自己的页面中组合使用组合思路可以总结为三层单卡层用PromoCard 可选PromoCardCta、PromoCardPrice描述一张促销卡的内容、图示、徽章、按钮与价格区块层用PromoSection的headerpromos数据模型声明式拼装整个推广区块主推信息放header样式层无需额外编写栅格代码PromoSection与PromoCard自带响应式规则移动端单列、宽屏两列主推卡自动居中放大。需要接入时直接引用calypso/components/promo-section与calypso/components/promo-section/promo-card并按上文示例填充数据即可若需自定义按钮样式或展示价格可分别扩展PromoCardCta的component字段或使用PromoCardPrice。相关源码与示例可进一步查看 client/components/promo-section/index.tsx、client/components/promo-section/promo-card/index.tsx、client/components/promo-section/promo-card/cta.tsx、client/components/promo-section/promo-card/price.tsx 及两个 docs 示例文件 docs/example.tsx 与 promo-card/docs/example.jsx。赞分享前端CMS【免费下载链接】wp-calypsoThe JavaScript and API powered WordPress.com项目地址https://gitcode.com/gh_mirrors/wp/wp-calypso点击查看免费下载相关推荐wp-calypso Section 组件详解构建带标题的分区布局与暗色背景实践wp calypso Section 组件详解构建带标题的分区布局与暗色背景实践 Section 是 WordPress.com 前端应用 wp calyps前端CMSwp-calypso Main 布局组件完全指南掌握 calypso/components/main 的宽屏布局与无障碍语义wp calypso Main 布局组件完全指南掌握 calypso/components/main 的宽屏布局与无障碍语义 Main 是 wp calyps前端CMSwp-calypso 双栏布局组件 Layout 与 Column 完整解析wp calypso 双栏布局组件 Layout 与 Column 完整解析 导读 Layout 与 Column 是 WordPress.com 前端核心仓库前端CMS上一篇3步轻松上手Vortex游戏模组管理器完全指南下一篇HsMod炉石传说终极增强插件 - 55项功能完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

使用 lego 通过百度云(Baidu Cloud)DNS 完成 ACME DNS-01 挑战:配置指南与源码实现解析
使用 lego 通过百度云(Baidu Cloud)DNS 完成 ACME DNS-01 挑战:配置指南与源码实现解析

网络安全密码学 【免费下载链接】lego Lets Encrypt/ACME client and library written in Go 项目地址: https://gitcode.com/gh_mirrors/le/lego 点击查看 免费下载 导读 本文以 lego 官方文档中 Baidu Cloud DNS 提供者页面(docs/content/dns/zz_gen… · 2026/9/24 16:32:15

dbskill 的 dbs-ai-check 深度解析:基于 22 个特征指纹的 AI 写作痕迹识别 Skill
dbskill 的 dbs-ai-check 深度解析:基于 22 个特征指纹的 AI 写作痕迹识别 Skill

AI 技能AI 应用 【免费下载链接】dbskill dontbesilent 的商业诊断 Skills 项目地址: https://gitcode.com/gh_mirrors/db/dbskill 点击查看 免费下载 dbs-ai-check 是 dontbesilent 商业工具箱 dbskill 中的 AI 写作特征检测 Skill,它不负责改写文案&a… · 2026/9/24 16:32:15

如何玩转Edge0-35B-A3B对话模板:思考模式、工具调用与多模态提示词完整指南
如何玩转Edge0-35B-A3B对话模板:思考模式、工具调用与多模态提示词完整指南

如何玩转Edge0-35B-A3B对话模板:思考模式、工具调用与多模态提示词完整指南 【免费下载链接】Edge0-35B-A3B-preview 项目地址: https://ai.gitcode.com/hf_mirrors/Edge0/Edge0-35B-A3B-preview 本文带你完整解析 Edge0-35B-A3B 的对话模板(cha… · 2026/9/24 16:32:09

基于SpringBoot+Vue的美妆产品推荐系统(源代码+文档+PPT+调试+讲解)
基于SpringBoot+Vue的美妆产品推荐系统(源代码+文档+PPT+调试+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台… · 2026/9/24 17:03:47

openFrameworks 视频播放实战:基于 ofVideoPlayer 的加载、速度控制与像素可视化
openFrameworks 视频播放实战:基于 ofVideoPlayer 的加载、速度控制与像素可视化

openFrameworks 视频播放实战:基于 ofVideoPlayer 的加载、速度控制与像素可视化 【免费下载链接】openFrameworks openFrameworks is a community-developed cross platform toolkit for creative coding in C. 项目地址: https://gitcode.com/gh_mirrors/op/ope… · 2026/9/24 17:03:47

30 分钟配好 Continue:JetBrains 插件安装、离线构建与调参指南
30 分钟配好 Continue:JetBrains 插件安装、离线构建与调参指南

30 分钟配好 Continue:JetBrains 插件安装、离线构建与调参指南 【免费下载链接】continue open-source coding agent 项目地址: https://gitcode.com/GitHub_Trending/co/continue 写代码时总要切到网页版 AI 问一句,答完再切回来贴代码&#xf… · 2026/9/24 17:03:47

【Dify】FLUX绘画机器人多模态识别与语音交互自动化
【Dify】FLUX绘画机器人多模态识别与语音交互自动化

以多模态智能交互为核心的自动化创作方式,正推动AI艺术、教育与硬件结合的快速发展。视觉识别、语音播报与机器人控制的结合,为传统绘画和教学带来了新的可能。 本文梳理FLUX绘画机器人结合多模态识别和语音播报的完整工作流,实现从图片输入、内容识别、创意生成到语音解读… · 2026/9/24 17:03:27

国军标B码闰秒的测试方法
国军标B码闰秒的测试方法

此图来自成都云智优创科技有限公司www.iyzyc.cn简介GJB-B码发生器测试仪是专门用于产生B码的测试仪,借助它可以用来测试带B码对时的接收设备。通过配置软件,可以输出为任意时间,特别是对临界时间的测试,比如2099年12月31日23时59分… · 2026/9/24 17:03:27

大麦自动抢票指南:Python Selenium + Appium 双端抢票脚本完整教程
大麦自动抢票指南:Python Selenium + Appium 双端抢票脚本完整教程

大麦自动抢票指南:Python Selenium Appium 双端抢票脚本完整教程 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase ticket-purchase 是一… · 2026/9/24 17:02:56

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码