मैं नाम या इसके एक भाग के द्वारा एक खराब उपयोगकर्ता की खोज कैसे कर सकता हूं?


13

मुझे एक खोज पृष्ठ बनाने की आवश्यकता है जो आपूर्ति की गई खोज से संबंधित कुछ भी प्रदर्शित करेगा। यानी commentsयह युक्त, events, posts, CPTहै और usersइस नाम की।

मैं उस साइट के उपयोगकर्ताओं को कैसे खोज सकता हूं जिनके पहले या अंतिम नाम में खोज वाक्यांश है?

जवाबों:


25

मुख्य तालिका खोज रहा है

बस WP_User_Queryखोज तर्क के साथ उपयोग करें।

इसलिए यदि आप तालिका user_emailसे अपने या समान कॉलम वाले किसी उपयोगकर्ता के लिए उदाहरण खोजना चाहते हैं {$wpdb->prefix}users, तो आप निम्न कार्य कर सकते हैं:

$users = new WP_User_Query( array(
    'search'         => '*'.esc_attr( $your_search_string ).'*',
    'search_columns' => array(
        'user_login',
        'user_nicename',
        'user_email',
        'user_url',
    ),
) );
$users_found = $users->get_results();

ध्यान रखें कि *एक वाइल्डकार्ड है। इसलिए उदाहरण के user_emailलिए किसी एकल डोमेन पर रोकना आपको निम्न खोज स्ट्रिंग देगा *@example.com:।

searchस्ट्रिंग कुछ "जादू" सुविधाओं की है: search_columnsकरने के लिए चूक ...

  • user_emailअगर arg @में मौजूद है search
  • user_loginऔर IDअगर searcharg संख्यात्मक है
  • user_urlअगर searchस्ट्रिंग शामिल है http://याhttps://
  • या ... user_loginऔर user_nicenameयदि एक स्ट्रिंग मौजूद है।

यदि कोई search_columns तर्क निर्दिष्ट नहीं किया गया था, तो वे सभी चूक केवल निर्धारित हैं ।

मेटा तालिका खोज रहा है

यदि आप उदाहरण के लिए खोज करना चाहते हैं first_nameया last_name, तो आपको ऐसा करना होगा meta_queryक्योंकि वे मुख्य तालिका का हिस्सा नहीं हैं:

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'first_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        ),
        array(
            'key'     => 'last_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        )
    )
) );
$users_found = $users->get_results();

सुनिश्चित करें कि आप सही खोज स्ट्रिंग प्राप्त करते हैं। आम तौर पर यह होगा get_query_var('s');, लेकिन यह हो सकता है - आपके फॉर्म के आधार पर और name/idकुछ अलग हो सकता है जिसे आप $_GET['user_search']उदाहरण के लिए उपयोग करना चाहते हैं । इसे ठीक से एस्कैप करना सुनिश्चित करें और स्ट्रिंग की शुरुआत और अंत से अवांछित सफेद स्थान को हटा दें।

ध्यान रखें कि यह एक है array( array() )के रूप में वहाँ relationकुंजी। यदि आप बस एक ही कुंजी की खोज करना चाहते हैं, तो बस निम्नलिखित के साथ जाना आसान हो सकता है:

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'meta_key'     => 'first_name',
    'meta_value'   => $search_string,
    'meta_compare' => 'LIKE',
) );
$users_found = $users->get_results();

अंतिम प्रश्न

परिणाम निम्नलिखित के करीब लग सकता है :

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'search'         => "*{$search_string}*",
    'search_columns' => array(
        'user_login',
        'user_nicename',
        'user_email',
        'user_url',
    ),
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'first_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        ),
        array(
            'key'     => 'last_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        )
    )
) );
$users_found = $users->get_results();

इस क्वेरी को किस फ़ाइल में जोड़ना चाहते हैं?
नवीन

@ नवीन सर्वश्रेष्ठ फिट होगा functions.php, आपका टेम्पलेट या (जो सबसे अच्छा होगा) थीम को स्विच करते समय ढीले कार्यक्षमता नहीं करने के लिए एक कस्टम मिनी-प्लगइन में अच्छी तरह से लपेटा जाता है।
कैसर

आपके उत्तर के लिए कीसर धन्यवाद। कृपया मेरी मदद करें कि मैं इस कोड को functions.php में कैसे एकीकृत कर सकता हूं
नवीन

3
@ नवीन यहां से बाहर हैं। आपको कोड के बारे में थोड़ा सीखना होगा या ऐसा करने के लिए एक डेवलपर ढूंढना होगा। और पढ़ें कि क्यू / ए
कैसर

display_nameमें एक कॉलम है wp_users। दो सवाल दिमाग में आते हैं। 1: क्या यह डेटाबेस स्कीमा में हालिया बदलाव है? 2: क्या इसे search_columnsमेटा क्वेरी के बजाय मान के रूप में उपयोग किया जा सकता है ?
henrywright

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.