• اطلاعیه ها

    • Morteza

      باهم بسازیم: اطلس ووکامرس و وردپرس   14/07/96

      تاپیک ایجاد شده برای بحث در جهت ایجاد یک منبع، ویکی، صفحات توضیحی و یا بخش آموزشی جامع برای وردپرس و متعلقات مختلف آن است. لطفا جهت مشارکت در این بحث، ارائه پیشنهاد و یا انتقاد به تاپیک فوق مراجعه کنید. باهم بسازیم: اطلس ووکامرس و وردپرس
maraljoon

ساخت فرم جستجو در کاستوم فیلد

31 پست در این موضوع قرار دارد

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

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

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

تشکر

0

به اشتراک گذاری این پست


لینک به پست

سلام و درود

 

بله ممکن هست.

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

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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

سلام و درود

 

بله ممکن هست.

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

سلام..

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

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

تشکر

ویرایش شده در توسط maraljoon
0

به اشتراک گذاری این پست


لینک به پست

درود مجدد

 

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

0

به اشتراک گذاری این پست


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

درود مجدد

 

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

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

0

به اشتراک گذاری این پست


لینک به پست
در 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'
				)
			));
		}
    }
});

 

1

به اشتراک گذاری این پست


لینک به پست
در 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 که گذاشتید دلیل خاصی داره؟؟ 

0

به اشتراک گذاری این پست


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

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

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

0

به اشتراک گذاری این پست


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

 

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

0

به اشتراک گذاری این پست


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

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

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

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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

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

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

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

ویرایش شده در توسط maraljoon
0

به اشتراک گذاری این پست


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

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

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

0

به اشتراک گذاری این پست


لینک به پست

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

0

به اشتراک گذاری این پست


لینک به پست

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

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

0

به اشتراک گذاری این پست


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

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

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

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

0

به اشتراک گذاری این پست


لینک به پست
نقل قول

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

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

0

به اشتراک گذاری این پست


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

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

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

یک سوال دیگه:

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

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

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

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

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

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

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

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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

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

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

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

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

ویرایش شده در توسط maraljoon
0

به اشتراک گذاری این پست


لینک به پست

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

0

به اشتراک گذاری این پست


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

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

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

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

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

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

برای این چیزی که میخواید باید تابع مربوط به اکشن 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 رو با کلید کاستوم فیلد مورد نظرتون جایگزین کنید.

1

به اشتراک گذاری این پست


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

 

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

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

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

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

1

به اشتراک گذاری این پست


لینک به پست
نقل قول

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

خواهش میکنم.

نقل قول

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

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

 

موفق باشید

1

به اشتراک گذاری این پست


لینک به پست

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

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

1

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری