Wp_is_momot থেকে আইপ্যাড বাদ দিচ্ছে


9

আমি খুব বিরক্তিকর সমস্যাটি কাটিয়ে উঠছি। আমি মিডিয়া ক্যোয়ারী এবং ইস_মোবাইল দিয়ে আমার ওয়েবসাইটটি তৈরি করেছি (ভাবনা হল_মোবাইলটি ছোট পর্দার মতো হবে me এটি আমার পক্ষে কতটা বোকা)) তবে কিছুটা পরীক্ষার পরে স্পষ্টতই আইপ্যাড ধরণের স্ক্রুগুলি এটি আপ (ঠিক আছে, আসলে আমি করেছি)।

আমি wp_is_momot ফাংশন থেকে কোনও আইপ্যাড বাদ দিতে পারলে আমার সমস্ত সমস্যা সহজেই সমাধান করা যেতে পারে। আমি কীভাবে সেই ফাংশনটি আবার লিখব?

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 এর উত্তর আমার চিন্তাভাবনা পেয়েছে। আসলে, আমি মূল ফাংশনটি ব্যবহার করতে পারি এবং এটি আমার পছন্দ মতো মানিয়ে নিতে পারি তবে সবকিছুই একটি নতুন ফাংশনে রাখি put সুতরাং এখানে যায়:

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 করুন। তবে আমি আমার উত্তরও আপডেট করেছি updated আমার সেখানে একটি নির্বোধ টাইপ ছিল : পরিবর্তে আমার চেক করা ===উচিত ছিল আমি তখন যাচাই করেছিলাম !==- কীভাবে ঘটেছিল তা কিছুই নয়, তবে এখন আমি এটি ঠিক করেছি fixed সুতরাং, উপরের উত্তরটির পাশাপাশি কাজ করা উচিত - যা আমি একেবারে বলছি না যে আপনি এটি গ্রহণ করুন! এটি কেবলমাত্র, সংক্ষেপে, আমাদের উত্তরগুলি / কার্যগুলি একই কাজ করে - তাই আমি কী ভুল ছিল তা সন্ধান করতে (এবং ঠিক করতে) চেয়েছিলাম।
tfrommen

@tf আমার মন্তব্য সম্পর্কে এটি ছিল! তবে, আমি আমার নিজের উত্তরটি গ্রহণ করতে যাচ্ছি কারণ আমি জানি এটির একটি কাজ করে এবং আমি আপনার কোড পরীক্ষা করি নি। আমি চাই না যে কেউ এটি পড়ুক এবং আপনার উত্তরটি যদি আমি এটি পরীক্ষা না করে তবে এটি ব্যবহার করুন। আমি এই থ্রেডের জন্য একরকম দায়বদ্ধ বোধ করি। আমি আশা করি তুমি বুঝতে পেরেছ. যদিও প্রচেষ্টার জন্য ধন্যবাদ!
ব্রাম ভ্যানরোয়

আপনারা কি আসলেই এটি কোনও আইপ্যাডে লাইভ পরীক্ষা করতে পেরেছিলেন? আমি এখনই স্থানীয়ভাবে কোনও সাফল্য, আইপ্যাড এয়ার ছাড়াই চেষ্টা করছি।
কেভিন

@ কেভিন একটি আইপ্যাড 3 এ এটি পরীক্ষা করেছে, যা কাজ করে।
ব্রাম ভানরোয়

4

আপনি ট্যাবলেটগুলি (এইভাবে আইপ্যাডস) বাদ দিয়ে মোবাইলগুলি সনাক্ত করার জন্য একটি কাস্টম ফাংশন তৈরি করতে নিয়মিত আপডেট হওয়া মোবাইল সনাক্তকারী পিএইচপি শ্রেণিটিও ব্যবহার করতে পারেন। এই উত্তরটি লেখার সময়, গিথুব রেপোটি 3 মাস আগে স্যামসাংয়ের নতুন ট্যাবলেটগুলি সনাক্তকরণের জন্য সম্প্রতি আপডেট করা হয়েছিল updated

ধরে নিচ্ছি যে আপনি প্রয়োজনীয় থিমটিতে ডাকা ডিরেক্টরিটিতে প্রয়োজনীয় ফাইলটি /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()


এই সমাধানটি মোবাইল ডিটেক্ট ক্লাস যুক্ত প্লাগইন ইনস্টল করার উপর নির্ভর করে না?
ব্র্যাড ডালটন

মোবাইল সনাক্তকরণ শ্রেণীর নির্ভরতা উপরের কোড ব্লকের প্রথম লাইন দ্বারা পরিচালিত হয়; কোন অতিরিক্ত প্লাগইন প্রয়োজন। আমার লক্ষ করা উচিত যে এই শ্রেণীর উপর ভিত্তি করে ওয়ার্ডপ্রেস প্লাগইনগুলি রয়েছে যেমন ডাব্লুপি মোবাইল ডিটেক্ট , তবে এটি প্রায় 2 বছর ধরে আপডেট করা হয়নি, তাই আমি ব্যক্তিগতভাবে সরাসরি পিএইচপি ক্লাস ব্যবহার করতে পছন্দ করি যা সক্রিয়ভাবে বিকাশিত বলে মনে হয়।
অ্যাস্ট্রোটিম

এটির একটি যথাযথ উত্তর তবে আপনাকে মোবাইল_ডিটেক্ট.এফপি ফাইলটি ইনস্টল করতে হবে যা আমি প্লাগইন হিসাবে উল্লেখ করছি।
ব্র্যাড ডালটন

ওটা ঠিক আছে!
অ্যাস্ট্রোটিম

2

আমি জানি এটি পুরানো, তবে আমি পূর্ববর্তী সমাধানগুলি কার্যকর করার সঠিক ওয়ার্ডপ্রেস পদ্ধতিতে এটি আপডেট করতে চেয়েছিলাম। সংস্করণ 4.9.0 অনুসারে, অন্য ফাংশন প্রয়োগের পরিবর্তে, তাদের ডাব্লুপি_আইস_মোবাইল () এর ফলাফল ফিল্টার করা উচিত। এভাবে:

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' );

যাইহোক, সত্যিই যা করা উচিত ছিল তা ছিল বুলেট কামড়ানো এবং ট্যাবলেটগুলিতে সঠিকভাবে কাজ করার জন্য থিমটি পুনরায় লেখানো। অ্যাপলের তুলনায় আরও বেশি ট্যাবলেট প্রস্তুতকারক ছিলেন / ছিলেন।


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ফাংশনটি যে কোনও জায়গায় ব্যবহার করতে পারেন।


সুতরাং, আমি কেবল এটি আমার ফাংশন.এফপি ফাইলের মধ্যে রাখতে পারি এবং এটি স্বয়ংক্রিয়ভাবে মূল ফাংশনটি ওভাররাইট করে ফেলবে?
ব্রাম ভ্যানরোয়

ওফস, দুঃখিত, আমার খারাপ - আমি কখনই এটি ব্যবহার করিনি (এবং এটি জানেন না যে এটি ডব্লিউপি কোর ছিল)। যেহেতু ফাংশনটি প্লাগযোগ্য নয়, আপনি কেবল এটি আপনার ফাইলে রাখতে পারবেন নাfunctions.php । আমি আমার উত্তরটি এক মিনিটের মধ্যে আপডেট করব ...
tfrommen

এটি কাজ করে না বলে মনে হচ্ছে। তবে আইপ্যাডের ব্যবহারকারীর এজেন্টের সত্য হওয়া উচিত নয়?
ব্রাম ভ্যানরোয়

হুঁ? আমি বুঝতে পেরেছিলাম যে আপনি আইপ্যাডগুলিকে মোবাইল ডিভাইস হিসাবে বিবেচনা করা থেকে বাদ দিতে চান - যেমন তারা wp_is_mobile...? সুতরাং, কী কাজ করে না (যেমনটি আপনি করতে চান)?
tfrommen

দুর্ভাগ্যক্রমে আমার নিজের কাছে আইপ্যাড নেই, তাই বন্ধুদের কাছ থেকে প্রাপ্ত তথ্যের উপর আমাকে নির্ভর করতে হবে। তবে বর্তমানে আমার কাছে একটি নকশা রয়েছে যা কোনও ব্যবহারকারী এজেন্ট "is_mobile" (মোবাইল নয়) যদি সাইডবারটি লোড করে তবে আইপ্যাডের জন্য এটি প্রয়োজনীয় নয় কারণ এর রেজোলিউশন যথেষ্ট বড়। আমার বন্ধুরা আমাকে বলে যে আমি if(!my_wp_is_mobile() )সাইডবারটি ব্যবহার করে নিলেও এখনও প্রদর্শিত হচ্ছে না। যা থেকে আমি হ্রাস করি যে ফাংশনটি কাজ করে না।
ব্রাম ভ্যানরোয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.