将 Wordpress 从 3.2 升级到 3.5 后,我在管理端收到 jQuery 错误。下面是错误。
Error: ReferenceError: tinyMCE is not defined
Source File: http://domainname.com/wp-includes/js/tinymce/langs/wp-langs-en.js?ver=345-20111127
任何人都可以在这里帮助我。谢谢
最好使用声明:
define('CONCATENATE_SCRIPTS', false);
在wp-config.php
.
在阅读了一百万篇关于关闭所有内容、重新安装所有内容、在键盘上挥舞鸡骨头以及在肩膀上撒盐的帖子后,我决定认真起来。
tinyMCE 没有定义就是这个意思。假设:它从未被加载。检查 http://yourdomain.com/wp-includes/js/tinymce/tiny_mce.js?ver=359-20131026'> 或 tiny_mce.js 的其他脚本标记的页面源。我敢打赌你没有。如果你这样做,这不是你的解决方案。如果你不这样做,请继续阅读。
我在 ...\wp-includes\class-wp-editor.php 中找到了应该在页面中放置 js 标记的代码。
有一个 if 块 "if ( $compressed ) {..." 当 $compressed = 1,或 ...\wp-includes\js\tinymce\tiny_mce.js 当 $compressed = 0 时。所以我在 if 块之前设置 $compressed = 0 以强制执行 else。这解决了我的问题。
这是一个简单的解决方法,如果它不能解决您的问题,它很容易逆转,而不会冒破坏 WP 生态圈中其他任何东西的风险。
对于遇到这种情况并且有点想把头发拉出来的其他人,@dale3h 的回答是我的解决方案。
如果您的functions.php
which 中有一个函数与过滤器挂钩,script_loader_tag
并且并不总是返回原始标签标记的适当部分,或者其中存在某种错误,它可能会导致某些脚本无法加载,因为要输出脚本到页面首先通过这个过滤器。
我为避免这种情况所做的事情是将脚本句柄列入白名单,具体取决于我想赋予它们的额外属性,因此可以有条件地完成工作(保持所有其他脚本完好无损):
// Manage extra attibutes for enqueued scripts
function foo_script_extras( $tag, $handle, $src ){
$whitelist = array(
'js-font-awesome-core' => array(
'sri' => 'sha384-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'defer' => true
),
'js-font-awesome-light' => array(
'sri' => 'sha384-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'defer' => true
),
'js-popper' => array(
'sri' => 'sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ'
),
'js-bootstrap' => array(
'sri' => 'sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm'
),
'js-gtag' => array(
'async' => true
)
);
// Construct the script if we want to give it extra attributes
if( array_key_exists( $handle, $whitelist ) ){
// Extra markup
$extra = '';
$mods = $whitelist[$handle];
// Check for SRI
if( array_key_exists( 'sri', $mods ) ){
$extra .= ' integrity="' . $mods['sri'] . '" crossorigin="anonymous"';
}
// Check for deferral
if( array_key_exists( 'defer', $mods ) ){
$extra .= ' defer';
}
// Check for async
if( array_key_exists( 'async', $mods ) ){
$extra .= ' async';
}
// Reutrn full script tag
return '<script src="' . $src . '"' . $extra . '"></script>';
}else{
// Return the tag as-is otherwise to avoid breaking it
return $tag;
}
}
add_filter( 'script_loader_tag', 'foo_script_extras', 10, 3 );
在检查要添加到白名单句柄的属性方面,这不是一个非常通用的解决方案,我会使用类似“对于白名单句柄的每个属性,如果它是布尔值并且为真则添加键,否则添加它的价值”,但 SRI 需要两个属性(完整性和跨域),所以我暂时离开了它。
此外,如果您/wp-includes/js/tinymce/
在页面标记中看不到某处(类似于@Mar 所说的,但确切的脚本名称可以在不同版本之间更改),那么该脚本不会加载!
在我的情况下,禁用我所做的延迟 javascript 增强功能会functions.php
导致此错误在加载编辑页面时消失。