2013-08-26 1 views
1

Это не вопрос кода, я просто не понимаю, как все работает в этом конкретном случае.Wordpress & Enquire.js - философия условной загрузки

Я завязываю тему Wordpress, которая должна динамически загружать части кода php через javascript. На самом деле это работает в сочетании с UA Sniffing, потому что, если устройство мобильное, мобильный шаблон следует использовать в любом случае, но это не главное.

  • Если screen.width равно < 1080px, необходимо загрузить меню мобильной версии моей темы Wordpress.
  • В противном случае, если ширина экрана больше, необходимо загрузить версию меню рабочего стола
  • Решение, основанное только на запросах CSS Media, неприемлемо, поскольку версия для настольного ПК слишком тяжелая.

Поэтому я решил условном содержимое динамически загружается через enquire.js Первая часть моего WP-Стартовой-template.php является:

enquire.register("screen and (max-width:1080px)", { 
<script type="text/javascript"> 
    match : function() { 
     $("body").load(
      "/path/headernav-phone.php" 
     ); 

    unmatch : function() { 
      $("body").load(
      "/path/headernav-desktop.php" 
     ); 
    } 
} 

Таким образом, когда размер экрана попадает 1080px, Wordpress должен загружать headernav-phone.php , который содержит только вызов wp_nav_menu (MOBILE). Если размер экрана больше, Wordpress загружает headernav-desktop.php, который включает wp_nav_menu (DESKTOP).

Это не работает:

Fatal error: Call to undefined function wp_nav_menu() in /XX/YYY/ZZZ/webseiten/XXX.YY/wp-content/themes/MyTheme/templates/headernav-phone.php on line 14

Похоже, что мой код выполняется перед CMS, и он ломает свои функции.

+0

Вы enqueuing enquire.js в нижнем колонтитуле? или загружается ли он до метки ? – BenRacicot

+0

Atm помещается в раздел главы через wp_enqueue_script –

+0

Какая версия WP? Вы пытались отключить плагины по одному, проверяя ошибку? – BenRacicot

ответ

1

ИМО, логика ошибочна.
Для одного, there's no way to detect the screen width with PHP.

Во-вторых, если вы должны были сгенерировать PHP -> JS-файл (my-script.js.php), you'd have to load WordPress engine two times.
Ответ на эту ссылку: super-pro. Вы найдете более простые методы, которые используют wp-load.php и WP_USE_THEMES.

В-третьих, как вы пытаетесь загрузить шаблон темы потребует от «нагрузки в два раза» подход. Или solving it with AJAX и wp_localize_script.

Если я правильно понял вопрос, я думаю, что лучше всего использовать WordPress user-agent detection и enqueue your scripts and styles соответственно. Изучите core function, чтобы адаптироваться к вашим потребностям.

[обновление]

До сих пор не уверен, что если вся эта сложность действительно необходимо. Будет что-то вроде этой работы в общем header.php?

if(wp_is_mobile()) 
    wp_nav_menu(MOBILE); 
else 
    wp_nav_menu(DESKTOP); 

Но, если вам действительно нужно это изменение произойдет динамически, то AJAX будет выбор.

+0

Спасибо, Брашофило, вы тоже отвечаете на звуки. Кажется, что atm нет «чистого» способа тестирования window.size, чтобы затем вызвать оптимизированную wp-функцию (например, wp_menu в моем случае). В этом случае запросы CSS-медиа остаются единственным способом? –

+1

Ну, я многому научился у этого волшебника;) У меня действительно нет точного ответа, поскольку я не понимаю, что вам нужно загрузить в какой момент. Что содержит 'headernav-phone.php'? Это простой 'wp_nav_menu (MOBILE)'? Нужно ли загружать определенные файлы CSS и JS? Если возможно, [добавить дополнительные сведения] (http://stackoverflow.com/posts/18435815/edit) к Вопросу. – brasofilo

+0

Вы правы, я обновил код со всеми подробностями. –

 Смежные вопросы

  • Нет связанных вопросов^_^