Utilizarea corectă a wp_is_mobile()?

20 mai 2015, 17:27:37
Vizualizări: 45.8K
Voturi: 23

Am dezvoltat o temă responsivă și vreau să o trimit pe wordpress.org. Înainte de a o trimite, vreau să folosesc wp_is_mobile() în tema mea, dar conform Referinței Funcției/wp is mobile este o idee proastă deoarece spune următoarele:

Trebuie să înțelegi că aceasta nu detectează specific un telefon mobil, deoarece o tabletă este considerată tot un dispozitiv mobil. Verifică secțiunea de Plugin-uri pentru mai multe alternative utile. De asemenea, nu ar trebui folosită pentru teme.

Deci dacă o folosesc în functions.php al temei mele astfel:

add_filter('body_class','mobile_theme_body_class');     
function mobile_theme_body_class( $classes ){

    if ( wp_is_mobile() ){
        $classes[] = 'mobile';
    }
    else{
        $classes[] = 'desktop';
    }
    return $classes;
}

Tema mea va fi respinsă?

Sub-întrebare:

Dacă folosesc funcția mea ca în codul de mai sus și utilizez Plugin-uri de Cache (precum WP Super Cache), funcția mea va fi afectată (va eșua să se execute sau va returna rezultate false pozitive)?

Mulțumesc pentru timp și răspunsuri...

7
Comentarii

Ei spun că avem această funcție, dar să nu o folosim, pentru că nu este bună - ce ironie incredibilă. Nu știu dacă tema ta ar fi respinsă pentru utilizarea ei, dar dacă ar fi așa, atunci ironia ar ajunge la maxim. La urma urmei, este o funcție WP și nu este depreciată.

Nicolai Grossherr Nicolai Grossherr
20 mai 2015 17:43:19

Întrebarea reală este de ce vrei să adaugi clasa pentru mobil/desktop?

TheDeadMedic TheDeadMedic
20 mai 2015 17:44:48

Ceea ce spune @TheDeadMedic este adevărat, poți lucra de exemplu cu CSS media queries.

Nicolai Grossherr Nicolai Grossherr
20 mai 2015 17:47:27

Vezi: http://wordpress.stackexchange.com/a/97906/21376

s_ha_dum s_ha_dum
20 mai 2015 17:52:55

wp_is_mobile() nu este decât o glumă și este foarte nesigur. Se bazează pe partea utilizatorului, care poate fi manipulată de către utilizatorul final. Trebuie să știi că funcționalitatea ta va eșua în peste 10% din cazuri, așa că o cantitate mare de utilizatori mobili vor primi conținut desktop, indiferent dacă le place sau nu sau dacă tu nu dorești acest lucru

Pieter Goosen Pieter Goosen
20 mai 2015 17:58:23

Deci funcția există și este la fel de proastă precum query_posts();

Dejo Dekic Dejo Dekic
20 mai 2015 18:06:14

Da, sincer, cea mai sigură variantă aici sunt media queries :-)

Pieter Goosen Pieter Goosen
20 mai 2015 18:08:20
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare 2
0
34

În termeni foarte simpli, wp_is_mobile() nu este menită pentru stilizarea temei.

Cum funcționează: Această funcție verifică dacă unele dintre numele native ale dispozitivului se regăsesc în șirul User Agent. Astfel, dacă cineva manipulează acest șir și trimite informații false, nu veți putea detecta corect dispozitivul. De asemenea, funcția nu returnează numele dispozitivului, ci doar true dacă nu sunteți pe desktop, altfel returnează false.

Cum WordPress o folosește: WordPress nu o utilizează pentru stilizare sau adăugare de CSS. WordPress o folosește pentru a adăuga sau manipula elemente care ar trebui să apară doar pe dispozitive mobile (indiferent de dimensiune sau nume). De exemplu: adăugarea de scripturi pentru touch, adăugarea viewport-ului, clasa mobile în antetul admin, adăugarea de butoane mobile.

Efectul cache-ului: Dacă utilizați un plugin de cache, această funcție devine inutilă. Deoarece codul nu este executat de fiecare dată, veți obține același rezultat mereu.

WordPress o folosește în mare parte în back-end, iar aproape fiecare plugin de cache exclude cache-ul în back-end sau pentru utilizatorii autentificați. Astfel, funcționează corect în aceste cazuri.

20 mai 2015 19:31:31
0

wp_is_mobile() detectează dispozitivul pe baza HTTP_USER_AGENT (nu este legat de dimensiunea ecranului)

wp_is_mobile returnează true sau false pe baza $_SERVER['HTTP_USER_AGENT']

dacă $_SERVER['HTTP_USER_AGENT'] conține Mobile (Android, IOS etc.) sau Tablet, returnează true, altfel returnează false
dacă $_SERVER['HTTP_USER_AGENT'] este null, returnează false

pentru mai multe informații verifică codul sursă al funcției

24 oct. 2017 10:04:03