جستجو در عنوان یا متا نوشته‌های وردپرس با WP_Query

یکی از مشکلات یا محدودیت‌های کلاس WP_Query این هست که امکان جستجوی فصلی غیروابسته (منفصل یا disjunctional) بین عنوان (متن، …) و یک متا دلخواه وجود نداره.

با یک مثال توضیح میدم.

فرض کنید قصد داریم روی محصولاتی که عنوانشون یا متافیلد brand شامل کلمه «سامسونگ» هست کوئری کنیم. به طور طبیعی احتمالا این قطعه کد رو می‌نویسیم:

https://gist.github.com/skmohammadi/0f2e3d80380031a942130cb154427814#file-virgool-wp-query-01-php

مشکل قطعه کد بالا اینه که وقتی پارامتر s و یک meta_query رو به عنوان ورودی‌های WP_Query در نظر بگیریم، وردپرس به طور پیشفرض عملگر AND رو برای کوئری در نظر میگیره و عملاً فقط محصولاتی که هم عنوانشون و هم مِتاشون شامل «سامسونگ» هست جستجو میشه.

برای رفع این مشکل راهکار جالبی وجود داره. در این روش به جای پارامتر s، از پارامتر meta_or_title_ استفاده می‌کنیم و با استفاده از هوک pre_get_posts در قسمت WHERE گزاره sql یه تغییر کوچک به شکل زیر ایجاد می‌کنیم:

https://gist.github.com/skmohammadi/dcf02ad4517a2650305df50e218fb811

با این تغییر، عملگر OR بین دو شرط عنوان و متاکوئری قرار گرفته و نتیجه جستجو به شکل مطلوب خواهد بود.

شاد باشید 🙂

نوشته جستجو در عنوان یا متا نوشته‌های وردپرس با WP_Query اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

دیدگاهتان را بنویسید