تبلیغات

تبلیغات تبلیغات
حراجی دامنه های ویژهمشاهده
آخرین ارسال های تالار مشاهده انجمن
خرید تتر از ایران 0 پاسخ 17 بازدید چرا قالب بیست اسکریپت کار نمیکنه؟ 2 پاسخ 316 بازدید سئو و لینک سازی 0 پاسخ 2 بازدید دانلود رایگان مجموعه طرح لایه باز قالب پست اینستاگرام 2 پاسخ 563 بازدید وردپرس یا جوملا؟ 0 پاسخ 619 بازدید بهترین وب سرور 0 پاسخ 469 بازدید معرفی سایت و اپ لیلام 4 پاسخ 544 بازدید بهترین cdn 0 پاسخ 504 بازدید 5 ارز دیجیتال برتر برای سرمایه گذاری در سال 2021 1 پاسخ 3192 بازدید فروش سایت تگ تچ 5 پاسخ 1939 بازدید

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

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

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

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

 

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

 

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

 

کلیه اطلاعات مربوط به فیلدهای سفارشی در جدول 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 کلیک کنید >
دانلود بیش از 5میلیون محصول وردپرسی تنهابا 500 هزارتومان (طرح برد برد) کلیک کنید >
مطلب مفیدی بود ؟
نویسنده : تیم محتوای 20اسکریپت 0 آموزش ها , مقالات,آموزش,ترفند , وردپرس
لینک کوتاه مطلب : https://www.20script.ir/?p=22041
کلمات کلیدی پست :
مطالب مرتبط
7,635آپلود فایل های وردپرس در DropBox با افزونه BOXIT نسخه 2.5.6 تاریخ : 2015/02/18
19,908افزونه اسلایدر وردپرس Meta Slider تاریخ : 2016/02/19
3,224پوسته دندان پزشکی Dentario برای وردپرس تاریخ : 2019/11/23
2,632پیوند یکتا فارسی یا انگلیسی در وردپرس بهتر است؟ تاریخ : 2019/11/3
7,293آموزش ساخت ابزارک در وردپرس تاریخ : 2015/08/12
2,772خطای با عرض پوزش، این نوع پرونده به دلایل امنیتی مجاز نیست. در وردپرس تاریخ : 2019/10/1
26,204افزونه ویرایش صفحات در وردپرس Admin Columns Pro نسخه 5.4.2 + افزودنی ها تاریخ : 2021/02/10
7,609دانلود پوسته فروشگاهی وب مارکت برای وردپرس تاریخ : 2016/07/6
2,128آموزش رفع خطای افزونه وردپرس تاریخ : 2019/07/10
5,953افزونه نمایش قبل و بعد از تغییر تصاویر برای وردپرس تاریخ : 2016/05/20
2,444تبدیل کلمات کلیدی به لینک در وردپرس با افزونه Keywords to Links Converter تاریخ : 2019/12/6
7,870دانلود قالب وردپرس و چندمنظوره Legenda تاریخ : 2015/03/16
برخی از قالب های وبلاگ - بیست اسکریپت
قالب عشق بین انگشت ها
قالب دخترونه و آرایش
قالب زیبای ماشین
قالب فانتزی و طنز چِشم
قالب دختر رویایی
قالب وبلاگ دکوراسیون
قالب وبلاگ کلبه و درخت
قالب دختر زیبا
قالب پسرونه غمگین
قالب عاشقانه قلب
شرکت سئو سایت
تبلیغات
تبلیغات
تبلیغات
تبلیغات