رفتن به مطلب

پست های پیشنهاد شده

سلام دوستان گرامی..  وقت بخیر

همونطور از عنوان مشخصه بدنبال راهی هستم که بشه فرم جستجویی ساخت که فقط در کاستوم فیلد جستجو کنه. در فیلد خاصی که توسط افزونه advance custom field ساخته میشه

آیا عملا این مورد امکان پذیر هست تو وردپرس؟؟

تشکر

لینک به ارسال
در ۱ ساعت قبل، mehran-b گفته است :

سلام و درود

 

بله ممکن هست.

هم بر روی حلقه اصلی ممکنه و هم بر روی حلقه های ثانویه.

سلام..

میشه توضیح بدید که چطور اینکارو انجام بدم؟؟ و اینکه منظور از حلقه ثانویه چیه؟؟

فرض کنید field name اون کاستوم فیلدی که اطلاعات توش ذخیره میشه test باشه. چطور میشه فرم جستجو رو بر اساس این فیلد ساخت؟

تشکر

ویرایش شده توسط maraljoon
لینک به ارسال
در 1 دقیقه قبل، mehran-b گفته است :

درود مجدد

 

نحوه ساخت فرمش رو موندید یا بخش بک اِندش؟

یجورایی هر دوش.. نمیتونم تحلیلش کنم که چطور  فرمی که مسازم ارتباط پیدا کنه با اون متا؟؟

لینک به ارسال
در 15 دقیقه قبل، maraljoon گفته است :

یجورایی هر دوش.. نمیتونم تحلیلش کنم که چطور  فرمی که مسازم ارتباط پیدا کنه با اون متا؟؟

درود مجدد

 

فرانت اِند

<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
<input type="text" placeholder="جستجو ..." name="meta_test">
<input type="submit" value="جستجو کن">
</form>

بک اِند

add_filter('query_vars', function ($vars) {
	$vars[] = 'meta_test';
	return $vars;
});

add_action('pre_get_posts', function ($query) {
    if($query->is_home() && $query->is_main_query()) {
		if(get_query_var('meta_test', false)) {
			$query->set('meta_query', array(
				array(
					'key' => 'test',
					'value' => get_query_var('meta_test'),
					'compare' => 'LIKE'
				)
			));
		}
    }
});

 

لینک به ارسال
در 25 دقیقه قبل، mehran-b گفته است :

درود مجدد

 

فرانت اِند


<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
<input type="text" placeholder="جستجو ..." name="meta_test">
<input type="submit" value="جستجو کن">
</form>

 

 

ببخشید. اون meta_test که گذاشتید دلیل خاصی داره؟؟ 

لینک به ارسال
در هم اکنون، maraljoon گفته است :

ببخشید. اون meta_test که گذاشتید دلیل خاصی داره؟؟ 

اون کوئری استرینگی هست که به آدرس صفحه بعد از زدن دکمه جستجو کن اضافه میشه و سپس ما اومدیم با فیلتر query_vars این متغییر رو به کوئری های وردپرس اضافه کردیم و سپس توی اکشن pre_get_posts این کوئری رو میخونیم اگر خالی نباشه میام روی لوپ اصلی اعمال میکنیم واژه سرچ شده رو.

لینک به ارسال
در 2 دقیقه قبل، mehran-b گفته است :

 

یخورده گیج شدم. نتایج جستجو رو باید چطور نمایش بدیم؟

لینک به ارسال
در 4 دقیقه قبل، mehran-b گفته است :

توی این حالت نتیجه روی حلقه صفحه اصلی اعمال میشه.

میشه تغییرش داد که مثلا توی یک صفحه به اسم search.php نتایج رو نشون بده؟؟

با تغییر اکشن درست میشه؟

ویرایش شده توسط maraljoon
لینک به ارسال
در هم اکنون، maraljoon گفته است :

میشه تغییرش داد که مثلا توی یک صفحه به اسم search.php نتایج رو نشون بده؟؟

وقتی صفحه search.php فراخوانی میشه که متغییر کوئری s که برای بخش اصلی سرچ وردپرس هست پر بشه.

لینک به ارسال

آی کیوم پایین اومده. کدهایی که نوشتید رو استفاده کردم ولیتو صفحه اول نتیجه ای ندارم وقتی متغییر کوئری s هم استفاده کنم نتایج رو تو اون صفحه دلخواه نمایش میده. ولی بصورت جستجوی کلی وردپرس نه کاستوم فیلد

لینک به ارسال
در 1 دقیقه قبل، mehran-b گفته است :

کد رو تست کردم مشکلی نداره.

چرا حالا صفحه search.php که رزور شده است رو میخواید استفاده کنید؟

مشکلی نیست. صفحه جدیدی براش میسازم. ولی خب به همون شکل اولش هم که شما فرمودین تو صحفحه اولم نتیجه ای ندارم. خودمم نمیدونم دقیقا دارم چیکارمیکنم. فقط آدرس url تغییر میکنه ولی نتیجه ای ندارم. کجا باید نتیجه نمایش داده بشه؟؟

لینک به ارسال
نقل قول

مشکلی نیست. صفحه جدیدی براش میسازم. ولی خب به همون شکل اولش هم که شما فرمودین تو صحفحه اولم نتیجه ای ندارم. خودمم نمیدونم دقیقا دارم چیکارمیکنم. فقط آدرس url تغییر میکنه ولی نتیجه ای ندارم. کجا باید نتیجه نمایش داده بشه؟؟

وقتی شما فرم رو میذاری توی صفحه اصلی و توی تابع اکشن pre_get_posts رو به روی جایی که نوشته key اسم واقعی متا رو جای test بزنید و بیاید از فرم اقدام به جستجو کنید عمل میکنه.

لینک به ارسال
در 13 دقیقه قبل، mehran-b گفته است :

وقتی شما فرم رو میذاری توی صفحه اصلی و توی تابع اکشن pre_get_posts رو به روی جایی که نوشته key اسم واقعی متا رو جای test بزنید و بیاید از فرم اقدام به جستجو کنید عمل میکنه.

خیلی خیلی ممنونم. درسته. یک جای کارو اشتباه میرفتم. تا اینجای کار که درست پیش رفت..

یک سوال دیگه:

فرض کنید اطلاعاتی که توسط این کاستم فیلد ذخیره میشن تعدادش زیاده. حالا من میخوام مثلا دو تا یا سه تا یا چند تا از این مقادیری رو که توسط این فیلد test ذخیر  شدن رو باهم جستجو کنم. فرض میکنیم برای هر مطلبی که منتشر میشه یک جدول حاوی  چند تامقدار توسط این کاستوم فیلد ذخیره میشه. مثلا برای پست 1 پنج رنگ قرمز ، آبی ، زرد ، بنفش، صورتی ثبت میشه.

برای مطلب دوم 3 رنگ ابی ، قرمز ، صورتی  .  برای مطلب سوم فقط 1 رنگ قهوه ای. برای مطلب چهارم 4 رنگ آبی ، قرمز، زرد، صورتی ، قهوه ای

حالا میخوام تو سرچ مثلا بنویسم قرمز - آبی - صورتی.  و نتیجه طبیعاتا میشه مطلب اول دوم و چهارم

یعنی از فرم جستجو میخوام مطالبی رو به من نشون بده که سه رنگ قرمز، آبی و صورتی توشون مشترک باشه.

توی سرچ معمولی وردپرس  وقتی این سه تا واژه رو با دش در کنار هم سرچ میکنم نتیجه درست رو نمایش میده. ولی تو این فرمی که لطف کردید برای کاستوم فیلد با این روش نمایش نمیده..

راه حلی برای این دارید؟؟

تو جستجوی وردپرس به این شکل سرچ میکردم

قرمز - آبی - صورتی

لینک به ارسال
در 9 دقیقه قبل، mehran-b گفته است :

یعنی در اصل این کاستوم فیلدی که اسمش مثلا test هست یه سلکت باکسه با چند گزینه مشخص؟

نه. هر پستی که قراره منتشر بشه یه کاستوم فیلد هم اضافه شده بصورت ویرایشگر دیداری که من بصورت دستی توش یه مواردی رو وارد میکنم. برای مثال همون رنگ ها. سلکت باکس نیست. یه جدول هست که بصورت دستی وارد میکنم و تو هر td اون جدول یه مقدار وارد میکنم. یکی قرمز یکی آبی و ...

وقتی با سرچ معمولی به این شکل قرمز -  آبی - صورتی سرچ میکنم تمام پست هایی رو که این موارد توشون مشترک هست رو برام میاره.

ولی تو این فرم جدید که بر اساس کاستوم فیلد هست فقط میتونم مثلا قرمز رو بزنم یا آبی. فقط یک مورد. با اون شکل سرچ قبلی که کنار هم سرچ کنم نتیجه ای نمایش نمیده

ویرایش شده توسط maraljoon
لینک به ارسال
در 6 دقیقه قبل، mehran-b گفته است :

والا متوجه نشدم چون تا به حال با ACF کار نکردم.

ببخشید من خوب توضیح نمیدم. پوزش.

البته خیلی این بخش جدول و باقی قضایا مهم نیست. شما اون کاستوم فیلدهارو برچسب در نظر بگیرد. برچسب های نوشته های وردپرس. فرض کنید ما 4 تا مطلب داریم تو سایت.

و هر مطلب طبق روال معمول تعدادی برچسب دارن. 3 تا از این 4 پست برچسب های تقریبا مشابه ای دارن. برای مثال پست 1 و پست 2 و پست 3 ،  10 تا برچسب دارن ولی 5 تا برچسب از این 10 تا بین این 3 مطلب وردپرس مشترک هستند.

حالا وقتی من این برچسب هارو به این شکل: قرمز - آبی - صورتی  تو فرم سرچ معمولی سرچ میکنم نتیجه دقیق بهم میده. اون سه تا مطلب رو برام تو نتایج میاره. ولی مطلب چهارمی رو نمیاره چون اون 3 تا برچسب رو تو خودش نداره.

اگه سایتی دارید که برچسباشو میدونید چیا هستن یه زحمتی بکشید به این شکل که گفتم سرچ کنید. نتیجه جالبه.

فقط تو این فرم جستجوی کاستوم فیلد دیگه نمیتونم چندتا کلید واژه رو کنار هم با - (دش)  سرچ کنم. فقط یک مورد رو قبول میکنه.

لینک به ارسال

برای این چیزی که میخواید باید تابع مربوط به اکشن pre_get_posts رو ویرایش کنید به شکل زیر:

add_action('pre_get_posts', function ($query) {
    if($query->is_home() && $query->is_main_query()) {
		if(get_query_var('meta_test', false)) {
			$rspace = str_replace(" ", "-", get_query_var('meta_test'));
			$words = explode("-", $rspace);
			$trimed_words = array_map('trim', $words);
			$array = array();
			foreach($trimed_words as $word)
				$array = array_merge($array, array(
					array(
						'key' => 'test',
						'value' => $word,
						'compare' => 'LIKE'
					)
				));
			if(count($array) > 1)
				$array = array_merge($array, array(
					'relation' => 'AND'
				));
			$query->set('meta_query', $array);
		}
    }
});

تابع فوق میاد ابتدا واژه های وارد شده در فیلد مربوطه رو بر اساس Space یا Dash میشکونه و سپس برای هر واژه وارد شده یه کوئری ایجاد میکنه به این شکل عملکرد مانند بخش سرچ وردپرس میشه.

توجه داشته باشید که باید اون test رو با کلید کاستوم فیلد مورد نظرتون جایگزین کنید.

لینک به ارسال
در 56 دقیقه قبل، mehran-b گفته است :

 

عالی بود. تشکر فراوان

نتیجه عالی و بی نقص. دیقا همون نتیجه ای که میخواستم نمایش داد.

ممنون که تو انجمن اینقدر با حوصله جواب افراد رو میدید.

روزی که با وردپرس شروع کردم فکرشو نمیکردم که اینقدر قابلیت گسترش داشته باشه. الان تازه میفهم هیچی از برنامه نویسی و هیچی از وردپرس نمیدونم.

لینک به ارسال
نقل قول

عالی بود. تشکر فراوان

خواهش میکنم.

نقل قول

روزی که با وردپرس شروع کردم فکرشو نمیکردم که اینقدر قابلیت گسترش داشته باشه. الان تازه میفهم هیچی از برنامه نویسی و هیچی از وردپرس نمیدونم.

بله وردپرس به خاطر استفاده از سیستم هوکینگ قابلیت توسعه پذیری بسیار بالایی داره.

 

موفق باشید

لینک به ارسال

امیدوارم کسانی که دنبال چنین موضوعی هستن از این مطلب مفید استفاده کنن.

خیلی گویا و روان. الان دارم فکر میکنم چقدر میشه این فرم رو گسترش داد و چیز خوبو کاملی از توش در میاد

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...