Wp_is_mobile से iPad छोड़कर


9

मैं एक बहुत कष्टप्रद समस्या का अनुभव कर रहा हूं। मैंने अपनी वेबसाइट मीडिया क्वेश्चन के साथ बनाई है और is_mobile (सोच is_mobile छोटी स्क्रीन जैसी ही होगी। मेरे बारे में कैसा लग रहा है।) लेकिन कुछ परीक्षण के बाद जाहिर तौर पर iPad तरह के पेंच इसे ठीक कर रहा है (ठीक है, वास्तव में मैंने किया था)।

मेरी सभी समस्याओं को आसानी से हल किया जा सकता है अगर मैं wp_is_mobile फ़ंक्शन से एक iPad को बाहर कर सकता हूं। मैं उस फ़ंक्शन को फिर से कैसे लिखूं?

function wp_is_mobile() {
    static $is_mobile;

    if ( isset($is_mobile) )
        return $is_mobile;

    if ( empty($_SERVER['HTTP_USER_AGENT']) ) {
        $is_mobile = false;
    } elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
        || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
        || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
        || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
        || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
        || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false ) {
            $is_mobile = true;
    } else {
        $is_mobile = false;
    }

    return $is_mobile;
}

मैं इसे कैसे बदलूंगा?

जवाबों:


13

tf का जवाब मुझे सोच में पड़ गया। वास्तव में, मैं कोर फ़ंक्शन का उपयोग कर सकता हूं और जैसा मैं चाहता हूं, उसे अनुकूलित कर सकता हूं लेकिन बस एक नए फ़ंक्शन में सब कुछ डाल सकता हूं। तो यहाँ जाता है:

function my_wp_is_mobile() {
    static $is_mobile;

    if ( isset($is_mobile) )
        return $is_mobile;

    if ( empty($_SERVER['HTTP_USER_AGENT']) ) {
        $is_mobile = false;
    } elseif (
        strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
        || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
        || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
        || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
        || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false ) {
            $is_mobile = true;
    } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') == false) {
            $is_mobile = true;
    } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false) {
        $is_mobile = false;
    } else {
        $is_mobile = false;
    }

    return $is_mobile;
}

यह स्वयं के समाधान खोजने के लिए हमेशा अच्छा होता है , इसलिए इसके लिए +1। हालाँकि, मैंने अपना उत्तर भी अपडेट कर दिया। मेरे पास वहां एक बेवकूफ टाइपो था: मैंने उसके लिए जाँच की थी ===जबकि मुझे !==इसके बजाय जाँच करनी चाहिए थी - कोई भी विचार नहीं कि यह कैसे हुआ, लेकिन अब मैंने यह तय कर लिया है। तो, उपरोक्त उत्तर के रूप में अच्छी तरह से काम करना चाहिए - जो मैं बिल्कुल नहीं कह रहा हूँ कि आप इसे स्वीकार करें! यह सिर्फ इतना ही है, संक्षेप में, हमारे उत्तर / कार्य वही करते हैं - इसलिए मैं सिर्फ (और तय) करना चाहता था कि क्या गलत था।
tfrommen

@ टीएफ यही मेरी टिप्पणी के बारे में था! लेकिन, मैं अपना जवाब स्वीकार करने जा रहा हूं क्योंकि मुझे पता है कि यह एक काम है और मैंने आपके कोड का परीक्षण नहीं किया है। मैं नहीं चाहता कि कोई भी इसे पढ़े और यदि मैंने इसका परीक्षण नहीं किया है तो आपके उत्तर का उपयोग करूंगा। मैं इस धागे के लिए जिम्मेदार महसूस करता हूं। मुझे आशा है की तुम समझ गए होगे। हालांकि प्रयास के लिए धन्यवाद!
ब्रैम वेनरो

क्या तुम लोग वास्तव में इसे एक आईपैड पर लाइव परीक्षण करने में कामयाब रहे? मैं अभी बिना किसी सफलता के, स्थानीय स्तर पर आईपैड एयर के लिए प्रयास कर रहा हूं।
केविन

@kevin ने एक iPAD 3 पर यह परीक्षण किया, जिसने काम किया।
ब्रैम वनरॉय

4

आप टेबलेट को छोड़कर मोबाइलों का पता लगाने के लिए एक कस्टम फ़ंक्शन बनाने के लिए नियमित रूप से अपडेट किए गए मोबाइल डिटेक्ट PHP वर्ग का भी उपयोग कर सकते हैं (इस प्रकार आईपैड)। इस उत्तर को लिखने के समय, जीथब रेपो को हाल ही में 3 महीने पहले सैमसंग के नए टैबलेट के लिए पता लगाने के लिए अद्यतन किया गया था।

मान लें कि आप /includes/अपनी थीम में निर्देशिका में आवश्यक फ़ाइल रखते हैं , तो आप इस कोड को अपने फ़ंक्शन में जोड़ सकते हैं

require_once(get_template_directory() . '/includes/Mobile_Detect.php');

function md_is_mobile() {

  $detect = new Mobile_Detect;

  if( $detect->isMobile() && !$detect->isTablet() ){
    return true;
  } else {
    return false;
  }

}

फिर फ़ंक्शन md_is_mobile()को विकल्प के रूप में उपयोग करें wp_is_mobile()


क्या यह समाधान मोबाइल डिटेक्ट क्लास वाले प्लगइन की स्थापना पर निर्भर नहीं है?
ब्रैड डाल्टन

ऊपर के कोड ब्लॉक की पहली पंक्ति द्वारा मोबाइल डिटेक्ट क्लास निर्भरता को नियंत्रित किया जाता है; कोई अतिरिक्त प्लगइन की आवश्यकता नहीं है। मुझे ध्यान देना चाहिए कि इस वर्ग पर आधारित वर्डप्रेस प्लगइन्स मौजूद हैं, जैसे कि WP मोबाइल डिटेक्ट , लेकिन यह लगभग 2 वर्षों से अपडेट नहीं किया गया है, इसलिए मैं व्यक्तिगत रूप से सीधे PHP वर्ग का उपयोग करना पसंद करता हूं, जो सक्रिय रूप से विकसित प्रतीत होता है।
एस्ट्रोइटिम

इसका एक उचित जवाब है, हालांकि आपको फ़ाइल को स्थापित करने की आवश्यकता है Mobile_Detect.php जो मैं प्लगइन के रूप में संदर्भित कर रहा हूं।
ब्रैड डाल्टन

यह काफी उचित है!
एस्ट्रोइटिम

2

मुझे पता है कि यह पुराना है, लेकिन मैं इसे पिछले समाधानों को लागू करने के उचित वर्डप्रेस तरीके से अपडेट करना चाहता था। संस्करण ०.१.० के रूप में, किसी अन्य फ़ंक्शन को लागू करने के बजाय, उन्हें wp_is_mobile () के परिणाम को फ़िल्टर करना चाहिए। इस प्रकार:

function myprefix_exclude_ipad( $is_mobile ) {
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false) {
        $is_mobile = false;
    }
    return $is_mobile ;
}
add_filter( 'wp_is_mobile', 'myprefix_exclude_ipad' );

वास्तव में क्या किया जाना चाहिए था गोली को काटने के लिए और टेबलेट पर ठीक से काम करने के लिए विषय को फिर से लिखना। Apple की तुलना में अधिक टैबलेट निर्माता थे।


1

मैंने आपका फ़ंक्शन थोड़ा लिखा है (और, मेरी राय में, अनुकूलित)

function wp_is_mobile() {
    static $is_mobile;

    if (isset($is_mobile))
        return $is_mobile;

    if (
        ! empty($_SERVER['HTTP_USER_AGENT'])

        // bail out, if iPad
        && false === strpos($_SERVER['HTTP_USER_AGENT'], 'iPad')

        // all the other mobile stuff
        && (
            false !== strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile')
            || false !== strpos($_SERVER['HTTP_USER_AGENT'], 'Android')
            || false !== strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/')
            || false !== strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle')
            || false !== strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry')
            || false !== strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini')
        )
    ) $is_mobile = true;
    else $is_mobile = false;

    return $is_mobile;
}

// संपादित करें:

ठीक है, एक बार फिर ...

एक नया फ़ंक्शन लिखें जो आंतरिक रूप से कोर फ़ंक्शन का उपयोग करता है और इसे विस्तारित करता है:

function my_wp_is_mobile() {
    if (
        ! empty($_SERVER['HTTP_USER_AGENT'])

        // bail out, if iPad
        && false !== strpos($_SERVER['HTTP_USER_AGENT'], 'iPad')
    ) return false;
    return wp_is_mobile();
} // function my_wp_is_mobile

अब आप अपने नए my_wp_is_mobileफ़ंक्शन का उपयोग कहीं भी कर सकते हैं।


इसलिए, मैं इसे अपने फंक्शन्स में डाल सकता हूं। एफपी फाइल और यह स्वतः ही मुख्य फ़ंक्शन को अधिलेखित कर देगा?
ब्रैम वेनरो

वूप्स, सॉरी, मेरा बुरा - मैंने कभी इसका इस्तेमाल नहीं किया (और इस तरह यह WP कोर नहीं जानता था)। चूंकि फ़ंक्शन प्लग करने योग्य नहीं है, इसलिए आप इसे अपनी functions.phpफ़ाइल में नहीं डाल सकते । मैं एक मिनट में अपना उत्तर अपडेट करूंगा ...
tfrommen

यह काम नहीं लगता है। लेकिन क्या iPad के लिए उपयोगकर्ता एजेंट सही नहीं है?
ब्रैम वेनरो

हम्म? मैंने इसे ऐसे समझा जैसे आप आईपैड को मोबाइल उपकरणों के रूप में बाहर रखना चाहते हैं - जैसा कि वे करेंगे wp_is_mobile...? तो, क्या काम नहीं करता है (जैसा कि आप करना चाहते हैं)?
19

दुर्भाग्य से मेरे पास खुद का आईपैड नहीं है, इसलिए मुझे दोस्तों से मिली जानकारी पर भरोसा करना होगा। लेकिन वर्तमान में मेरे पास एक डिज़ाइन है जो एक साइडबार को लोड करता है यदि उपयोगकर्ता एजेंट "! Is_mobile" (मोबाइल नहीं है), लेकिन यह iPad के लिए आवश्यक नहीं है क्योंकि इसका रिज़ॉल्यूशन काफी बड़ा है। मेरे मित्र मुझे बताते हैं कि भले ही मैंने if(!my_wp_is_mobile() )साइडबार का उपयोग किया हो फिर भी प्रदर्शित नहीं किया जा रहा है। जिससे मैं कटौती करता हूं कि फ़ंक्शन काम नहीं करता है।
ब्रैम वेनरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.