จะตรวจจับอุปกรณ์มือถือและนำเสนอธีมเฉพาะได้อย่างไร


31

ฉันต้องการสร้างธีมที่ปรับเปลี่ยนใหม่ของฉัน (ตรวจสอบโปรไฟล์ของฉันหากจำเป็น) เพื่อนำเสนอแก่ผู้เยี่ยมชมหากฉันตรวจพบว่าพวกเขากำลังเยี่ยมชมไซต์จากอุปกรณ์มือถือเช่น iPhone, Android เป็นต้น

  1. จะตรวจสอบได้อย่างไรว่าคำขอมาจากอุปกรณ์มือถือ / เบราว์เซอร์?
  2. ฉันจะโหลดและแสดงธีมเฉพาะสำหรับพวกเขาได้อย่างไร

ข้อมูลเพิ่มเติม : ธีมของฉันไม่ลื่นไหล มีความกว้างคงที่ประมาณ 976px (เนื้อหา 676px + ส่วนที่เหลือเป็นแถบด้านข้างซ้าย) ฉันไม่ต้องการปฏิวัติรูปแบบ แต่ฉันรู้สึกว่ามันมีขนาดใหญ่สำหรับโทรศัพท์ 320x480 และ 800x480 อาจเป็นไปได้ว่าฉันจะลบแถบข้างหรืออย่างน้อยก็ย้ายไปทางขวาและทำการปรับเปลี่ยนเล็กน้อยอื่น ๆ

คำตอบ:


19

เช่นเดียวกับคนอื่น ๆ ฉันขอแนะนำให้ใช้ WPTouch อย่างไรก็ตามมันถูกสร้างขึ้นเพื่อรองรับบล็อกมากกว่ารูปแบบเว็บไซต์อื่น ๆ ดังนั้นฉันจึงรู้ว่าไม่ใช่วิธีแก้ปัญหามือถือ (ฉันเรียกใช้พอร์ตโฟลิโอของฉันบน WordPress รวมถึงบล็อกของฉันและพอร์ตโฟลิโอของฉันดูเหมือน****WPTouch)

ดังนั้นฉันลองดูรหัสเพื่อค้นหาส่วนที่เกี่ยวข้องที่คุณต้องใช้เพื่อทำซ้ำการตรวจจับเบราว์เซอร์มือถือ ประการแรกตามที่ Jan Fabry กล่าวถึงคือรายชื่อตัวแทนผู้ใช้เบราว์เซอร์มือถือ 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เป็นจริง นี่คือฟังก์ชั่นเฉพาะ:

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 เป็น plug-in ที่พรีเมี่ยมที่คุณต้องซื้อสินค้าจาก BraveNewCode ฉันยังไม่ได้ดูแหล่งที่มาดังนั้นอาจมีรายการ UA ที่อัปเดต
EAMann

8

คุณอาจต้องการดูว่าปลั๊กอิน WPtouch ยอดนิยมมากแค่ไหนทำเช่นนี้อย่างไร มันทำให้รูปแบบที่แตกต่างกันสำหรับ"iPhone, iPod touch, Android, Opera Mini, Palm Pre, ซัมซุงสัมผัสและโทรศัพท์มือถือ BlackBerry Storm / Torch" ฉันเห็นรายการตัวแทนผู้ใช้ในซอร์สโค้ดนั่นอาจเป็นกุญแจสำคัญ

ปลั๊กอินอื่นWP-Wurfledใช้อย่างกว้างขวางฐานข้อมูลWireless Universal Resource File ที่กว้างขวาง ฐานข้อมูลที่อัปเดตอย่างต่อเนื่องของอุปกรณ์มือถือนี้ยังมีข้อมูลความสามารถมากมายดังนั้นคุณจึงรู้ว่าความละเอียดหน้าจอของอุปกรณ์ทางฝั่งเซิร์ฟเวอร์ไม่ว่าจะรองรับ Flash, ...

template_redirectเบ็ดกระทำมักจะถูกใช้ในการโหลดรูปแบบที่กำหนดเองเช่นมันเกือบจะเป็นช่วงเวลาสุดท้ายก่อนที่แฟ้มแม่แบบที่แท้จริงคือการรวม ( template_includeเป็นตะขอที่ผ่านมา แต่ที่ตัวกรอง)


7

ในความเสี่ยงที่จะไม่ตอบคำถามฉันขอแนะนำไม่ให้ทำเช่นนั้น

ฉันใช้อุปกรณ์ iOS เป็นเวลาหลายเดือนและสิ่งแรกที่ฉันทำเมื่อฉันซื้อ iPad คือพยายามสร้างเค้าโครง CSS ที่เปลี่ยนพฤติกรรมตามอุปกรณ์ที่ใช้ (และเดิมคือการวางแนวหน้าจอ )

ในขณะที่เขียนมันจะทำงานบนเว็บไซต์ dev ของฉัน (http://dev.semiologic.com/) หากคุณทดสอบบนอุปกรณ์ iOS คุณจะทราบว่าเลย์เอาต์เปลี่ยนจากคอลัมน์ที่มีแถบด้านข้างของ iPad เป็นหนึ่งเดียวที่มีคอลัมน์เดียวที่อ้างอิง iPhone (แถบด้านข้างถูกจัดวางในสองคอลัมน์และกล่องด้านล่างจะถูกจัดวางในสองคอลัมน์ด้านล่าง) คุณสามารถสร้างเอฟเฟกต์ใหม่ได้โดยใช้ Safari โดยลดความกว้างของเบราว์เซอร์

อย่างไรก็ตามความสนุกอย่างที่เคยเป็นในการเขียนโปรแกรมในที่สุดมันก็เกิดขึ้นกับฉันว่าอย่างน้อยในอุปกรณ์ iOS รูปแบบที่ปรับให้เหมาะกับมือถือทำให้สิ่งต่าง ๆ แย่ลงไม่ดีขึ้น การซูมในตัวของ Safari mobile นั้นตราบใดที่คอลัมน์หลักของคุณมีความกว้าง 480px เว็บไซต์ของคุณจะได้รับการปรับให้เหมาะสมสำหรับการใช้งานมือถือ เพิ่มแถบด้านข้างกว้าง 240px สำหรับเค้าโครงแบบกว้าง 720px และไซต์ของคุณเหมาะสมและดูดีในทุก ๆ ด้าน:

  • 1024x768 (แนวนอน iPad)
  • 768x1024 (แนวตั้ง iPad)
  • 800x600 (ผู้ใช้ที่มีสายตาไม่ดี)
  • 480x320 (แนวนอนของ iPhone)
  • 320x480 (แนวตั้ง iPhone ที่มีการย่อขนาดอัตโนมัติเข้า)

500px + 250px ยังใช้งานได้หากคุณต้องการมีบางสิ่งที่รวม 750px หากคุณใช้การซูมเข้าในตัวของ Safari mobile เว็บไซต์จะยังคงดูดีและสามารถอ่านได้อย่างสมบูรณ์บน iPhone ในโหมดแนวนอนและแนวตั้ง

กลับมาที่คำถามของคุณการทดสอบพบว่าสิ่งหนึ่งที่คุณไม่ควรทำคือใช้เลย์เอาต์ที่มีความกว้างที่ยืดหยุ่น (โดยบังเอิญ WP-touch จะทำอย่างนั้นเว้นแต่ว่าฉันเข้าใจผิด) การทำเช่นนั้นจะนำไปสู่การซูมย่อยที่ดีที่สุด บน iPad คุณสามารถซูมเข้าสิ่งที่ จำกัด ในคอลัมน์ขนาดกว้าง 480px ทำให้มีขนาดตัวอักษรที่ใหญ่ขึ้น สิ่งที่ "ปรับ" กับความกว้างของหน้าจอของคุณบังคับให้คุณอ่านข้อความเล็ก ๆ หรือเลื่อนแนวนอนถ้ามันเล็กเกินไปที่จะอ่านอย่างสะดวกสบาย ...


ขอบคุณสำหรับคำแนะนำ ไซต์ของฉันไม่คล่อง แต่มีความกว้างคงที่ประมาณ 976px (676px เนื้อหา + ส่วนที่เหลือเป็นแถบด้านข้างซ้าย) ฉันไม่ต้องการที่จะปฏิวัติรูปแบบ แต่ฉันรู้สึกว่ามันเป็นความกว้างสำหรับโทรศัพท์ 320x480 และ 800x480 อาจจะลบแถบด้านข้างหรืออย่างน้อยก็ย้ายไปทางขวา
Drake

ฉันเห็นด้วย 100% จากสิ่งที่ฉันเห็น ด้วยข้อยกเว้นน้อยมาก "ธีมมือถือ" - อย่างน้อยที่สุดปลั๊กอิน "ธีมมือถือ" ออกมี - ดูดและใช้งานยากกว่าการนำทางไซต์ดั้งเดิมบนมือถือ แม้ว่าคุณจะสนใจและพยายามสร้างเว็บไซต์ในมือถือ แต่คิดว่ามันเป็นการออกแบบที่สมบูรณ์แทนที่จะเป็นแค่การปรับแต่งสไตล์ชีท
goldenapples

3

ง่าย: ใช้การwp_is_mobile()ทดสอบ - มันจะเป็นตัวกระตุ้นtrueให้ทุกคนอุปกรณ์มือถือ (สมาร์ทโฟนแท็บเล็ตและอื่น ๆ )

ปรับปรุง

โปรดอย่าทำเช่นนั้น มันใช้งานไม่ได้


2

นี่เป็นสคริปต์ที่ยอดเยี่ยมมากหากคุณต้องการปรับแต่งและรวมเข้ากับเวิร์ดเพรสได้ง่าย http://detectmobilebrowsers.mobi/

สิ่งหนึ่งที่ควรทราบคือผู้ใช้ iPhone, andriod หรือโทรศัพท์มือถือส่วนใหญ่ที่มีการสนับสนุนเบราว์เซอร์ดั้งเดิมไม่ต้องการถูกนำมาใช้ใหม่โดยอัตโนมัติ!

นี่เป็นวิธีปฏิบัติที่ไม่ดีให้ตัวเลือกแก่พวกเขาผ่านลิงก์ไปยังรุ่นมือถือและในเวอร์ชันสำหรับมือถือให้พวกเขามีตัวเลือกเพื่อกลับไปที่ไซต์ดั้งเดิม

ฉันทำซ้ำไม่ได้นำผู้ใช้ของคุณไปยังผู้ใช้ของคุณโดยอัตโนมัติเว้นแต่คุณจะสร้างสิ่งที่เฉพาะเจาะจงมากสำหรับมือถือหรือคุณมีการรับส่งข้อมูลจากโทรศัพท์รุ่นเก่าที่ไม่มีเบราว์เซอร์ดั้งเดิมรองรับ (ไม่น่าเป็นไปได้)

  • ต้องการเพิ่มวิธีง่ายๆในการบอกความสำคัญนี้คือผ่านบันทึกเซิร์ฟเวอร์ของคุณ

การสังเกตที่ดีเพื่อเสนอตัวเลือกการสลับทั้งสองรุ่น บางครั้งคุณอยู่ในเบราว์เซอร์ที่ไม่ใช่อุปกรณ์พกพา แต่ใช้การเชื่อมต่อที่ช้า (ผ่านโมเด็มมือถือ, Wifi ที่ไม่ดี, การเรียกเลขหมาย, ... ) และต้องการรุ่นที่เหมาะกับมือถือเพราะเป็น (โดยทั่วไป) ก็เล็กลง
Jan Fabry

2

ฉันจะเพิ่มวิธีการอื่น

บางทีคุณอาจต้องการฝีมือและปรับรูปแบบและพฤติกรรมทั้งหมดตามความต้องการที่เฉพาะเจาะจง

ฉันเพิ่งมีไปที่: ถ้า IE9 สิ่งหนึ่งถ้า iPhone ที่สองหนึ่งถ้า iPad หนึ่งในสามและอื่น ๆ ... และใช้คริส Schuld ของ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";
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.