2016-08-11 6 views
18

के कारण वर्डप्रेस खोज विशेष वर्णों पर विफल रही है, मैं वर्डप्रेस खोज कार्यक्षमता को कार्यान्वित कर रहा हूं। जब मैं पाठ के लिए खोज "डिवीजन के", यह रिटर्न "कोई परिणाम नहीं मिले"अनुचित डीकोड

अब आगे की जांच करने (जो पोस्ट में से एक में एक पाठ है), मैं मूल फ़ाइल को चेक कर: wp- शामिल/query.php => समारोह parse_search()

और पाया गया कि $ अवधि के रूप में एन्कोड प्राप्त होता है: डिवीजन \ XE2 \ x80 \ x99s

अब इस अवधि ठीक से डीकोड नहीं है। और अंतिम SQL कथन का गठन किया गया है:
(((test_posts.post_title LIKE '% div \ xe2 \ x80 \ x99s%') या (test_posts.post_content LIKE '% डिवीजन \ xe2 \ x80 \ x99s%'))

तो, मैं विशेष पात्रों के साथ शब्दों को सफलतापूर्वक खोजने के लिए विशेष पात्रों को डीकोड करना चाहता हूं।

डिकोडिंग तरीकों की तरह:

  • $ स्ट्रिंग = urldecode ($ स्ट्रिंग);
  • $ string = html_entity_decode ($ string);
  • $ string = rawurldecode ($ string);
  • $ string = base64_decode ($ string);
  • $ string = utf8_decode ($ string);

काम नहीं किया। क्या कोई प्लगइन/हुक/विधि है जो मदद कर सकती है?

उदाहरण प्रदान की:

सरल searchform.php यहाँ फ़ाइल:

if (!defined('ABSPATH')) exit(0); 

global $wp_query; 

$search_query = get_search_query(); 
$error = get_query_var('error'); ?> 

<form role="search" method="get" class="search-form form-inline" action="<?php echo esc_url(home_url('/')); ?>"> 
    <input id="mod-search-searchword" type="search" size="30" class="inputbox search-query search-field" placeholder="search products, content" value="<?php echo !empty($search_query) && empty($error) ? $search_query : ''; ?>" name="s" title="Search for:" /> 
    <input type="submit" class="button btn btn-primary" value="Search" /> 
</form> 

अब अगर मैं () जैसे पात्रों में टाइप वे urlencoded मिलता है, और है कि एक ही urlencoded स्ट्रिंग पाठ फ़ील्ड में भरता नहीं प्रतिशत के साथ, आदि

यदि मैं ऐसा करता हूं:

$search_query = !empty($search_query) ? trim(sanitize_text_field(urldecode($search_query))) : ''; 

अभी भी एक समस्या है, लेकिन पाठ इनपुट के साथ कोई समस्या नहीं है, सही स्ट्रिंग नहीं है, समस्या यह हो जाती है कि अब कोई खोज परिणाम नहीं हैं।

वर्डप्रेस खोज के साथ इस समस्या को कैसे ठीक करें?

WP-config.php निम्नलिखित शामिल हैं:

<!DOCTYPE html> 
    <head> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, user-scalable=yes"/> 
     <meta name="HandheldFriendly" content="true" /> 
     <meta name="apple-mobile-web-app-capable" content="YES" /> 
     <link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/favicon.ico" type="image/vnd.microsoft.icon" /> 
     <title><?php wp_title(' - ', true, 'right'); ?></title> 
     <?php wp_head(); ?> 
    </head> 

मैं अपने कार्यों में निम्नलिखित है:

define('DB_CHARSET', 'utf8'); 
define('DB_COLLATE', ''); 

header.php निम्नलिखित शामिल हैं।php फ़ाइल:

function livchem_searchfilter($query) { 

    global $search_query; 

    if ($query->is_search && !is_admin()) { 

     // check if length of query > 3 but < 200 
     $search_query = trim(get_search_query()); 
     $search_length = strlen($search_query); 

     if ($search_length < 3 || $search_length > 200) 
     { 
      $query->set('error', 'Search term must be a minimum of 3 characters and a maximum of 200 characters.'); 
      return $query; 
     } 
     else 
     { 
      $query->set('post_type', array('post', 'page', 'product')); 
      $query->set('posts_per_page', 20); 
     } 
    } 

    return $query; 
} 

add_filter('pre_get_posts','livchem_searchfilter'); 

तो, मैं UTF-8 एन्कोडिंग मेरी चारसेट रूप afaik की क्या ज़रूरत है। समस्या क्या है, मेरी खोज क्यों है: copper(i)/(ii) यूआरएल में ?s=copper%2528i%2529%252F%2528ii%2529 लौट रहा है? और इसके लिए मुझे 2 परिणाम मिलना चाहिए, लेकिन मुझे 0 परिणाम मिले। क्यूं कर?

और यदि मैं इस पर यूआरएल बदलता हूं: ?s=copper(i)/(ii) मैं अपने 2 परिणाम देखता हूं। लेकिन मुझे अपने परिणाम क्यों नहीं मिल सकते हैं, और/या यूआरएल इस तरह बनने के लिए? मैं ईमानदारी से यूआरएल संरचना के बारे में कम ख्याल रख सकता हूं, लेकिन जब मैं टाइप करता हूं तो मैं अपने 2 परिणाम प्राप्त करना चाहता हूं: copper(i)/(ii) खोज फ़ॉर्म में, लेकिन वर्तमान में यह कोई परिणाम नहीं ढूंढ रहा है।

+1

यह एन्कोडिंग के बारे में नहीं है, इसके बारे में वर्णमाला, [utf8] का उपयोग करें (http://stackoverflow.com/questions/279170/utf-8-all-the-way-through) –

+0

मैंने इस पर ठोकर खाई और मैं नहीं हूं एक स्वच्छ WordPress स्थापित के सामने। आपके प्रश्न में आपको जो कुछ विवरण जोड़ना चाहिए, उनमें शामिल हैं, क्या आप कस्टम पोस्ट प्रकार का उपयोग कर रहे हैं या अपने सर्वश्रेष्ठ ज्ञान के लिए यह एक डिफ़ॉल्ट पोस्ट प्रकार था। जहां तक ​​मेरा ज्ञान वर्डप्रेस केवल पोस्ट शीर्षक, टैग और श्रेणियों को पोस्ट करता है, न कि पोस्ट बॉडी (मैं इस पर गलत हो सकता हूं लेकिन मुझे लगता है कि मुझे खोज परिणामों के साथ एक ही समस्या थी और इसे कोर फाइलों में से एक के माध्यम से समझ लिया गया) । जैसा कि @ लशाने ने बताया कि यूटीएफ -8 शायद उत्तर है यदि यह एक कस्टम चीज है। – Shawn

+0

क्या आप डेटाबेस में ऐसा शब्द प्रदान कर सकते हैं? इस तरह हम इसकी तुलना उस व्यक्ति से कर सकते हैं जिसे हम खोज रहे हैं और देखें कि वे समान हैं या नहीं। –

उत्तर

9

ठीक है, तो आपको खोज क्वेरी को डीकोड करना होगा और यहां यह है कि मैं इसे कैसे काम कर रहा हूं और अब एक आकर्षण की तरह काम करता है! यह अब खोज परिणामों को वापस कर देता है, लेकिन यूआरएल एन्कोडेड रखता है ताकि यहां कहीं भी कोई समस्या न हो।

function livchem_search_filter($s) { 
    return urldecode($s); 
} 

add_filter('get_search_query', 'livchem_search_filter'); 
add_filter('the_search_query', 'livchem_search_filter'); 

function livchem_query_vars_search_filter($query) 
{ 
    if ($query->is_search && !is_admin()) { 
     $query->query_vars['s'] = urldecode($query->query_vars['s']); 
    } 

    return $query; 
} 
add_action('parse_query', 'livchem_query_vars_search_filter'); 

एक प्लस के रूप में यह भी अब पथ संबंधी खोजों के लिए अच्छी तरह से काम करता है, इसलिए यदि मैं अपने .htaccess के लिए निम्न कहा:

RewriteCond %{QUERY_STRING} s=(.*) 
RewriteRule ^$ /search/%1? [R,L] 

खोजों इसलिए की तरह संरचित किया जाएगा: /search/searchterm

और विशेष पात्रों के साथ क्वेरी अब भी काम करती है। सीएमएस का हिस्सा कुछ ऐसा करने के लिए, गर्दन में क्या दर्द ठीक से काम करना था।

संबंधित मुद्दे