Intereting Posts
Запрос несколькими мета элементами, которые, похоже, не работают – wordpress – это тайм-аут multisite htaccess 301 перенаправления создать страницу, которая отображает список категорий title + короткое описание? Как получить переменные $ _GET из переписанных URL-адресов? Проблема добавления класса has-children в wp_nav_menu Условный тег на основе даты Простой способ получить два языка WP сайта Почему формат перманентного месяца и имени не работает на моем новом сайте WordPress (работает на IIS7)? Добавление данных в массив в usermeta и отображение его в цикле Когда мне нужно использовать esc_attr при использовании внутренних функций WordPress Удалить настройки, если тема удалена? Количество сообщений или пользовательских типов сообщений за последние 24 часа (или с сегодняшнего дня) Как анализировать результаты строки из $ wpdb -> get_results Пользовательские сообщения с определенным html Почему wp_get_attachment_image_src не работает с моим пользовательским размером (add_image_size)

Использование функций / методов плагина в шаблонах

Я создал плагин с использованием различных классов. Я хочу иметь доступ к методам на нескольких разных классах из шаблонов страниц моей настраиваемой темы. Метод, который я сейчас использую, заключается в создании статических методов, но мне интересно, если это лучший способ сделать это?

Примером может быть класс с методом, который проверяет, зарегистрирован ли пользователь и какова его роль пользователя. Назовем класс Plugin_Access и метод has_access() ;

Предположим, мне нужно настроить контент в заголовке, шаблоне страницы и нижнем колонтитуле, используя операторы if (), основанные на has_access() . Для этого я бы использовал if( Plugin_Access::has_access() ) . Мне кажется, что это не самое чистое решение. Я по сути вызываю тот же метод и получаю тот же результат 3 раза. Если бы у него был вызов базы данных в рамках метода, это было бы 3 вызова, а не 1.

Одним из решений, о котором я думал, было сделать класс singleton и сохранить результат функции в переменной внутри класса. Затем этот метод будет проверять эту переменную, а если она null , то заполните оставшуюся часть метода, иначе просто верните сохраненную переменную.

Я чувствую, что я определенно чего-то не хватает. Спасибо в продвинутый для любого совета.

Solutions Collecting From Web of "Использование функций / методов плагина в шаблонах"

Преждевременная оптимизация – это корень всего зла (нормально, трата времени программирования). Почему вам было бы интересно, сколько раз функция называется? это не похоже на то, что память или процессор становятся «слабее», злоупотребляя им.

Более важно, чтобы код, который вы производите, должен был самостоятельно документировать как можно больше, чем выполнять микрооптимизацию, и если это означает 3 вызова вместо одного, то пусть будет так.

Если у вас есть фактическая проблема с производительностью, потому что функция выполняет некоторые тяжелые / медленные вычисления, ответ заключается в том, чтобы «внутренне» кэшировать тяжелые / медленные части.

Замечание 1. Используйте API WordPress, не перерабатывайте колеса, если вы не исследовали и не нашли другого способа, поскольку WordPress сделает много кеширования для вас, и ваш доступ к 3 БД в действительности будет только одним в любом случае.

Замечание 2. Синглтоны – это редко ООП, и вам будет намного легче читать и манипулировать кодом, особенно в контексте WordPress, если вы просто избегаете классов и используете пространства имен в первую очередь.

Как вы поняли, это зависит от того, что будет делать ваш метод.

Если метод должен проверить БД, чтобы определить, какое логическое значение нужно вернуть, например, проверить параметр, затем сохранить его значение в свойстве при гидратации или в первый раз, когда вы вызываете метод. Обратите внимание, что WP кэширует результаты запроса, такие как get_option() , get_post_meta() и т. Д. Итак, в таких случаях я не думаю, что было бы полезно …
В противном случае вызовите его таким образом в своем шаблоне, не сохраняя его в свойстве.

Если метод должен вернуть результат запроса БД, то вместо этого естественно сохранять результат как свойство объекта модели домена , который по определению не должен быть одиночным.
В WP WP_Post является примером класса модели домена. Как вы можете видеть, $post->title возвращает результат запроса.
Вы инициализируете объект модели домена.