Действие подключено к wp_enqueue_scripts, выполняющимся дважды - PullRequest
0 голосов
/ 11 февраля 2020

Я отключил все плагины на моем WordPress и сохранил только мою очень простую активную тему. О функциях. php Я позволил запустить следующий код:

add_action( 'wp_enqueue_scripts', function() {
    // Omitted some code - Here I just call a custom function to print logs
    wp_debug_backtrace_summary(); // Just indicating that I call this function on log

    // The script exists and is correctly added to the frontend
    wp_enqueue_script( 'main-script', get_stylesheet_directory_uri() . '/assets/js/scripts.js', array('jquery'), '1.0', true );
}, 101 );

В журнале получаю, что эта функция запускается дважды - вы можете видеть выше две полезные нагрузки из wp_debug_backtrace_summary():

[2020-02-10 20:58:37 - ...\wp-content\themes\storms-theme\services\storms-assets.php at "backtrace" on line 42] 
    == Funcao de teste ===================================
    Array
(
    [0] => StormsFramework\Helper::backtrace
    [1] => {closure}
    [2] => WP_Hook->apply_filters
    [3] => WP_Hook->do_action
    [4] => do_action('wp_enqueue_scripts')
    [5] => wp_enqueue_scripts
    [6] => WP_Hook->apply_filters
    [7] => WP_Hook->do_action
    [8] => do_action('wp_head')
    [9] => wp_head
    [10] => require('/themes/storms-theme/template-parts/head.php')
    [11] => load_template
    [12] => locate_template
    [13] => get_template_part
    [14] => require_once('/themes/storms-theme/header.php')
    [15] => load_template
    [16] => locate_template
    [17] => get_header
    [18] => include('/themes/storms-theme/page.php')
    [19] => require_once('wp-includes/template-loader.php')
    [20] => require('wp-blog-header.php')
)


=====================================================================

[2020-02-10 20:58:37 - ...\wp-content\themes\storms-theme\services\storms-assets.php at "backtrace" on line 42] 
    == Funcao de teste ===================================
    Array
(
    [0] => StormsFramework\Helper::backtrace
    [1] => {closure}
    [2] => WP_Hook->apply_filters
    [3] => WP_Hook->do_action
    [4] => do_action('wp_enqueue_scripts')
    [5] => wp_enqueue_scripts
    [6] => WP_Hook->apply_filters
    [7] => WP_Hook->do_action
    [8] => do_action('wp_head')
    [9] => wp_head
    [10] => require('/themes/storms-theme/template-parts/head.php')
    [11] => load_template
    [12] => locate_template
    [13] => get_template_part
    [14] => require_once('/themes/storms-theme/header.php')
    [15] => load_template
    [16] => locate_template
    [17] => get_header
    [18] => include('/themes/storms-theme/index.php')
    [19] => require_once('wp-includes/template-loader.php')
    [20] => require('wp-blog-header.php')
)

Я замечаю, что элемент 18 на обеих трассировках различен:

[18] => include('/themes/storms-theme/page.php')
[18] => include('/themes/storms-theme/index.php')

Если я прокомментирую строку кода, которая ставит в очередь скрипт wp_enqueue_script( 'main-script', ... ) Получаемая полезная нагрузка говорит, что моя функция запускается только один раз!

[2020-02-10 21:13:21 - ...\wp-content\themes\storms-theme\services\storms-assets.php at "backtrace" on line 42] 
    == Funcao de teste ===================================
    Array
(
    [0] => StormsFramework\Helper::backtrace
    [1] => {closure}
    [2] => WP_Hook->apply_filters
    [3] => WP_Hook->do_action
    [4] => do_action('wp_enqueue_scripts')
    [5] => wp_enqueue_scripts
    [6] => WP_Hook->apply_filters
    [7] => WP_Hook->do_action
    [8] => do_action('wp_head')
    [9] => wp_head
    [10] => require('/themes/storms-theme/template-parts/head.php')
    [11] => load_template
    [12] => locate_template
    [13] => get_template_part
    [14] => require_once('/themes/storms-theme/header.php')
    [15] => load_template
    [16] => locate_template
    [17] => get_header
    [18] => include('/themes/storms-theme/page.php')
    [19] => require_once('wp-includes/template-loader.php')
    [20] => require('wp-blog-header.php')
)

Понятия не имею, что здесь не так. Почему работает дважды?

1 Ответ

0 голосов
/ 11 февраля 2020

Не используйте анонимную функцию для обратного вызова в wp_enqueue_scripts, и вы, вероятно, решите свою проблему.

Стандарты кодирования WP

Закрытия не должны передаваться как обратные вызовы фильтра или действия, так как они не могут быть удалены с помощью remove_action () / remove_filter ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...