Intereting Posts
Как запросить мои сообщения WordPress на другой странице HTML с помощью WordPress Restful API? Петля внутри цикла (снова) для шаблона Скрыть цены и функции проверки в woocommerce Плагин Добавляет уродливую строку url в индекс Проверьте, есть ли в текущей категории дети Как вернуть несколько аргументов из функции обратного вызова AJAX Практическое руководство. Проверка глобальных переменных в WordPress Добавление функции виджета в файл темы php Проверьте, существует ли проблема на странице Каков правильный способ использования wp_enqueue_script / style? Тема Divi: изменить цвет наложения по умолчанию от синего до черного Изменение постоянной ссылки WordPress заставляет все входящие ссылки давать 404 ошибки Как я могу назначить отдельные таблицы стилей для разных страниц? Проверка данных: всегда избегать позднего / выходного кода HTML Количество слов неточно – потенциальная ошибка

Использование классов вместо глобальных функций в functions.php

Во многих темах, которые я видел (в том числе TwentyEleven), и в примерах, которые я нашел в Интернете, при создании файла functions.php для темы вся функциональность объявляется в глобальной области. Чтобы прояснить это, выглядит типичный файл функций:

 function my_theme_do_foo() { // ... } function my_theme_do_bar() { // ... } add_action( 'foo_hook', 'my_theme_do_foo' ); 

Мне казалось, что вещи могут быть «инкапсулированы» немного лучше, если класс был использован:

 class MyTheme { function do_foo() { // ... } function do_bar() { // ... } } $my_theme = new MyTheme(); add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) ); 

Преимущества второго подхода (в моих скромных глазах):

  • Более короткие имена функций
  • Доступ к переменным экземпляра (самое большое преимущество ИМО)
  • Нет глобальных функций

Недостатки:

  • Имя класса все равно может вызвать конфликты
  • Не так ясно, как «настроить» с дочерней темой (нужно было бы расширить родительский класс)
  • Большинство тем не сделали этого таким образом, так что вы будете раскручивать тренд

Я, вероятно, не замечаю некоторые вещи, но мне интересно, почему бы не принять подход ООП? Он чувствует себя немного «чище» для меня, во всяком случае. Может, я ошибаюсь?

Я довольно новичок в разработке темы WordPress, поэтому простите меня, если это общеизвестно в сообществе WP :). Просто пытаюсь понять, почему все так, как есть.

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

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

Мы не делаем этого по умолчанию для тем WordPress, потому что это создает барьер для входа. Функции довольно просты. Удаление действий, связанных с классами, может быть затруднительным (и, возможно, ошибкой при определенных обстоятельствах).

Кроме того, ряд функций в стандартах по умолчанию можно подключить. Расширение класса и замена методов намного сложнее, чем просто определение функции. И хотя два разных аспекта кода могут заменять разные функции, вы не можете динамически расширять классы. Как вы указали, необходимость расширения родительского класса определенно является недостатком.

Я подумал о том, чтобы сделать код темы темы Twenty Eleven классом, но так и не добрался до него. Такая отдельная плагин-подобная функциональность кажется хорошим кандидатом на инкапсуляцию.