Между functions.php, виджетами и плагинами, который загружается первым?

77

Клиент спрашивает, может ли конкретный плагин карусели, который он использует, быть виджетизирован. Это означает, что я должен создать виджет внутри functions.php, который вызывает функцию плагина. Это означает, что код плагина должен быть загружен первым, чтобы функция была доступна WordPress при загрузке файла functions.php, верно? Будет ли это работать?

pixeline
источник

Ответы:

184

Плагины загружаются прямо перед темой (да, я искал оправдание для использования этого):

введите описание изображения здесь

Тем не менее, это неверно рассматривать как точку выполнения кода. В большинстве случаев все должно быть подключено и выполнено не раньше, чем inithook. В соответствии с Кодексом регистрация виджета с register_widget()должна быть подключена к widget_init.

Из-за того, что порядок загрузки не имеет значения для этого случая, у вас будет все загружено к тому времени, когда виджет нуждается в этом в любом случае.

Rarst
источник
3
Загрузка ядра WP никогда не будет иметь никакого смысла.
gagarine
7
Есть ли шанс, что мы сможем получить обновленный график в 2016 году? ;-)
jgraup
9
@jgraup вы говорите, что все меняется в ядре WordPress ... :)
Rarst
1
@Rarst, touché ;-)
jgraup
2
@IsaacLubow: да, вещи в более чем одном столбце выполняются для этих соответствующих контекстов, так как вы можете видеть, что один и тот же значительный кусок нагрузки на ядро ​​всегда задействован для любого запроса.
Rarst
16

Одним интересным подходом было бы перечисление всех хуков к файлу в последовательности выполнения.

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "\n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

И вы получите вывод, как это:

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown

Обратите внимание, что полный список просто не может соответствовать ограничению в 30 000 символов на пост WPSO, поэтому я удалил много хуков действий.

Поместите приведенный выше код в плагин. Если вы сделаете это из тем, functions.phpвы не поймаете plugins_loaded. Еще одно доказательство того, что плагины загружаются перед темой.

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

Я просто назвал это со /?p=1страницы Hello World.

Если у вас не активирован ни один плагин, вы можете поместить этот код в mu-pluginsпапку.

Может быть, лучше использовать WP FS API , но этот способ очень лаконичен.

прости
источник
Внутри плагины wp-admin загружаются после темы или в порядке установки ... и в плагинах переднего плана загружаются до темы ...
Вишал Кумар Саху
3

Вы можете иметь виджет внутри .php файла плагина (и иметь общую глобальную переменную, которую они оба могут использовать), если это то, что вы спрашиваете. Вот учебник с примером кода, на который я наткнулся некоторое время назад.

Кроме того, вот список действий, выполняемых во время типичного запроса , в порядке их выполнения. # 2 и # 10 предполагают, что плагины загружаются первыми; не уверен насчет functions.php.

montrealist
источник
1
Правильно, плагины загружаются перед файлами тем. Если плагин содержит код, но не нужный вам виджет, можно определить виджет в functions.php вашей темы.
золотые яблоки