WidgetCoreمستندات WidgetCore

REST API جستجو

مرجع کامل مسیر REST جستجوی زنده؛ همه‌ی پارامترها، شکل پاسخ، هدرهای صفحه‌بندی، نمونه‌های curl و جاوااسکریپت و نکات امنیتی.

نتایج جستجو از یک مسیر REST داخلی وردپرس می‌آید. این مسیر برای استفاده‌ی خود ویجت ساخته شده، ولی عمومی و مستند است؛ پس می‌توانید برای اپلیکیشن، ابزارک سفارشی یا اسکریپت خودتان هم از آن استفاده کنید.

نقطه‌ی پایان

GET https://example.com/wp-json/wgcr/v1/search
موردمقدار
فضای نامwgcr/v1
مسیر/search
روشGET (READABLE)
دسترسیعمومی (permission_callback = __return_true)
وضعیت نتایجفقط publish و بدون رمز

پارامترها

پارامترنوعپیش‌فرضتوضیح
qرشته—الزامی؛ عبارت جستجو با حداقل 2 نویسه
typeرشتهpostپست‌تایپ منبع
limitعدد5تعداد نتایج؛ بین 1 و 50 محدود می‌شود
templateعدد0شناسه‌ی قالب المنتور برای رندر نتایج
pageعدد0شماره‌ی صفحه؛ وقتی بزرگ‌تر از صفر باشد هدرهای شمارش برمی‌گردند
orderbyرشتهrelevancerelevance, date, title, author, rand, menu_order
orderرشتهDESCASC یا DESC
dateرشتهallall, week, month, year
termsرشتهخالیفهرست [taxonomy:]id با جداکننده‌ی ویرگول
terms_opرشتهexcludeinclude یا exclude
ignore_stickyعدد11 یعنی نوشته‌های چسبنده نادیده گرفته شوند
query_idرشتهخالیکلید فیلتر wgcr_search_query_args/{query_id}

اعتبارسنجی q: اگر رشته نباشد یا طول آن پس از trim کمتر از 2 نویسه باشد، پاسخ خطای rest_invalid_param برمی‌گردد.

شکل پاسخ

پاسخ یک آرایه‌ی JSON از نتیجه‌هاست:

json
[
	{
		"id": 42,
		"title": "آموزش ساخت ویجت المنتور",
		"link": "https://example.com/?p=42",
		"thumb": "https://example.com/wp-content/uploads/2026/09/cover-150x150.jpg",
		"excerpt": "در این آموزش از صفر تا صد ساخت یک ویجت سفارشی را می‌بینید…",
		"date": "2026/09/26"
	}
]
فیلدتوضیح
idشناسه‌ی نوشته
titleعنوان بدون برچسب و با رمزگشایی نهادها
linkپیوند یکتا
thumbنشانی بندانگشتی در اندازه‌ی thumbnail یا رشته‌ی خالی
excerptخلاصه‌ی 18 کلمه‌ای با نقطه‌چین (از post_excerpt یا متن نوشته)
dateتاریخ با قالب تنظیم‌شده‌ی سایت
htmlفقط وقتی template داده شود و قالب محتوای قابل‌مشاهده بسازد

هدرهای صفحه‌بندی

فقط وقتی page بزرگ‌تر از صفر باشد:

هدرمحتوا
X-WP-Totalتعداد کل نتایج
X-WP-TotalPagesتعداد کل صفحه‌ها

نمونه‌ها

یک درخواست، چهار زبان برنامه‌نویسی؛ زبانه‌ی مناسب را انتخاب کنید.

curl -s "https://example.com/wp-json/wgcr/v1/search?q=آموزش&limit=5&type=post"

# با صفحه‌بندی و خواندن هدرهای شمارش
curl -sD - -o /dev/null "https://example.com/wp-json/wgcr/v1/search?q=آموزش&limit=12&page=2" | grep -i "^x-wp"

وقتی template معتبر باشد، هر نتیجه علاوه بر فیلدهای بالا یک فیلد html دارد که خروجی رندرشده‌ی همان قالب برای همان نوشته است. اگر قالب پیش‌نویس باشد یا محتوای قابل‌مشاهده نسازد، html برنمی‌گردد.

رفتار سمت سرور

1. q، type، limit و page پاک‌سازی و محدود می‌شوند
2. آرگومان‌های WP_Query ساخته می‌شوند (publish، بدون رمز، بدون found_rows وقتی page < 1)
3. فیلترهای orderby، date، terms و query_id اعمال می‌شوند
4. فیلترهای wgcr_search_query_args اجرا می‌شوند
5. کوئی اجرا و در صورت نیاز نوشته‌های چسبنده به اول منتقل می‌شوند
6. اگر template داده شده باشد، خروجی قالب برای هر نتیجه ساخته می‌شود
7. پاسخ با هدرهای صفحه‌بندی برمی‌گردد

کدهای پاسخ

وضعیتمعنا
200موفق؛ آرایه‌ی نتایج (ممکن است خالی باشد)
400q نامعتبر: کمتر از 2 نویسه یا نوع اشتباه
404REST API غیرفعال یا مسیر نادرست
5xxخطای سرور (معمولاً در رندر قالب المنتور مدیریت می‌شود و به 200 برمی‌گردد)

محدودسازی و بهینه‌سازی

  • کش: مسیر /wp-json/ را از کش کامل صفحه بیرون بگذارید؛ وگرنه نتیجه‌ی جستجوی یک کاربر به کاربر دیگر داده می‌شود.
  • نرخ درخواست: افزونه هیچ محدودسازی نرخ (rate limit) داخلی ندارد. اگر سایت پرمراجعه است، در سطح سرور (مثلاً Nginx یا WAF) برای /wp-json/wgcr/v1/search محدودیت بگذارید.
  • سقف نتایج: با ثابت WGCR_SEARCH_MAX_RESULTS در wp-config.php می‌توانید سقف 50 را تغییر دهید؛ این مقدار هم در ویجت، هم در شورت‌کد و هم در REST اعمال می‌شود.
php
define( 'WGCR_SEARCH_MAX_RESULTS', 20 );