تبلیغات تبلیغات
حراجی دامنه های ویژهمشاهده
آخرین ارسال های تالار مشاهده انجمن
درخواست افزونه wp-reset 1 پاسخ 23 بازدید کار نکردن اسکریپت وبلاگ دهی روی هاست 15 پاسخ 861 بازدید مشکل در مخزن وردپرس 9 پاسخ 234 بازدید مشکل با قالب وردپرس 3 پاسخ 44 بازدید اسکریپت bedrive 3 پاسخ 89 بازدید رفع مشکل اینترنت 5 پاسخ 145 بازدید مشکل با قالب وردپرس 0 پاسخ 2 بازدید فروش دامنه سه حرفی 0 پاسخ 53 بازدید فروش اسکریپت سایت ساز 6sit 0 پاسخ 59 بازدید مدت اعتبار لایسنس 15 پاسخ 451 بازدید
تبلیغات
تبلیغات تبلیغات

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

آموزش ها , مقالات,آموزش,ترفند , وردپرس

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

 

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

 

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

 

کلیه اطلاعات مربوط به فیلدهای سفارشی در جدول postmeta دیتابیس ذخیره می شوند. این در حالی است که به صورت پیشفرض هنگام جستجو در وردپرس، نتایج از جدول posts گرفته می شوند. برای حل این مشکل لازم است که جدول postmeta را هنگام جستجو در نظر بگیریم. برای این کار از کد زیر استفاده می کنیم:

 

/**
 * Join posts and postmeta tables
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join
 */
function cf_search_join( $join ) {
    global $wpdb;

    if ( is_search() ) {    
        $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }
    
    return $join;
}
add_filter('posts_join', 'cf_search_join' );

 

حال لازم است که کوئری مربوط به جستجو وردپرس را ویرایش کنیم:

 

/**
 * Modify the search query with posts_where
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where
 */
function cf_search_where( $where ) {
    global $pagenow, $wpdb;
   
    if ( is_search() ) {
        $where = preg_replace(
            "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
            "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
    }

    return $where;
}
add_filter( 'posts_where', 'cf_search_where' );

 

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

 

/**
 * Prevent duplicates
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_distinct
 */
function cf_search_distinct( $where ) {
    global $wpdb;

    if ( is_search() ) {
        return "DISTINCT";
    }

    return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );

 

نتیجه گیری

کدهای بالا برای درک بهتر عملکرد هر قسمت توضیح داده شد. برای استفاده از کدها می توانید به راحتی کد تکمیل شده زیر را در فایل functions.php قالب اضافه کرده و آن را ذخیره کنید:

 

<?php
/**
 * Extend WordPress search to include custom fields
 *
 * http://www.20script.ir
 */

/**
 * Join posts and postmeta tables
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join
 */
function cf_search_join( $join ) {
    global $wpdb;

    if ( is_search() ) {    
        $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }
    
    return $join;
}
add_filter('posts_join', 'cf_search_join' );

/**
 * Modify the search query with posts_where
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where
 */
function cf_search_where( $where ) {
    global $pagenow, $wpdb;
   
    if ( is_search() ) {
        $where = preg_replace(
            "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
            "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
    }

    return $where;
}
add_filter( 'posts_where', 'cf_search_where' );

/**
 * Prevent duplicates
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_distinct
 */
function cf_search_distinct( $where ) {
    global $wpdb;

    if ( is_search() ) {
        return "DISTINCT";
    }

    return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );
?>

 

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

این مقاله چقدر براتون مفید بود؟

از ۱ تا ۵ امتیاز بدید.

میانگین رتبه 0 / 5. تعداد رای : 0

تا حالا کسی رای نداده! اولین نفر شما باشید.

دانلود

هاست ارزان، لایت اسپید، سرور مجازی منطبق با اسکریپت های 20script کلیک کنید >
مطلب مفیدی بود ؟
نویسنده : تیم محتوای 20اسکریپت 0 آموزش ها , مقالات,آموزش,ترفند , وردپرس
لینک کوتاه مطلب : https://www.20script.ir/?p=22041
کلمات کلیدی پست :
مطالب مرتبط
8,417قالب زیبای تفریحی دختران دزفول برای وردپرس تاریخ : 2014/06/15
7,636قالب مجله خبری YourMag برای وردپرس تاریخ : 2016/07/9
5,736تخفیف هوشمندانه محصولات در ووکامرس با افزونه WooCommerce Smart Sale Badge تاریخ : 2019/01/21
17,116افزونه ماژول درگاه پرداخت بانک ملت تاریخ : 2013/10/30
12,173دانلود پوسته فروشگاهی Marketica برای وردپرس تاریخ : 2016/04/25
5,808کسب درآمد از اینترنت با وردپرس تاریخ : 2019/03/10
6,163نحوه نمایش متفاوت هر پست در وردپرس تاریخ : 2018/01/25
12,870ساخت صفحه Coming Soon با افزونه وردپرس تاریخ : 2014/05/20
11,119افزونه ضد اسپم کپچا پلاس برای وردپرس Captcha Plus تاریخ : 2020/04/4
6,544آموزش انتشار خودکار مطالب در شبکه های اجتماعی WordPress to Buffer تاریخ : 2019/07/27
8,721نمایش اسلایدی مطالب در وردپرس با افزونه Recent Posts Slider تاریخ : 2017/08/24
10,991افزونه نمایش دقیق زمان انتشار مطالب در وردپرس تاریخ : 2017/07/14
برخی از قالب های وبلاگ - بیست اسکریپت
قالب عشق بین انگشت هاقالب عشق بین انگشت ها
قالب دخترونه و آرایشقالب دخترونه و آرایش
قالب زیبای ماشینقالب زیبای ماشین
قالب فانتزی و طنز چِشمقالب فانتزی و طنز چِشم
قالب دختر رویاییقالب دختر رویایی
قالب وبلاگ دکوراسیونقالب وبلاگ دکوراسیون
قالب وبلاگ کلبه و درختقالب وبلاگ کلبه و درخت
قالب دختر زیباقالب دختر زیبا
قالب پسرونه غمگینقالب پسرونه غمگین
قالب عاشقانه قلبقالب عاشقانه قلب
تبلیغات