ارزدیجیتال
حراجی دامنه های ویژهمشاهده
تبلیغات
تبلیغات تبلیغات
تبلیغات ژاکت, مرجع خرید قالب و افزونه وردپرسی اورجینال

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

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

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

 

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

 

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

 

کلیه اطلاعات مربوط به فیلدهای سفارشی در جدول 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
کلمات کلیدی پست :
مطالب مرتبط
9,473حذف کدهای کوتاه در وردپرس با افزونه Remove Orphan Shortcodes تاریخ : 2016/03/23
6,168پیدا کردن لینک های خراب در وردپرس برای افزایش سئو تاریخ : 2020/02/5
7,276آموزش وارد کردن و صادر کردن بلاک‌ها در ویرایشگر Gutenberg وردپرس تاریخ : 2019/02/15
12,304ساخت نقشه در وردپرس با افزونه HTML5 Maps تاریخ : 2019/12/28
17,757اسکریپت ایجاد سایت موسیقی Ci Music Online تاریخ : 2014/11/15
31,058افزونه جدول قیمت وردپرس Go Pricing فارسی نسخه 3.3.17 تاریخ : 2020/03/6
13,441افزودن فرمت های بیشتر به رسانه وردپرس با افزونه WP Extra File Types تاریخ : 2017/05/29
14,745آموزش ساخت تب بوسیله جی کوئری تاریخ : 2013/11/27
12,585نمایش اسلایدی مطالب در وردپرس با افزونه Recent Posts Slider تاریخ : 2017/08/24
9,564نحوه بازگرداندن تنظیمات تعداد ستون ها در پیشخوان وردپرس تاریخ : 2016/05/24
7,152اضافه کردن توضیحات منو به پوسته وردپرس تاریخ : 2018/06/7
39,990افزونه رهگیری مرسولات پستی برای وردپرس تاریخ : 2014/06/1
برخی از قالب های وبلاگ - بیست اسکریپت
قالب عشق بین انگشت هاقالب عشق بین انگشت ها
قالب دخترونه و آرایشقالب دخترونه و آرایش
قالب زیبای ماشینقالب زیبای ماشین
قالب فانتزی و طنز چِشمقالب فانتزی و طنز چِشم
قالب دختر رویاییقالب دختر رویایی
قالب وبلاگ دکوراسیونقالب وبلاگ دکوراسیون
قالب وبلاگ کلبه و درختقالب وبلاگ کلبه و درخت
قالب دختر زیباقالب دختر زیبا
قالب پسرونه غمگینقالب پسرونه غمگین
قالب عاشقانه قلبقالب عاشقانه قلب
بیست اسکریپت
اسکریپت
profile
sourceforge
profile webmaster
profile check
checker list
checker
checker
upload file