无需修改核心文件的 Wordpress 管理员自定义

Wordpress Admin Customization Without Core File Modification

我在标题字段中添加了字数显示,类似于编辑post时的body字段(不要问我为什么,这是客户要求)。我已经开始工作了

现在我已经开始工作了,我的问题是如何让新的 javascript 代码存在于这些文件之外,这样它们就不会在升级时被清除?我已经创建了一个自定义 .js 文件并将其放入我的函数文件中,但我无法让它以相同的方式工作。该文件确实已加载,但如果我写的新 javascript 不在原始文件中,事情就无法正常工作。这可能只是我对 javascript 的有限了解,但我希望将此工作与 wordpress javascript 文件分开。

这是有效的 post.js 字数统计 javascript(首先是原始函数,其次是我复制的函数),它负责重新计算击键时的字数。注意:我还在代码中将 "ti" 变量设置得更高,其中 "co" 设置为标题字段。

// Original 'body' word count

    if ( typeof(wpWordCount) != 'undefined' ) {
        $document.triggerHandler('wpcountwords', [ co.val() ]);

        co.keyup( function(e) {
            var k = e.keyCode || e.charCode;

            if ( k == last )
                return true;

            if ( 13 == k || 8 == last || 46 == last )
                $document.triggerHandler('wpcountwords', [ co.val() ]);

            last = k;
            return true;
        });
    }


// Word count for Title
if ( typeof(wpWordCount_title) != 'undefined' ) {
    $document.triggerHandler('wpWordCount_title', [ ti.val() ]);

    ti.keyup( function(e) {
        $document.triggerHandler('wpWordCount_title', [ ti.val() ]);
        var k = e.keyCode || e.charCode;

        if ( k == last )
            return true;

        if ( 13 == k || 8 == last || 46 == last )
            $document.triggerHandler('wpWordCount_title', [ ti.val() ]);

        last = k;
        return true;
    });
}

这是我的 duplicated/tweaked 函数,用于 word-count.js,它实际处理单词计数。

var wpWordCount_title;
! function (a, b) {
    wpWordCount_title = {
        settings: {
            strip: /<[a-zA-Z\/][^<>]*>/g,
            clean: /[0-9.(),;:!?%#$¿'"_+=\/-]+/g,
            w: /\S\s+/g,
            c: /\S/g
        },
        block: 0,
        wc: function (c, d) {
            var e = this,
                f = a(".title-word-count"),
                g = 0;
            d === b && (d = wordCountL10n.type), "w" !== d && "c" !== d && (d = "w"), e.block || (e.block = 1, setTimeout(function () {
                c && (c = c.replace(e.settings.strip, " ").replace(/ | /gi, " "), c = c.replace(e.settings.clean, ""), c.replace(e.settings[d], function () {
                    g++
                })), f.html(g.toString()), setTimeout(function () {
                    e.block = 0
                }, 2e3)
            }, 1))
        }
    }, a(document).bind("wpWordCount_title", function (a, b) {
        wpWordCount_title.wc(b)
    })
}(jQuery);

我建议使用名为 Add Admin JavaScript 的插件。这使您可以轻松地将 JS 添加到每个管理页面,并且您可以使用文件或内联 JS。

我建议编写一个修改管理界面的插件,而不是修改 WordPress 核心,将其包含在主题中,或使用第三方插件。在您的插件中使用 admin_enqueue_scripts add_action,如下所示在管理员中加载您的脚本。

function load_custom_wp_admin_script() {
    wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'myscript.js' );
}
add_action( 'admin_enqueue_scripts', 'load_custom_wp_admin_script' );

你应该检查这个 page in the WordPress Codex