تبلیغات

تبلیغات تبلیغات
حراجی دامنه های ویژهمشاهده

تبلیغات
تبلیغات تبلیغات

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

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

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

 

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

 

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

 

کلیه اطلاعات مربوط به فیلدهای سفارشی در جدول 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' );
?>

 

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

دانلود

هاست ارزان، لایت اسپید، سرور مجازی منطبق با اسکریپت های 20script کلیک کنید >
ثبت نام در بروکر فارکس با قابلیت واریز و برداشت به صورت ریالی کلیک کنید >
مطلب مفیدی بود ؟
نویسنده : تیم محتوای 20اسکریپت 0 آموزش ها , مقالات,آموزش,ترفند , وردپرس
لینک کوتاه مطلب : https://www.20script.ir/?p=22041
کلمات کلیدی پست :
مطالب مرتبط
8,679دانلود قالب قبلی سایت کلکسیون طراحی برای وردپرس تاریخ : 2016/12/2
13,868قالب چند منظوره و راست چین KLEO نسخه 2.2 تاریخ : 2014/11/22
11,204دانلود افزونه نینجا پاپ آپز Ninja Popups نسخه 3.9 تاریخ : 2015/02/10
7,564قالب وردپرس دیزاینر نسخه 2 تاریخ : 2014/08/30
7,515افزونه وردپرس معرفی مطالب به دوستان WP tell a friend تاریخ : 2015/02/24
5,111مخفی کردن نوشته ها از صفحه ی اصلی در وردپرس تاریخ : 2016/12/23
9,089دانلود قالب قبلی چهارده برای وردپرس تاریخ : 2014/04/17
8,3455 افزونه برتر وردپرس برای ساخت فروشگاه اینترنتی تاریخ : 2016/04/4
14,435ساخت پست تایپ سفارشی وردپرس با افزونه Custom Post Type UI تاریخ : 2017/07/17
9,316آموزش مخفی کردن ورژن وردپرس تاریخ : 2016/03/13
4,970پوسته فارسی و خبری IsleMag برای وردپرس تاریخ : 2017/12/4
3,992آموزش ساخت لودینگ برای وردپرس تاریخ : 2019/11/21
برخی از قالب های وبلاگ - بیست اسکریپت
قالب عشق بین انگشت ها
قالب دخترونه و آرایش
قالب زیبای ماشین
قالب فانتزی و طنز چِشم
قالب دختر رویایی
قالب وبلاگ دکوراسیون
قالب وبلاگ کلبه و درخت
قالب دختر زیبا
قالب پسرونه غمگین
قالب عاشقانه قلب
شرکت سئو سایت
تبلیغات
تبلیغات
تبلیغات
تبلیغات
تبلیغات