سلام به همه رفقای فولاستک و عاشق وردپرس! آقا کوچولو برگشته با یه مبحث داغ و بهشدت کاربردی که میتونه دیدگاهتون رو نسبت به توسعه قالب وردپرس کاملاً عوض کنه. بچهها دقت کنید، دوران استفاده صرف از پیجبیلدرهای سنگین یا تکیه فقط بر کدهای کوتاهِ (Shortcode) قدیمی به سر اومده. امروزه، اگر میخواید سایتی داشته باشید که هم از نظر سئو بدرخشه، هم پرفورمنس بینظیری داشته باشه و هم تجربه کاربری فوقالعادهای برای تولیدکنندگان محتوا فراهم کنه، باید برید سراغ ویرایشگر گوتنبرگ و توسعه بلوکهای اختصاصی (Custom Gutenberg Blocks) داخل قالبتون.
تو این پست قراره باهم یاد بگیریم چطور از فاز «فقط سفارشیسازی» خارج بشیم و به فاز «توسعه و معماری حرفهای» وارد بشیم. این همون فوت کوزهگریه که سایت شما رو از بقیه متمایز میکنه. بیایید شروع کنیم!
چرا بلوکهای اختصاصی گوتنبرگ؟ فوت کوزهگری سئو و پرفورمنس
شاید بپرسید خب، چه نیازیه این همه دردسر بکشیم و بلوک اختصاصی بسازیم؟ مگه همون بلوکهای پیشفرض گوتنبرگ یا المانهای پیجبیلدر کفایت نمیکنه؟ رفقا، اینجا دقیقاً همون نقطهایه که تخصص سئو فولاستک و پرفورمنس وارد ماجرا میشه. من توی پروژههام بارها دیدم که سایتهایی با بلوکهای اختصاصی چه جهشی توی رتبهها و سرعت داشتن.
- کنترل کامل بر HTML و DOM برای سئوی معنایی: وقتی خودتون بلوک رو مینویسید، تکتک تگهای HTML، کلاسها و ساختار DOM رو کنترل میکنید. این یعنی میتونید از HTML معنایی استفاده کنید و دقیقاً همون کدی رو تولید کنید که رباتهای گوگل عاشقشن. از <article>، <section> تا <aside>، همه چیز دست شماست.
- کاهش وابستگی به افزونههای سنگین (Page Builders): پیجبیلدرها، هر چقدر هم قدرتمند باشن، کد و اسکریپتهای اضافی زیادی لود میکنن که به شدت روی سرعت سایت تأثیر میذاره. با بلوکهای اختصاصی، فقط کدهای ضروری شما لود میشن. این یعنی خداحافظی با حجمهای اضافی!
- افزایش سرعت لود و Core Web Vitals: کد تمیز، سبک و بهینه مستقیماً به کاهش LCP (Largest Contentful Paint) و FID (First Input Delay) کمک میکنه. این معیارها برای گوگل حیاتی هستن و در رتبهبندی شما نقش کلیدی دارن.
- تجربه کاربری بهتر برای ویرایشگر محتوا: به جای اینکه محتوانویس مجبور باشه با شورتکدها یا تنظیمات پیچیده پیجبیلدرها سروکله بزنه، یه بلوک ساده و کاربردی با گزینههای مشخص و بصری در اختیارش میذارید که کار رو براش خیلی راحتتر میکنه.
معماری بلوکهای اختصاصی درون قالب: رویکرد فولاستک
بچهها، برای اینکه یه بلوک گوتنبرگ اختصاصی بسازید، باید یه دید فولاستک داشته باشید. یعنی هم با PHP سمت سرور آشنا باشید (برای ثبت بلوک و لود کردن اسکریپتها) و هم با جاوا اسکریپت و React (برای ساختار فرانتاند بلوک در ویرایشگر) و هم CSS (برای استایلدهی). بیایید ببینیم این معماری چطور کار میکنه.
ساختار فایلها و پوشهها
بهترین روش اینه که هر بلوک رو توی یه پوشه مجزا داخل پوشه blocks یا inc/blocks قالبتون قرار بدید. ساختار میتونه اینطوری باشه:
└─ your-theme/
└─ functions.php
└─ inc/
└─ blocks/
└─ your-custom-block/
└─ block.json
└─ index.js
└─ style.css
└─ editor.css (Optional)
└─ render.php (Optional)
ثبت بلوک در PHP (functions.php)
برای اینکه وردپرس بلوک شما رو بشناسه، باید اون رو با استفاده از تابع register_block_type() ثبت کنید. این کار معمولاً تو فایل functions.php یا یه فایل جداگانه که از functions.php فراخوانی میشه، انجام میشه.
// functions.php
add_action( 'init', 'your_theme_register_custom_blocks' );
function your_theme_register_custom_blocks() {
// Register Your Custom Block
register_block_type( get_template_directory() . '/inc/blocks/your-custom-block' );
// Example of registering multiple blocks
// register_block_type( get_template_directory() . '/inc/blocks/another-block' );
}
فوت کوزهگری: حواستون باشه مسیر رو دقیق مشخص کنید.
get_template_directory()مسیر اصلی قالب رو برمیگردونه. همچنین، میتونید از'init'اکشن استفاده کنید تا بلوکها در زمان مناسب ثبت بشن.
گام به گام: ساخت اولین بلوک ساده (مثال: بلوک Call to Action)
بیایید یه بلوک ساده Call to Action بسازیم که شامل یه عنوان، یه توضیح و یه دکمه باشه. این بلوک به محتوانویس اجازه میده تا به راحتی یه CTA جذاب ایجاد کنه.
۱. ایجاد پوشه بلوک: inc/blocks/call-to-action
۲. فایل block.json (مانیفست بلوک)
این فایل قلب بلوکه و تمام مشخصات بلوک رو در خودش داره. از اسم، توضیحات، آیکون، دستهبندی تا ویژگیها (attributes) که دادههای بلوک رو نگه میدارن.
{
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 2,
"name": "yourtheme/call-to-action",
"title": "Call to Action (CTA)",
"category": "design",
"icon": "megaphone",
"description": "A custom call to action block for engaging users.",
"keywords": ["call to action", "cta", "button"],
"supports": {
"html": false
},
"attributes": {
"title": {
"type": "string",
"source": "html",
"selector": ".wp-block-yourtheme-call-to-action h2"
},
"description": {
"type": "string",
"source": "html",
"selector": ".wp-block-yourtheme-call-to-action p"
},
"buttonText": {
"type": "string",
"source": "html",
"selector": ".wp-block-yourtheme-call-to-action .wp-block-button__link"
},
"buttonUrl": {
"type": "string",
"source": "attribute",
"selector": ".wp-block-yourtheme-call-to-action .wp-block-button__link",
"attribute": "href"
}
},
"editorScript": "file:./index.js",
"editorStyle": "file:./editor.css",
"style": "file:./style.css"
}
۳. فایل index.js (منطق فرانتاند ویرایشگر)
این فایل حاوی کد جاوا اسکریپته که نحوه نمایش و ویرایش بلوک در ادیتور گوتنبرگ رو مشخص میکنه. برای این کار از React استفاده میشه. اینجا نیاز به ابزارهایی مثل Webpack و Babel برای کامپایل کد دارید، اما وردپرس با @wordpress/scripts این کار رو براتون ساده کرده.
import { registerBlockType } from '@wordpress/blocks';
import { RichText, useBlockProps } from '@wordpress/block-editor';
import { Button } from '@wordpress/components';
import './style.css'; // Frontend styles
import './editor.css'; // Editor-specific styles
registerBlockType('yourtheme/call-to-action', {
edit: ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
const { title, description, buttonText, buttonUrl } = attributes;
const onChangeTitle = (newTitle) => {
setAttributes({ title: newTitle });
};
const onChangeDescription = (newDescription) => {
setAttributes({ description: newDescription });
};
const onChangeButtonText = (newButtonText) => {
setAttributes({ buttonText: newButtonText });
};
const onChangeButtonUrl = (newButtonUrl) => {
setAttributes({ buttonUrl: newButtonUrl });
};
return (
<div {...blockProps}>
<RichText
tagName="h2"
placeholder="Enter CTA Title"
value={title}
onChange={onChangeTitle}
/>
<RichText
tagName="p"
placeholder="Enter CTA Description"
value={description}
onChange={onChangeDescription}
/>
<div className="wp-block-button">
<RichText
tagName="a"
className="wp-block-button__link"
placeholder="Add button text"
value={buttonText}
onChange={onChangeButtonText}
// Link picker functionality would be added here
/>
<input
type="url"
placeholder="Button URL"
value={buttonUrl}
onChange={(event) => onChangeButtonUrl(event.target.value)}
/>
</div>
</div>
);
},
save: ({ attributes }) => {
const blockProps = useBlockProps.save();
const { title, description, buttonText, buttonUrl } = attributes;
return (
<div {...blockProps}>
{title && <h2>{title}</h2>}
{description && <p>{description}</p>}
{buttonText && buttonUrl && (
<div className="wp-block-button">
<a className="wp-block-button__link" href={buttonUrl}>{buttonText}</a>
</div>
)}
</div>
);
},
});
برای کامپایل این کد، باید Node.js رو نصب داشته باشید و در روت قالب، دستور npm init و سپس npm install @wordpress/scripts رو اجرا کنید. بعد با wp-scripts start میتونید کد رو در حال توسعه کامپایل کنید و با wp-scripts build خروجی نهایی رو بگیرید.
۴. فایل style.css (استایلهای فرانتاند)
اینجا استایلهایی رو مینویسید که هم در فرانتاند سایت و هم در ویرایشگر نمایش داده میشن.
.wp-block-yourtheme-call-to-action {
background-color: #f0f0f0;
padding: 20px;
border-radius: 8px;
text-align: center;
}
.wp-block-yourtheme-call-to-action h2 {
color: #333;
font-size: 2em;
margin-bottom: 10px;
}
.wp-block-yourtheme-call-to-action p {
color: #666;
font-size: 1.1em;
margin-bottom: 20px;
}
.wp-block-yourtheme-call-to-action .wp-block-button__link {
display: inline-block;
background-color: #0073aa;
color: #fff;
padding: 10px 20px;
border-radius: 5px;
text-decoration: none;
transition: background-color 0.3s ease;
}
.wp-block-yourtheme-call-to-action .wp-block-button__link:hover {
background-color: #005177;
}
۵. فایل editor.css (استایلهای مخصوص ویرایشگر - اختیاری)
اگه نیاز دارید که بلوکتون در ویرایشگر استایلهای متفاوتی داشته باشه (مثلاً حاشیههای خاص برای نمای بصری بهتر)، میتونید از این فایل استفاده کنید.
.wp-block-yourtheme-call-to-action {
border: 2px dashed #0073aa;
opacity: 0.8;
}
بهینهسازی سئو در بلوکهای گوتنبرگ اختصاصی
اینجاست که دانش سئو فنی به کارتون میاد، رفقا! یک بلوک فقط ظاهر نیست، بلکه باید با زبان رباتهای جستجو هم آشنا باشه:
- استفاده از تگهای HTML معنایی (Semantic HTML): همونطور که تو مثال بالا دیدیم، برای عنوان از
<h2>و برای توضیحات از<p>استفاده میکنیم. هر المانی رو با تگ مناسب خودش بسازید. این به گوگل کمک میکنه ساختار محتوای شما رو بهتر درک کنه. - پیادهسازی Schema Markup با بلوکها: یکی از قویترین قابلیتهای بلوکهای اختصاصی، تزریق مستقیم دادههای ساختاریافته (Schema Markup) متناسب با محتوای بلوکه. مثلاً اگر بلوکتون یه بخش FAQ هست، میتونید اسکیما
FAQPageرو مستقیماً در تابعsaveبلوک به خروجی اضافه کنید. این کار بدون نیاز به افزونههای جداگانه، رتبهبندی شما رو توی نتایج غنی (Rich Snippets) بهبود میبخشه. - بهینهسازی تصاویر درون بلوکها (lazy load، alt text): اگر بلوکتون شامل تصاویر هست، حتماً مطمئن بشید که قابلیت Lazy Load براشون فعال باشه (که وردپرس خودش تا حدی انجام میده). همچنین، امکان افزودن Alt Text رو برای کاربر فراهم کنید و اون رو به عنوان یه ویژگی (attribute) ذخیره کنید.
بهبود پرفورمنس بلوکها
پرفورمنس هم پای ثابت کارهای آقا کوچولوئه:
- کدنویسی تمیز و بهینه جاوا اسکریپت و CSS: از نوشتن کدهای اضافی و غیرضروری پرهیز کنید. فقط اون بخشهایی از کد رو لود کنید که واقعاً برای اون بلوک خاص لازم هستن.
- Minification و Caching: با استفاده از ابزارهایی مثل
@wordpress/scripts، کدهای جاوا اسکریپت و CSS بلوک شما به صورت خودکار minify و بهینهسازی میشن. مطمئن بشید که فایلهای خروجی با کش مرورگر به درستی مدیریت میشن. - Lazy Loading برای المانهای سنگین: اگر بلوکتون شامل ویدیو، آیفریم یا تصاویر بزرگ و زیاد هست، حتماً Lazy Load رو برای اونها پیادهسازی کنید تا فقط زمانی که کاربر به اون بخش اسکرول میکنه، محتوا لود بشه.
تجربه شخصی آقا کوچولو: چالشها و راهحلها
بچهها، توسعه بلوکهای گوتنبرگ یه مسیر هیجانانگیزه، اما بیچالش هم نیست. بزرگترین چالش من همیشه مدیریت وابستگیهای جاوا اسکریپت (مثل React) و فرآیند کامپایل (Babel و Webpack) بوده. اوایل گیجکننده به نظر میرسه، اما با
@wordpress/scriptsاین فرآیند خیلی سادهتر شده. فقط کافیه توی مسیر روت قالبتونnpm install @wordpress/scriptsرو اجرا کنید و بعد از اون با دستورnpm startیاnpm run buildمیتونید کدهاتون رو کامپایل کنید. یه چالش دیگه، سازگاری با نسخههای مختلف وردپرس بوده. همیشه داکیومنتهای رسمی وردپرس رو چک کنید تا با آخرین تغییرات API بلوکها هماهنگ باشید.
نتیجهگیری
رفقا، توسعه بلوکهای گوتنبرگ اختصاصی در قالب وردپرس، نه تنها یه مهارت پیشرفته و ارزشمند برای هر توسعهدهنده فولاستکه، بلکه یه سرمایهگذاری بینظیر برای آینده سایت شماست. با این رویکرد، شما کنترل کامل روی ساختار، سئو و پرفورمنس سایتتون دارید و میتونید تجربه کاربری بینقصی رو هم برای بازدیدکنندگان و هم برای تولیدکنندگان محتوا فراهم کنید. پس بیایید این فوت کوزهگری رو یاد بگیریم و سایتهامون رو به سطح بعدی ببریم. یادمون باشه، معماری قالبهای وردپرس مدرن، بر پایه همین اصول ساخته شده. یا علی!