رفتن به مطلب

چطور یک جستجوگر چند فیلدی بسازم؟


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

سلام به همه دوستان. سوالم شامل دو قسمت هست

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

نویسنده: دکتر رضایی پور

تاریخ انتشار: 1391

ویرایش کتاب: اول

تعداد صفحات: 506

ناشر: نص

978014374476 : شابک

توضیح مختصر درباره کتاب:

این کتاب به بررسی.....

سوال اول:

حالا چیزی که نیاز داریم این هست که هر یک از مقادیری که روبروی نویسنده, تاریخ انتشار, ویرایش کتاب و ناشر نوشته شدن به صورت لینک باشه که بازدید کننده بتونه با کلیک کتاب های بیشتری از اون نویسنده یا تاریخ انتشار یا ویرایش کتاب یا ناشر ببینه.

اصلا نمیدونم این چنین چیزی به راحتی با وردپرس قابل اجرا هست.

سوال دوم:

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

منظر راهنماییتون هستم

لینک به ارسال

اول باید تعیین کنید که اون متغیرها چطوری در پست درج بشن - اگر بخواین بصورت متن باشند که قابلیت جستجو نخواهند داشت - (لااقل با دقت مناسب)

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

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

برای ایجاد صفحات فهرست هم باز مثل بالا

لینک به ارسال

اول باید تعیین کنید که اون متغیرها چطوری در پست درج بشن - اگر بخواین بصورت متن باشند که قابلیت جستجو نخواهند داشت - (لااقل با دقت مناسب)

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

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

برای ایجاد صفحات فهرست هم باز مثل بالا

ممنون از راهنماییتون. زمینه های دلخواه زیر روی توی حلقه قرار دادم :

<p>نویسنده: <?php $values = get_post_custom_values("author"); echo $values[0]; ?></p>

<p>تاریخ انتشار: <?php $values = get_post_custom_values("date"); echo $values[0]; ?></p>

<p>ویرایش: <?php $values = get_post_custom_values("edition"); echo $values[0]; ?></p>

<p>تعداد صفحات: <?php $values = get_post_custom_values("pages"); echo $values[0]; ?></p>

<p>ناشر: <?php $values = get_post_custom_values("publisher"); echo $values[0]; ?></p>

<p>: (ISBN) شابک <?php $values = get_post_custom_values("ISBN"); echo $values[0]; ?></p>

حالا چطور باید برای لینک دار کردن هر کدوم از این زمینه ها چطوری باید از کوئری استفاده کنم؟ (درباره استفاده از کوئری ها تقریبا هیچی نمیدونم)

لینک به ارسال

ببینید خودتون دارید میگید لینک - یعنی نیاز به مبدا و مقصد داره - قبل از لینک دار کردن کارها دیگه ایی باید انجام بشه

مثلاً برگه ایی با تمپلیت و کوئری معین تولید بشه که در اون فهرستی از کتابهای حسن نمایش داده بشه - یعنی وقتی ویزیتور روی اسم حسن در یکی از پست ها کلیک کرد به این برگه هدایت بشه. بعد که این برگه تولید شد میشه اون اون لینک ها رو برقرار کرد.

برای ساخت کوئری از کوئری ساز انجمن استفاده کنید - در منوی بالا : WPU - ژنراتور کوئری ساز

برای ساخت برگه با قالب مجزا در بخش آموزش انجمن در مثال ها به وفور نمونه قرار داده شده

فعلاً این دو کار رو برای نمونه روی اسم نویسسنده انجام بدید تا جلو بریم

یه نکته : چرا در کدهای بالا برای تگ p علامت سوال گذاشتید؟

ویرایش شده توسط isk
لینک به ارسال

ببینید خودتون دارید میگید لینک - یعنی نیاز به مبدا و مقصد داره - قبل از لینک دار کردن کارها دیگه ایی باید انجام بشه

مثلاً برگه ایی با تمپلیت و کوئری معین تولید بشه که در اون فهرستی از کتابهای حسن نمایش داده بشه - یعنی وقتی ویزیتور روی اسم حسن در یکی از پست ها کلیک کرد به این برگه هدایت بشه. بعد که این برگه تولید شد میشه اون اون لینک ها رو برقرار کرد.

برای ساخت کوئری از کوئری ساز انجمن استفاده کنید - در منوی بالا : WPU - ژنراتور کوئری ساز

برای ساخت برگه با قالب مجزا در بخش آموزش انجمن در مثال ها به وفور نمونه قرار داده شده

فعلاً این دو کار رو برای نمونه روی اسم نویسسنده انجام بدید تا جلو بریم

یه نکته : چرا در کدهای بالا برای تگ p علامت سوال گذاشتید؟

ممنون. این دو مرحله رو سعی میکنم انجام بدم و واسه ادامه مراحل بازم میام.

علامت سوالی که توی کد بالا توی تگ p دیده میشه به خاظر اینکه که توی ادیتور انجمن علامت هارو جابحا نشون میده. او علامت سوال، علامت سوال شروع کد php هستش.

لینک به ارسال

ببینید خودتون دارید میگید لینک - یعنی نیاز به مبدا و مقصد داره - قبل از لینک دار کردن کارها دیگه ایی باید انجام بشه

مثلاً برگه ایی با تمپلیت و کوئری معین تولید بشه که در اون فهرستی از کتابهای حسن نمایش داده بشه - یعنی وقتی ویزیتور روی اسم حسن در یکی از پست ها کلیک کرد به این برگه هدایت بشه. بعد که این برگه تولید شد میشه اون اون لینک ها رو برقرار کرد.

برای ساخت کوئری از کوئری ساز انجمن استفاده کنید - در منوی بالا : WPU - ژنراتور کوئری ساز

برای ساخت برگه با قالب مجزا در بخش آموزش انجمن در مثال ها به وفور نمونه قرار داده شده

فعلاً این دو کار رو برای نمونه روی اسم نویسسنده انجام بدید تا جلو بریم

یه نکته : چرا در کدهای بالا برای تگ p علامت سوال گذاشتید؟

دو قسمت بالا رو ساختم، هرچند کمی سخت بود ولی بیشتر و بیشتر از وردپرس خوشم اومد :)

یک برگه با نام query-results.php با یک تمپلت مناسب برای نمایش نتایج کتاب های نویسنده ساختم.

در ژنراتور کوئری ساز هم برای custome field مقدار author رو قرار دادم و مراحل رو تکمیل کردم و کدهای کوئری رو توی query-results.php قرار دادم.

حالا باید چیکار کنم؟

ویرایش شده توسط kavirdarkavir
لینک به ارسال

فرض کنید پست های شما دارای دو زمینه دلخواه برای نام نویسنده و نام کتاب باشد - author - bookname

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

این فرم یه متغیر تولید می کنه که همون نام نویسنده است

این متغیر به یه کوئری وارد میشه و بر اساس اون فهرستی از کتابهای نویسنده نمایش داده میشه.

حالا میشه یه کار دیگه هم کرد - اینکه روی لینک نام نویسنده در پست ها اکشن این برگه رو گذاشت و متغیری که اون فرم تولید میکنه در اصل از پست به این برگه منتقل بشه - که این رو در وردپرس پیشنهاد نمی کنم

پس این کار رو بکنید که برگه ایی با قالب دلخواه تولید کنید و کدهای زیر رو درونش قرار بدید:


<?php
global $post;
$custom_field_value = get_post_meta( $post->ID, '', true );
$args = array(
'post_per_page' => 1,
'meta_query' =>
array(
'relation' => 'AND',
array(
'key' => 'author'
)
),
'post__not_in' => array( $post->ID )
);
$related_posts = new WP_Query( $args );
?>


<?php while ($related_posts->have_posts()) : $related_posts->the_post();
$duplicate_cf = $post->ID;
?>
<?php endwhile; ?>

<form method="post" name="frm">
<SELECT class="select" name="keyword" onchange="updatesum()" >
<?php if ( $related_posts->have_posts() ) : ?>
<?php while ( $related_posts->have_posts() ) : $related_posts->the_post(); ?>
<?php if( $post->ID == $duplicate_cf ) continue; ?>
<OPTION class="option" value="<?php echo (get_post_meta($post->ID, 'author', true)) ; ?>"><?php echo (get_post_meta($post->ID, 'author', true)) ; ?></OPTION>
<?php endwhile; ?>
<?php endif; ?>
</SELECT>
<button id="submit" class="submit" type="submit">انتخاب</button>
</form>

<?php wp_reset_query(); ?>

<?php $keyword = $_POST['keyword']; ?>

<?php
global $post;
$custom_field_value = get_post_meta( $post->ID, '', true );
$args = array(
'post_per_page' => -1,
'meta_query' =>
array(
'relation' => 'AND',
array(
'key' => 'author',
'value' => $keyword,
'compare' => 'LIKE'
)
),
'post__not_in' => array( $post->ID )
);
$related_posts = new WP_Query( $args );
?>

<?php if ( $keyword != null) { ?>
<?php if ( $related_posts->have_posts() ) { ?>
<?php while ( $related_posts->have_posts() ) : $related_posts->the_post(); ?>
<a href="<?php echo (get_permalink( $post->ID )) ; ?>"><?php echo (get_the_title()) ; ?></a>
| <?php echo (get_post_meta($post->ID, 'author', true)) ; ?>
| <?php echo (get_post_meta($post->ID, 'bookname', true)) ; ?><br/>
<?php endwhile; ?>
<?php } else echo "چنین نویسنده ایی موجود نیست"; ?>
<?php } ?>

<?php wp_reset_query(); ?>

شما می تونید این فرم رو هم بر اساس سایر زمینه های دلخواه تغییر بدید - و هم می تونید برای سایر زمینه های دلخواه (ناشر و ژانر و ...) فرم های مشابهی در کنارش بسازید

** در کد بالا یه نکته خیلی ظریف قرار گرفته (لااقل از دید خودم) - اگر کسی این نکته رو بگه (که مطمئنم همه می تونن بگن) به عنوان جایزه امشب نیم ساعت زودتر میخوابم.

لینک به ارسال

فرض کنید پست های شما دارای دو زمینه دلخواه برای نام نویسنده و نام کتاب باشد - author - bookname

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

این فرم یه متغیر تولید می کنه که همون نام نویسنده است

این متغیر به یه کوئری وارد میشه و بر اساس اون فهرستی از کتابهای نویسنده نمایش داده میشه.

حالا میشه یه کار دیگه هم کرد - اینکه روی لینک نام نویسنده در پست ها اکشن این برگه رو گذاشت و متغیری که اون فرم تولید میکنه در اصل از پست به این برگه منتقل بشه - که این رو در وردپرس پیشنهاد نمی کنم

پس این کار رو بکنید که برگه ایی با قالب دلخواه تولید کنید و کدهای زیر رو درونش قرار بدید:


<?php
global $post;
$custom_field_value = get_post_meta( $post->ID, '', true );
$args = array(
'post_per_page' => 1,
'meta_query' =>
array(
'relation' => 'AND',
array(
'key' => 'author'
)
),
'post__not_in' => array( $post->ID )
);
$related_posts = new WP_Query( $args );
?>


<?php while ($related_posts->have_posts()) : $related_posts->the_post();
$duplicate_cf = $post->ID;
?>
<?php endwhile; ?>

<form method="post" name="frm">
<SELECT class="select" name="keyword" onchange="updatesum()" >
<?php if ( $related_posts->have_posts() ) : ?>
<?php while ( $related_posts->have_posts() ) : $related_posts->the_post(); ?>
<?php if( $post->ID == $duplicate_cf ) continue; ?>
<OPTION class="option" value="<?php echo (get_post_meta($post->ID, 'author', true)) ; ?>"><?php echo (get_post_meta($post->ID, 'author', true)) ; ?></OPTION>
<?php endwhile; ?>
<?php endif; ?>
</SELECT>
<button id="submit" class="submit" type="submit">انتخاب</button>
</form>

<?php wp_reset_query(); ?>

<?php $keyword = $_POST['keyword']; ?>

<?php
global $post;
$custom_field_value = get_post_meta( $post->ID, '', true );
$args = array(
'post_per_page' => -1,
'meta_query' =>
array(
'relation' => 'AND',
array(
'key' => 'author',
'value' => $keyword,
'compare' => 'LIKE'
)
),
'post__not_in' => array( $post->ID )
);
$related_posts = new WP_Query( $args );
?>

<?php if ( $keyword != null) { ?>
<?php if ( $related_posts->have_posts() ) { ?>
<?php while ( $related_posts->have_posts() ) : $related_posts->the_post(); ?>
<a href="<?php echo (get_permalink( $post->ID )) ; ?>"><?php echo (get_the_title()) ; ?></a>
| <?php echo (get_post_meta($post->ID, 'author', true)) ; ?>
| <?php echo (get_post_meta($post->ID, 'bookname', true)) ; ?><br/>
<?php endwhile; ?>
<?php } else echo "چنین نویسنده ایی موجود نیست"; ?>
<?php } ?>

<?php wp_reset_query(); ?>

شما می تونید این فرم رو هم بر اساس سایر زمینه های دلخواه تغییر بدید - و هم می تونید برای سایر زمینه های دلخواه (ناشر و ژانر و ...) فرم های مشابهی در کنارش بسازید

** در کد بالا یه نکته خیلی ظریف قرار گرفته (لااقل از دید خودم) - اگر کسی این نکته رو بگه (که مطمئنم همه می تونن بگن) به عنوان جایزه امشب نیم ساعت زودتر میخوابم.

خيلي ممنون.

كدي كه قرار داديد الان فقط اسامي نويسنده هارو ليست ميكنه ؟ يعني اون قسمت اول سوالم كه اسم هر نويسنده به صورت لينك دربياد و بشه با كليك رو اون وارد صفحه ليست شده كتاب ها شد چطوري انجام ميشه؟

لینک به ارسال

يعني اون قسمت اول سوالم كه اسم هر نويسنده به صورت لينك دربياد و بشه با كليك رو اون وارد صفحه ليست شده كتاب ها شد چطوري انجام ميشه؟

حالا میشه یه کار دیگه هم کرد - اینکه روی لینک نام نویسنده در پست ها اکشن این برگه رو گذاشت و متغیری که اون فرم تولید میکنه در اصل از پست به این برگه منتقل بشه - که این رو در وردپرس پیشنهاد نمی کنم

لینک به ارسال

خوب اگه بخوام این جستجو قیلد های زیادی داشته باشه چی ؟

مثلا قیمت - نوع محصول - محل محصول - کد پستی

لینک به ارسال

خوب طبق کد بالا عمل کنید و براساس زمینه، فیلدهای جدید اضافه کنید

لینک به ارسال

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

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

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

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

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

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

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

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

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