【问题标题】:Wordpress Admin Customization Without Core File Modification无需修改核心文件的 Wordpress 管理员自定义
【发布时间】:2015-06-28 17:36:36
【问题描述】:

我正在向标题字段添加字数显示,类似于编辑帖子时的正文字段(不要问我为什么,这是客户请求)。我已经成功了

  • 通过连接到“edit_form_after_title”来显示计数
  • 编辑 word-count.min.js 并为我的新计数器元素复制代码
  • 编辑 post.min.js 并复制触发器处理程序以更改字数的值(在 post.js 第 960 行附近搜索 // 字数)

既然我已经让它工作了,我的问题是如何让新的 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;
    });
}

这是我的 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);

【问题讨论】:

    标签: javascript jquery wordpress admin word-count


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我建议编写一个插件来修改管理界面,而不是修改 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

      【讨论】:

      • 是的,我确实做到了这一点。我的问题是我似乎无法让相同的脚本在我让它们在核心文件中工作的方式之外工作。
      • 您是否在管理员中检查以确保您的 Javascript 文件正在加载和触发?
      • 是的,它正在脚本中加载。这是我在我的 js 文件中得到的内容:codepen.io/anon/pen/KpKdRv 我不能在这个回复中输入超过 500 个字符,所以我把它放在了 codepen 上。在文档就绪函数中,它显示 'if (typeof (wpWordCount_title) != 'undefined') { alert("got it!");'这就是我正在测试的地方,看看它是否走得那么远,但事实并非如此。如果我将警报代码放在 if 语句之外,则会出现警报。
      • 如果您没有收到任何错误,并且在此之前的所有内容都可以正常处理。然后,由于该文件存在于 WordPress 核心之外的情况,该 if 语句必须以某种方式解析为 false。与 if 语句相反,它位于核心 WordPress 文件中,它解析为 true。 $document 可能是问题的一部分吗?尝试在 if 语句之外记录 $document 属性,看看它会吐出什么。
      • 能够使用 admin_enqueue_scripts 钩子加载 js。一旦它被加载到其他页面之外,我就遇到了一些关于 jQuery 的错误。
      猜你喜欢
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2019-11-26
      • 2014-09-15
      相关资源
      最近更新 更多