Почему мой хук script_loader_tag на самом деле не меняет тип скрипта? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть плагин Wordpress, который отображается как метабокс на странице редактирования сообщения, который я пишу, который должен вызывать сценарии как пользовательских HTML элементов, так и модулей. Однако, когда я просматриваю исходный код, скрипты, которые должны отображаться как type="module", отображаются только как type="text/javascript". Мой код:

function meta_box_setup() {
    add_action( 'add_meta_boxes', __NAMESPACE__ . '\add_meta_box' );
    add_action( 'save_post', __NAMESPACE__ . '\save_meta_box_data', 10, 2 );

    wp_register_script('Module1','/wp-content/plugins/my-plugin/js/model/module1.js');
    wp_register_script('Module2','/wp-content/plugins/my-plugin/js/module2.js', array('Module1'));
    wp_register_script('Module3','/wp-content/plugins/my-plugin/js/Controller/module3.js', array('Module1','Module2'));
    add_action( 'admin_enqueue_scripts', function () {
        wp_enqueue_script('Module1');
        wp_enqueue_script('Module2');
        wp_enqueue_script('Module3');
    });
    add_filter('script_loader_tag', 
        function ($tag, $handle, $src) {
            if (( 'Module3' !== $handle ) || ('Module1' !== $handle) || ('Module2' !== $handle)) {
                return $tag;
            }
            $tag = '<script type="module" src="' . $src . '"></script>';
            return $tag;
    }
    , 10, 3);


    add_action( 'admin_enqueue_scripts', function () {
        error_log("inside the scripts callback");
        wp_enqueue_script('Element1','/wp-content/plugins/my-plugin/js/element1.js');
        wp_enqueue_script('Element2','/wp-content/plugins/my-plugin/js/element2.js');
        wp_enqueue_script('Element3','/wp-content/plugins/my-plugin/js/element3.js');
        wp_enqueue_script('Element4','/wp-content/plugins/my-plugin/js/element4.js');
    });
}

Я пытался основывать свой код на на этом , но безрезультатно. Как я могу заставить модули отображаться как type = 'module'?

1 Ответ

1 голос
/ 29 мая 2020

Ваш логический лог c для досрочного возврата должен либо использовать &&, либо продолжать использовать ||, но использовать это для изменения тега:

<?php
add_filter('script_loader_tag',
    function ($tag, $handle, $src) {
        if (('Module3' === $handle) || ('Module1' === $handle) || ('Module2' === $handle)) {
            $tag = '<script type="module" src="' . $src . '"></script>';
        }

        return $tag;
    }
    , 10, 3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...