Некоторые плагины используют 'template'
, 'option_template'
и 'option_stylesheet'
для динамического обслуживания (альтернативных) шаблонов WordPress. Например, Натан Райс ServeDefaultToIESix
. Например —
add_filter('template', 'change_theme');
add_filter('option_template', 'change_theme');
add_filter('option_stylesheet', 'change_theme');
function change_theme()
{
// Alternate theme
return 'AwesomeTheme';
}
Приведенный выше код работает только с плагином WordPress. Что мне нужно, так это переключиться на альтернативный шаблон, расположенный в одной из подпапок текущей темы (шаблона). Примеры: отображать альтернативную тему HTML5, предоставлять мобильным пользователям минимальную версию сайта и т. д.
Я попытался использовать «theme_root» и «theme_root_uri», как показано ниже. Но это не работает.
// Extra lines to change the theme's root.
add_filter('theme_root', 'change_theme_root');
add_filter('theme_root', 'change_theme_root_uri');
//
add_filter('template', 'change_theme');
add_filter('option_template', 'change_theme');
add_filter('option_stylesheet', 'change_theme');
function change_theme()
{
// Display Alternate theme
return 'AwesomeTheme';
}
function change_theme_root()
{
// Return the new theme root
return WP_CONTENT_DIR . 'themes/OrigTheme/lib/AltThemes';
}
function change_theme_root_uri()
{
// Return the new theme root uri
return get_bloginfo('wpurl') . '/wp-content/themes/OrigTheme/lib/AltThemes';
}
Это правильный способ сделать это? Или кто-нибудь знает о возможных способах сделать это? Заранее спасибо.
Как определить, с каких устройств пользователи получают доступ к вашему блогу?
Это делается с помощью скриптов PHP, JS и строки пользовательского агента. Обнаружение браузера PHP поддерживается обнаружением объекта JS (поскольку пользовательский агент ненадежен, а обнаружение браузера не рекомендуется).
Спасибо. Дополнительный вопрос: рекомендуется ли использовать OO php для большей части кода тем WordPress?
@OpenOne Да, ООП — это хорошая практика. У меня есть несколько классов в моей структуре, которые генерируют мою базу при инициализации. Расширение легко, если мне нужны некоторые дополнения для конкретной темы, и мне не нужно заботиться о написании базовой функциональности снова и снова (возможность повторного использования). Кроме того, классы легче переносятся и сохраняют чистоту пространства имен. Я использую публичные функции только для тегов шаблона. И большинство тегов шаблона не делают ничего, кроме вызова функций класса.
Спасибо. Я думаю о расширении текущих объектов для документов устройств (настольных/мобильных) и настроек (HTML4/5). Я хотел бы использовать классы для вывода всего. Результат выглядит очень чистым, но я не уверен, что делаю его слишком сложным (для пользователя).
@OpenOne Взгляните на это: sencha.com/products/touch — это бесплатно для разработчиков и выглядит неплохо. Если вы хотите, чтобы я взглянул, я дам вам свой адрес электронной почты, и вы можете отправить его мне.
Вы также можете написать свою собственную простую функцию псевдонима get_template_part:
Следующее позволяет использовать 3 подпапки для частей шаблона, которые находятся в корневой папке темы с именем devices.
Не стесняйтесь добавлять условное обнаружение устройства по адресу:
https://gist.github.com/886501.