Intereting Posts

Должен ли я использовать функции function_exists () и / или add_action () в разработке темы?

Я пытаюсь подготовить свою тему к публикации на WordPress.org

Я получил эту обратную связь:

function_exist () не предпочтительнее 3.0 дизайна

Теперь мне интересно, что я делаю неправильно.

В текущей структуре у меня есть:

functions.php :

 /* Load JBST functions on 'after_setup_theme'. */ add_action( 'after_setup_theme', 'jbst_theme_setup' ); if ( ! function_exists( 'jbst_theme_setup' ) ): function jbst_theme_setup() { /* Load custom Skematik header functions. */ require( get_template_directory() . '/functions/skematik-header-functions.php' ); //more code } 

/functions/skematik-header-functions.php определяет функцию типа:

 add_action( 'skematik_header', 'skematik_doc_type', 9 ); function skematik_doc_type() { ?> <!DOCTYPE html> <html <?php language_attributes(); ?>> <head> <meta charset="<?php bloginfo( 'charset' ); ?>" /> <meta name="viewport" content="width=device-width" /> <?php } 

В этом случае skematik_doc_type может быть удален с помощью remove_action но не может быть перезаписан, потому что он не завернут в function_exists() . Будет ли это проблемой?

Нужно ли обертывать все функции в function_exists() и добавлять их с помощью add_action ? Каковы правила использования function_exists() или нет?

Solutions Collecting From Web of "Должен ли я использовать функции function_exists () и / или add_action () в разработке темы?"

Не используйте function_exists() .

Технически ваш подход работает. На практике вы создаете проблемы в своем коде без каких-либо преимуществ.

  • Читаемость . Когда кто-то еще читает ваш код (например, вы , год спустя), первый вопрос будет: почему вы не знаете свой собственный код? Второй вариант, вероятно: ОК, где определена эта функция, как я могу определить, какой из них вызывается?

  • Взаимодействие . Когда я хочу заменить ваш код, я привязан к твоему имени. skematik_doc_type() – плохое имя для функции, которая выплевывает doctype . Я не могу заменить его на skematik_doctype() или метод класса.
    О, и вы не можете переименовать его, потому что код других людей может опираться на это имя.

  • Непоследовательное поведение .

    • Вы не можете повторно использовать такую ​​функцию, потому что никогда не знаете, что она может сделать или вернуться.
    • function_exists() ведет себя не так, как defined() , вы не можете return из файла, если функция возвращает true , потому что все остальные коды в этом файле будут проанализированы ранее. См. Комментарии в руководстве для примеров. Таким образом, вы не можете позже реорганизовать свою файловую структуру.

Использование function_exists() – это дизайнерское решение, как отметил Чип. Но очень плохо. Это не запрещено в руководящих принципах обзора темы, но это должно быть. Ядро WordPress не будет вводить более «подключаемые» функции по причинам, перечисленным выше.