TL;博士,代码在底部。
好的,这应该对你有用,但这是测试版。它对我很有效,但我还没有做过任何严格的测试。有一点,它不会连续输出四个
实体;它会口吃
[space]
[space]
, 但至少在视觉和视觉之间来回切换时,它保持了原样;文本模式。它只在视觉模式下工作,我还没有花时间去弄清楚如何在文本模式下工作。
它有两个文件,根据您的需要命名。我用了富有想象力的名字:4Spaces:)TinyMCE按钮位于编辑器最右侧的第一行。对于不存在的图像,它将显示您的浏览器所显示的任何风格。这在4空间中很容易改变。js,第8行:
image : url + \'/\' + \'YOUR_IMAGE_HERE.png\'
在此处更改\'YOUR\\u IMAGE\\u\'。相对于这两个文件,png\'到您的图像文件,或使用如下绝对URI:
image : \'/path/to/image/YOUR_IMAGE_HERE.png\'
或
image : \'http://example.com/path/to/image/YOUR_IMAGE_HERE.png\'
我在整个PHP中都发表了评论和/或留下了一些现有的评论,JavaScript评论很少。您将在PHP标题部分看到PHP代码的来源,以及JavaScript的起源。
PHP标题中列出了两个值得注意的学分:this WordPress.SE Answer 这提供了阻止TinyMCE(或WordPress,不确定是哪个)删除空格的代码,以及@Alexey在之前的回答中提供的链接,虽然这并不重要,但帮助我偶然发现了JS解决方案。
我无法在中生成代码that link 工作,但最终还是回来了,并找到了将这一切结合在一起的金块(当然还有一些调整)。
我想这就是一切的总结。代码如下:
4空间。php
<?php
/* Plugin Name: 4Spaces
* Version: 0.1.0
* Author: AK Ted
* Author URI: http://akted.com
* License: GPLv2 or later
*
*
* PHP code adapted & refined from the following two sources:
* WordPress Codex - http://codex.wordpress.org/TinyMCE_Custom_Buttons#Loading_a_TinyMCE__Plugin
*
* WordPress Answers (Stack Exchange) - https://wordpress.stackexchange.com/questions/54398/how-can-i-stop-tinymce-from-converting-my-html-entities-to-characters#answer-54480
*
*
* The JavaScript arose from a lot of trial-and-error, with code [beat into submission...er, I mean] inspired by both of the following sources:
* tinymce wiki - http://www.tinymce.com/wiki.php/Creating_a_plugin
* &
* brett terpstra - http://brettterpstra.com/2010/04/17/adding-a-tinymce-button/
*
*/
new akt_4spaces();
class akt_4spaces {
function __construct() {
add_action(\'admin_init\', array($this, \'init\'));
} // function __construct
// callback for init
// sets all the hooks only if user has capability & rich_editing is true
function init() {
// Don\'t bother doing this stuff if the current user lacks permissions
if ( ! current_user_can(\'edit_posts\') && ! current_user_can(\'edit_pages\') ) {
return;
}
// Add only in Rich Editor mode
if ( get_user_option(\'rich_editing\') == \'true\') {
add_filter(\'mce_buttons\', array($this, \'add_button\'));
add_filter(\'mce_external_plugins\', array($this, \'add_tinymce_plugin\'));
add_filter(\'tiny_mce_before_init\', array($this, \'preserve_entities\'));
}
} // function init
// callback for mce_buttons filter
// adds button to TinyMCE
function add_button($buttons) {
array_push($buttons, \'separator\', \'four_spaces\');
return $buttons;
} // function add_button
// callback for mce_external_plugins filter
// attaches the JavaScript file to TinyMCE
function add_tinymce_plugin($plugin_array) {
$plugin_array[\'four_spaces\'] = plugins_url(\'/\', __FILE__) . \'4spaces.js\';
return $plugin_array;
} // function add_tinymce_plugin
// callback for tiny_mce_before_init
// stops TinyMCE (WordPress?) from automatically converting entities
function preserve_entities( $initArray ) {
// The odd entries are the entity *number*, the even entries are the entity *name*. If the entity has no name,
// use the number, prefixed with a hash (for example, the service mark is "8480,#8480").
$initArray[\'entities\'] = \'160,nbsp,\' . $initArray[\'entities\'];
return $initArray;
} // function preserve_entities
} // class akt_4spaces
4空格。js公司
(function() {
tinymce.create(\'tinymce.plugins.four_spaces\', {
init : function(ed, url) {
// Register four_spaces button
ed.addButton(\'four_spaces\', {
title : \'4Spaces\',
image : url + \'/\' + \'YOUR_IMAGE_HERE.png\',
onclick : function() {
ed.execCommand(
"mceInsertContent",
false,
" "
);
}
});
}
});
// Register plugin
tinymce.PluginManager.add(\'four_spaces\', tinymce.plugins.four_spaces);
})();
编辑:我忘了提一下,对于那些不知道的人,把这两个文件都放在
/wp-content/plugins/
(默认路径)。它应该看起来像/wp-content/plugins/4spaces/或任何你决定叫它的名字,然后在Admin中激活它。
P、 我对OOP比较陌生,所以欢迎任何人对我的回答提出批评和建议。