رفتن به مطلب

سفارشی کردن جستجو


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

سلام دوستان

سوالی برای من پیش اومده

فکر کنید من صفحه ای دارم با نام "صفحه اول - 12345" که منحصر به فرد هست

وکاربر جستجو کنه "12345"

حالا چطور میتونم

1.جستجو رو محدود کنم به این که در فقط ( تایتل صفحه هام ) بگرده

2.و به جای نمایش نتایج صفحه در پاپ آپ یا هرچیزی خودش باز بشه

ممنون میشم اگه راهنماییم کنید

با تشکر

لینک به ارسال

اصولاً جستجو در هسته وردپرس تعریف میشه پس دو راه دارید - یکی تغییر در هسته (wp-includes/query.php ) و دیگری اضافه کردن تابع زیر به فایل functions.php


function __search_terms_only_in_post_title( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search;
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search =
$searchand = '';
foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand = ' AND ';
}
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}
return $search;
}
add_filter( 'posts_search', '__search_terms_only_in_post_title', 500, 2 );

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

ممنونم از پاسختون

من کمی گیچ شدم امکان توضیح بیشتر هست براتون؟

ببینید بیام اصلان فراموش کنیم جستجو رو

فرض کنید من یک فیلد دارم که میخوام

وقتی نام صفحه رو وارد کرد داخل فیلد مستقیم وارد اون صفحه بشه

درمورد این هم میتونید راهنماییم کنید ؟

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

لینک به ارسال

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

اما این چیزی که جدید گفتید فرق داره - برای اینکار کافیه یه فرم بسازید با متد post بعد یوزر کلمه ایی رو وارد کنه - مثلاً: حسن

حالا اگر چندین مطلب وجود داشته باشه که عنوان اون ها دارای کلمه "حسن" باشه چی؟

مگر اینکه در عنوان مطلب کلمات انحصاری قرار بدید - مثلاً اعداد رشته ایی مثل 1111 الی 9999

در این صورت بعد از submit فرم میشه کوئری از دیتابیس گرفت با سلکت like بر روی فیلد post_title و نتیجه رو ریدایرکت کرد به روی:


http://sitename.ltd/che-rooze-khoobi-2457

لینک به ارسال

حق با شماست

بنده نام هر صفحه ای که میسازم منحصر به فرد هست

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

با وارد کردن نام او صفحه از دیتابیس کوئری وردپرس کوئری بگیرم و ریدایرکت کنم

کمک کنید

من برنامه نویس کلاینت هستم در php ضعیفم

باز هم متشکرم

لینک به ارسال

الان پشت فرمونم - رسیدم خونه حتماً - البته اگر تا اون موقع دوستان انجام دادند که چه بهتر

لینک به ارسال

تست کنید:


<?php
/*
Template Name: ridir
*/
get_header(); ?>

<div id="container">
<div id="content" role="main">
<h1 class="page-title"><?php the_title(); ?></h1>



<form method="post" name="frm">
<input value="" type="text" name="keyword" placeholder="کد صفحه را وارد کنید"/>
<button id="submit" class="submit" type="submit">انتخاب</button>
</form>

<?php $keyword = $_POST['keyword']; ?>
<?php new wpdb('DB_username','DB_password','DB_name','localhost'); ?>
<?php $result = mysql_query("SELECT * FROM wp_posts WHERE post_title like '%$keyword%' and post_status = 'publish' and post_type = 'post' ORDER BY post_title ASC"); ?>
<div>

<?php if ( $keyword != null ) { ?>


<?php while($row = mysql_fetch_array($result)) { ?>

<?php header("Location: $row[guid]"); ?>
<?php } ?>
<?php } else { ?><?php echo 'کد را وارد نمایید' ?><?php } ?>
</div>
<?php wp_reset_query(); ?>

</div><!-- #content -->
</div><!-- #container -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

البته حتماً می دونید که استایل ها به عهده شماست

در ضمن من از فیلتر like در یک جا استفاده کردم که شما شاید نیاز داشته باشید به = تبدیلش کنید

همچنین مقادیر DB_username و DB_password و DB_name رو هم باید تغییر بدید

من تست کردم و جواب داد

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

با تشکر فراوان از شما دوسته گلم

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

ولی پاسخ نگرفتم

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

بعد برگه ای درست کردم با نام 1234 و تست کردم

مسخصات دیتابیسم هم وارد کردم

فکر میکنید مشکل من از کجاست ؟

لینک به ارسال

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

1- Notepad++ رو باز کنید - کدهای بالا رو درونش کپی کنید و مشخصات دیتابیس رو درونش تغییر بدید و با نام مثلاً hasan.php درون پوشه ی قالبتون ذخیرش کنید.

2 - در پنل وردپرس وارد افزودن برگه جدید بشید و نام برگه جدید رو هر چه می خواهید قرار بدید. مثلاً "ورود به صفحات" . حالا قالب برگه رو به جای قالب پیشفرض ، قالب ridir انتخاب کنید و برگه رو منتشر کنید - تمام

اگر باز هم جواب نداد بگید تا نمونه آنلاین بدم

لینک به ارسال

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

1.اتصال به دیتا بیس لوکال هاست که مشخصات رو

username : root

Password:

Name : wp

وارد کردم

2. مشکل از تنظیمات وردپرس بنده برای نمایش برگه ها هست.

بنده در حال بررسی هستم

لینک به ارسال

شما دارید داخل وردپرس عمل می کنید - می تونید عبارت زیر رو از کد بالا حذف کنید:


<?php new wpdb('DB_username','DB_password','DB_name','localhost'); ?>

لینک به ارسال

دوسته گلم

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

بعد از وارد کردن نام صفحه داخل کادر صفحه فقط رفرش میشه حتی اشتباه هم وارد میکنم همین اتفاق میوفته

نمیدونم چرا این اتفاق میوفته :(

من متوجه جیزی شدم

وقتی تایتل پست رو وارد میکنم اخطار

Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\EasyPHP-DevServer-13.1VC9\data\localweb\projects\wordpress\wp-includes\general-template.php:1726) in C:\Program Files\EasyPHP-DevServer-13.1VC9\data\localweb\projects\wordpress\wp-content\themes\Radiokolah\pagesearch.php on line27

میگیره

من چطور مینونم نام برگه ای یکتایی که ساختم رو وارد کنم و بعد باز بشه ؟

برای مثال http://localhost/projects/wordpress/l-test/

l-test

نام برگه من هست

اینچیزیه که میخوام بهش برسم

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

اینجا رو ببینید:


http://test-line.cloudsite.ir/%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-%D8%B9%D9%86%D8%A7%D9%88%DB%8C%D9%86/

لینک به ارسال

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

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

با این کد مقادیر داخل فرم به انتهای لینک من اظافه میشه و وارد میشه


<script>
function process()
{
var url="http://localhost/projects/wordpress/" + document.getElementById("url").value;
location.href=url;
return false;
}
</script>
<form onsubmit="return process();">
URL: <input type="text" name="url" id="url"> <input type="submit" value="go">
</form>

البته باز عرض کنم کار استانداردی نیست که این عملیات خارج از وردپرس انجام بشه :(

لینک به ارسال

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

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

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

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

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

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

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

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

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