Як виявити мобільні пристрої та представити їм певну тему?


31

Я хотів би створити нову модифіковану версію своєї теми (перевірте мій профіль, якщо потрібно), щоб представити відвідувачам, якщо я виявлю, що вони відвідують сайт із портативного пристрою, як-от iPhone, Android тощо.

  1. Як визначити, чи запит надходить з мобільного пристрою / браузера?
  2. Як я можу завантажити та представити їм виділену тему?

Більше інформації : Моя тема не є рідкою. Він має фіксовану ширину близько 976 пікселів (вміст 676 пікселів + відпочинок - ліва бічна панель). Я не хочу робити революцію в темі, але я вважаю, що вона велика для телефонів 320x480 та 800x480. Ймовірно, я видалю бічну панель або принаймні переміщу її вправо і зроблю інші невеликі коригування.

Відповіді:


19

Як і більшість інших, я настійно рекомендую використовувати WPTouch. Однак він створений більше для підтримки блогів, ніж інших форматів веб-сайтів, тому я знаю, що це не панацея від мобільних рішень (я запускаю свій портфоліо в WordPress так само, як і мій блог, і моє портфоліо виглядає як ****у WPTouch).

Тож я переглянув код, щоб знайти відповідні частини, які вам потрібно буде використовувати для копіювання виявлення мобільного браузера. По-перше, як згадував Ян Фабрі, це список користувачів мобільних браузерних агентів. WPTouch включає список за замовчуванням, але також дозволяє додавати власні користувацькі агенти з налаштуванням або з фільтром під назвою wptouch_user_agents:

function bnc_wptouch_get_user_agents() {
    $useragents = array(           
        "iPhone",                                // Apple iPhone
        "iPod",                                  // Apple iPod touch
        "Android",                               // 1.5+ Android
        "dream",                                 // Pre 1.5 Android
        "CUPCAKE",                               // 1.5+ Android
        "blackberry9500",                        // Storm
        "blackberry9530",                        // Storm
        "blackberry9520",                        // Storm v2
        "blackberry9550",                        // Storm v2
        "blackberry9800",                        // Torch
        "webOS",                                 // Palm Pre Experimental
        "incognito",                             // Other iPhone browser
        "webmate",                               // Other iPhone browser
        "s8000",                                 // Samsung Dolphin browser
        "bada"                                   // Samsung Dolphin browser
    );

    $settings = bnc_wptouch_get_settings();
    if ( isset( $settings['custom-user-agents'] ) ) {
        foreach( $settings['custom-user-agents'] as $agent ) {
            if ( !strlen( $agent ) ) continue;

            $useragents[] = $agent; 
        }       
    }

    asort( $useragents );

    // WPtouch User Agent Filter
    $useragents = apply_filters( 'wptouch_user_agents', $useragents );

    return $useragents;
}

Однак м'ясо плагіна є класом:

class WPtouchPlugin {
    var $applemobile;
    var $desired_view;
    var $output_started;
    var $prowl_output;
    var $prowl_success;

    ...

Конструктор плагіна ( function WPtouchPlugin()) спочатку додає дію на plugins_loadedгачок, щоб виявити агент користувача мобільного браузера і встановити $applemobileзначення true. Ось конкретна функція:

function detectAppleMobile($query = '') {
    $container = $_SERVER['HTTP_USER_AGENT'];

    $this->applemobile = false;
    $useragents = bnc_wptouch_get_user_agents();
    $devfile =  compat_get_plugin_dir( 'wptouch' ) . '/include/developer.mode';
    foreach ( $useragents as $useragent ) {
        if ( preg_match( "#$useragent#i", $container ) || file_exists( $devfile ) ) {
            $this->applemobile = true;
        }       
    }
}

Тепер плагін знає, що ви використовуєте мобільний браузер (за даними користувача веб-агента). Наступна м'ясна частина плагіна - це набір фільтрів:

if ( strpos( $_SERVER['REQUEST_URI'], '/wp-admin' ) === false ) {
    add_filter( 'stylesheet', array(&$this, 'get_stylesheet') );
    add_filter( 'theme_root', array(&$this, 'theme_root') );
    add_filter( 'theme_root_uri', array(&$this, 'theme_root_uri') );
    add_filter( 'template', array(&$this, 'get_template') );       
}

Кожен з цих фільтрів викликає метод, який перевіряє, встановлено чи ні $applemoble. Якщо це так, то WordPress буде використовувати ваш мобільний таблицю стилів, вашу мобільну тему та шаблон мобільного посту / сторінки замість типових для вашої теми. По суті, ви переосмислюєте поведінку за замовчуванням WordPress, залежно від того, чи використовується у веб-переглядачі користувальницький агент, який відповідає вашому списку "мобільних браузерів".

WPTouch також включає можливість вимкнення теми для мобільних пристроїв - коли ви відвідуєте сайт WPTouch на iPhone, внизу є кнопка, яка дозволяє вам нормально переглядати сайт. Ви можете розглянути це під час створення власного рішення.

Відмова від відповідальності: Весь вищевказаний код був скопійований із вихідного для WPTouch версії 1.9.19.4 та захищений під GPL. Якщо ви повторно використовуєте код, ваша система також повинна відповідати умовам GPL. Я не писав цей код.


Це список за замовчуванням UA? Немає Opera Mini чи Opera Mobile? Дивно.
fuxia

Це список UA прямо з вихідного коду ... проте пам’ятайте, що WPTouch 2.0 - це преміальний плагін, який вам доведеться придбати у BraveNewCode . Я ще не шукав джерела для цього, тому він може мати оновлений список UA.
EAMann

8

Ви можете поглянути, як це робить дуже популярний плагін WPtouch . Це дає іншу тему для "iPhone, iPod touch, Android, Opera Mini, Palm Pre, Samsung touch та мобільних пристроїв BlackBerry Storm / Torch" . Я бачу список агентів користувачів у їх вихідному коді , це, мабуть, ключ.

Інший плагін, WP-Wurfled , використовує розгалужену базу даних Universal Universal Resource File . Ця постійно оновлювана база даних мобільних пристроїв містить також багато інформації про можливості , тож ви знаєте на стороні сервера дозвіл екрана пристрою, чи підтримує він Flash, ...

template_redirectКрюк дії часто використовується для завантаження призначених для користувача тим, як це майже в останній момент перед реальним файлом шаблону включений ( template_includeце останній гак, але це фільтр).


7

Ризикуючи не відповісти на запитання, я б радив цього не робити.

Я використовую пристрої iOS місяцями, і однією з перших речей, які я зробив ще тоді, коли купив iPad, було спробувати придумати макет CSS, який змінив його поведінку на основі використовуваного пристрою (і, спочатку, орієнтації екрана ).

На момент написання програми вона працює на моєму веб-сайті (http://dev.semiologic.com/). Якщо ви протестуєте його на пристрої iOS, ви помітите, що макет переходить від стовпчика з бічними панелями на iPad, до одного з одним стовпцем на базі iPhone. (Бічні панелі викладаються у два стовпчики, а нижні поля розташовані у двох стовпцях під ними.) Ви можете відтворити ефект за допомогою Safari, зменшивши ширину браузера.

У будь-якому разі, як було цікаво програмувати, мені врешті-решт прийшло в голову, що, принаймні, на пристроях iOS, компонування, оптимізоване для мобільних пристроїв, погіршило ситуацію, а не краще. Вбудований масштаб масштабування мобільного телефону Safari настільки, що поки ваша основна колонка шириною 480 пікселів, ваш сайт уже оптимізований для мобільного використання. Додайте бічну панель шириною 240 пікселів для розмітки розміром 720 пікселів, і ваш сайт підходить і чудово виглядає у всіх:

  • 1024x768 (пейзаж iPad)
  • 768x1024 (портрет iPad)
  • 800x600 (користувачі із поганим зором)
  • 480x320 (пейзаж iPhone)
  • 320х480 (портрет iPhone, при натисканні автоматичного збільшення)

500px + 250px також працює, якщо ви хочете мати щось, що становить 750px, якщо врахувати вбудований масштаб мобільного телефону Safari. Сайт все одно буде виглядати добре і буде добре читатись на iPhone в альбомному та портретному режимах.

У будь-якому випадку, повертаючись до свого питання, тестування виявило, що одне, що НЕ слід робити, - це використовувати макет із гнучкою шириною. (До речі, WP-touch зробить саме це, якщо я не помиляюся.) Це призводить до неоптимального масштабування. На iPad можна збільшити масштаб на щось, обмежене колоною шириною 480 пікселів, що дозволяє збільшити розмір тексту; те, що "підлаштовується" під ширину екрана, змушує читати крихітний текст або горизонтальну прокрутку, якщо вона занадто мала для зручного читання ...


Дякую за пропозиції. Мій сайт не є текучим, але має фіксовану ширину близько 976 пікселів (вміст 676 пікселів + решта - ліва бічна панель). Я не хочу робити революцію в темі, але я вважаю, що це ширина для телефонів 320x480 та 800x480 Можливо, я зніму бічну панель або принаймні переміщу її вправо.
Дрейк

Я погоджуюсь на 100% з того, що бачив. За дуже невеликими винятками, "мобільні теми" - принаймні, плагіни "мобільна тема" там - смокчуть, і їх складніше використовувати, ніж навігація по оригінальному сайту на мобільному пристрої. Хоча, якщо вам достатньо подбати про те, щоб спробувати і створити мобільну версію свого веб-сайту, думайте про це як про повне перероблення, а не як про перетворення аркуша стилів.
goldenapples

3

Просто: Використовуйте wp_is_mobile()для тестування - це запустить trueдля всіх мобільних пристроїв (смартфонів, планшетів тощо).

Оновлення

Будь ласка , не робіть цього. Це не працює надійно.


2

Це дійсно чудовий сценарій, якщо ви хочете його налаштувати, його легко інтегрувати в wordpress. http://detectmobilebrowsers.mobi/

Варто зазначити, що більшість користувачів iphone, andriod або мобільних телефонів із підтримкою власного браузера не хочуть автоматично перенаправлятися!

Це погана практика, надайте їм можливість через посилання на мобільну версію І в мобільній версії надайте їм можливість повернутися на початковий сайт.

Повторюю, не перенаправляйте автоматично своїх користувачів, якщо ви не будуєте щось дуже специфічне для мобільних пристроїв, або якщо у вас є трафік із старих телефонів, що не підтримують рідний веб-переглядач (навряд чи).

  • Хотіли додати, один простий спосіб сказати, наскільки це важливо, це через ваші журнали сервера.

Гарне спостереження, щоб запропонувати варіанти перемикання в обох версіях. Іноді ви перебуваєте у немобільному браузері, але у повільному зв’язку (через стільниковий модем, поганий Wi-Fi, комутований комунікатор ...) і віддаєте перевагу оптимізованій мобільній версії, оскільки вона (загалом) також менша.
Ян Фабрі

2

Я додам альтернативний підхід.

Можливо, ви хочете виправити і виправити весь стиль та поведінку відповідно до дуже конкретних потреб.

Нещодавно мені довелося: якщо IE9 одне, якщо iPhone друге, якщо iPad третє і так далі ... І використовував клас Browser.php Кріса Шульда з чудовими результатами.

Функція, яку я придумав, і приклади використання:

require_once('Browser.php');
$browser_check = new Browser();
$browser_agent = $browser_check->getBrowser();
$browser_version = $browser_check->getVersion();

function browser_check($what) {
    global $browser_agent, $browser_version;
    switch ($what) {
        case 'version':
            return $browser_version;
        break;
        case 'ie':
            if ($browser_agent==Browser::BROWSER_IE) return true;
            else return false;
        break;
        case 'mobile':
            if ($browser_agent==Browser::BROWSER_ANDROID || $browser_agent==Browser::BROWSER_IPOD || $browser_agent==Browser::BROWSER_IPHONE) return true;
            else return false;          
        break;
        case 'ipad':
            if ($browser_agent==Browser::BROWSER_IPAD) return true;
            else return false;          
        break;
        default:
            return false;
        break;
    }
}

echo "Browser Version: " . browser_check('version');

if ( browser_check('ie') ) echo "Using Internet Explorer - print proper CSS";

if ( browser_check('mobile') ) echo "Using iPhone, iPod or Android - print proper JAVASCRIPT";

if ( browser_check('ipad') ) echo "Using iPad - print proper PHP";
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.