Між function.php, віджетами та плагінами, що завантажується спочатку?


78

Клієнт запитує, чи може конкретний плагін, який він використовує, змінено. Це означає, що я повинен створити віджет всередині function.php, який викликає функцію плагіна. Це означає, що код плагіна повинен бути завантажений спочатку, щоб функція була доступна WordPress при завантаженні файлу function.php, правда? Це би спрацювало?

Відповіді:


185

Плагіни завантажуються безпосередньо перед темою (так, я шукав приводу, щоб використовувати це):

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

Однак неправильно думати про це як про точку виконання коду. У більшості випадків все повинно бути зачеплене і виконане не раніше, ніж initгак. Відповідно до реєстрації віджетів Codex, з якими register_widget()слід підключити widget_init.

Через те, що порядок завантаження для цього випадку не має значення, ви матимете все, завантажене тим часом, віджет якого потребує в будь-якому випадку.


3
Навантаження ядра WP ніколи не матиме сенсу.
гагарин

7
Чи є шанс отримати оновлений графік у 2016 році? ;-)
jgraup

9
@jgraup ви говорите, що подібні речі змінюються в ядрі WordPress ... :)
Рарст

1
@Rarst, touché ;-)
jgraup

2
@IsaacLubow так, речі, що містяться в декількох стовпцях, працюють у відповідних контекстах, оскільки ви бачите, що для будь-якого запиту завжди береться однакова значна частина завантаження ядра.
Рарст

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 або Hello World.

Якщо у вас немає активованого жодного плагіна, ви можете помістити цей код у mu-pluginsпапку.

Можливо, краще використовувати API WP FS , але цей спосіб справді короткий.


Вбудовані додатки wp-admin завантажуються після теми або в порядку встановлення ... а в передній частині плагіни завантажуються перед темою ...
Vishal Kumar Sahu

3

Ви можете мати віджет всередині .php-файлу плагіна (і мати спільну глобальну змінну, яку вони можуть обидва використовувати), якщо це те, що ви запитуєте. Ось підручник із зразком коду, який я натрапив на деякий час назад.

Також ось список дій, які виконуються під час типового запиту , у порядку виконання. №2 та №10 пропонують, що плагіни спочатку завантажуються; не впевнений у function.php.


1
Правильно, додатки завантажуються перед файлами тем. Якщо плагін включає код, але не потрібний віджет, можна визначити віджет у функції вашої теми.php.
goldenapples
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.