TL;DR, код внизу.
Хорошо, это должно сработать для вас, но это бета-версия. У меня это работает, но я не проводил никаких строгих испытаний. Во-первых, он не выводит четыре последовательных [space]
entities; it does a stuttered
//load custom buttons class
require_once (TEMPLATEPATH . '/admin/class.new_tinymce_btn.php');
//create an instance of the class
$t = new add_new_tinymce_btn('|','nextpage',get_bloginfo('template_url').'/adminjs/buttons/spacebutton.js');
/images/btn_spacebutton.png
, but at least it keeps them as-is when switching back-and-forth between Visual & Text modes. It only works in Visual mode, I haven't taken the time to figure out how to make it work in Text mode.
Он поставляется в двух файлах, назовите их по своему усмотрению. Я использовал весьма образное название: 4Пространства. :) Кнопка TinyMCE находится в верхнем правом ряду редактора. Он покажет все, что показывает ваш браузер, для несуществующих изображений. Это легко изменить в 4spaces.js, строка 8:
(function() {
tinymce.create('tinymce.plugins.nextpage', {
init : function(ed, url) {
ed.addButton('nextpage', {
title : 'Space Button',
image : url+'/images/btn_spacebutton.png',
onclick : function() {
var prompt_text = " ";
var caret = "caret_pos_holder";
var insert = "<p>" + prompt_text + " </p> <span id="+caret+"></span>";
ed.execCommand('mceInsertContent', false, insert);
ed.selection.select(ed.dom.select('span#caret_pos_holder')[0]); //select the span
ed.dom.remove(ed.dom.select('span#caret_pos_holder')[0]); //remove the span
}
});
},
createControl : function(n, cm) {
return null;
},
});
tinymce.PluginManager.add('nextpage', tinymce.plugins.nextpage);
})();
Измените YOUR_IMAGE_HERE.png на файл изображения относительно двух файлов или используйте абсолютный URI, например:
spacebutton.js
или
adminjs/buttons
Я прокомментировал и/или оставил некоторые существующие комментарии по всему PHP, комментарии JavaScript редки. В разделе заголовка PHP вы увидите, откуда взялся код PHP, и вроде где возник JavaScript.
Две примечательные заслуги, обе перечислены в заголовке PHP: этот ответ WordPress.SE который предоставил код, который не позволяет TinyMCE (или WordPress, не знаю какой именно) удалять пробелы, а также ссылку, предоставленную в предыдущем ответе @Alexey, которая, хотя и не критична, помогла мне наткнуться на решение JS.
Я не смог внести код в эта ссылка работал, но в конце концов вернулся к этому и нашел самородок, который объединил все это воедино (конечно, с некоторыми изменениями).
Я думаю, что это подводит итог всему. Вот код:
4spaces.php
<?php
//wpex_37798_christine_cooper
//class start
class add_new_tinymce_btn {
public $btn_arr;
public $js_file;
/*
* call the constructor and set class variables
* From the constructor call the functions via wordpress action/filter
*/
function __construct($seperator, $btn_name,$javascrip_location){
$this->btn_arr = array("Seperator"=>$seperator,"Name"=>$btn_name);
$this->js_file = $javascrip_location;
add_action('init', array(&$this,'add_tinymce_button'));
add_filter( 'tiny_mce_version', array(&$this,'refresh_mce_version'));
}
/*
* create the buttons only if the user has editing privs.
* If so we create the button and add it to the tinymce button array
*/
function add_tinymce_button() {
if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') )
return;
if ( get_user_option('rich_editing') == 'true') {
//the function that adds the javascript
add_filter('mce_external_plugins', array(&$this,'add_new_tinymce_plugin'));
//adds the button to the tinymce button array
add_filter('mce_buttons', array(&$this,'register_new_button'));
}
}
/*
* add the new button to the tinymce array
*/
function register_new_button($buttons) {
array_push($buttons, $this->btn_arr["Seperator"],$this->btn_arr["Name"]);
return $buttons;
}
/*
* Call the javascript file that loads the
* instructions for the new button
*/
function add_new_tinymce_plugin($plugin_array) {
$plugin_array[$this->btn_arr['Name']] = $this->js_file;
return $plugin_array;
}
/*
* This function tricks tinymce in thinking
* it needs to refresh the buttons
*/
function refresh_mce_version($ver) {
$ver += 3;
return $ver;
}
}//class end
?>
4spaces.js
class.new_tinymce_btn.php
Изменить: я забыл упомянуть, для тех, кто не знает, поместите оба этих файла в каталог под admin
(default path). It should look something like
/wp-content/plugins/4spaces/
or whatever name you decide to call it, then activate it in Admin.
P.S. - Я относительно новичок в ООП, поэтому приветствуем любую критику, советы и т. д. от всех, кто просматривает этот ответ.