我已经按照Nettuts上的教程了解如何向TinyMCE添加自定义按钮(http://net.tutsplus.com/tutorials/wordpress/wordpress-shortcodes-the-right-way/)
它很好用,但是我想添加许多按钮,我想知道是否有一种聪明的方法可以做到这一点,而不必一遍又一遍地复制所有代码。
这是我用来添加按钮的代码:
add_shortcode("quote", "quote");
function quote( $atts, $content = null ) {
return '<div class="right text">"'.$content.'"</div>';
}
add_action('init', 'add_button');
function add_button() {
if ( current_user_can('edit_posts') && current_user_can('edit_pages') )
{
add_filter('mce_external_plugins', 'add_plugin');
add_filter('mce_buttons_3', 'register_button');
}
}
function register_button($buttons) {
array_push($buttons, "quote");
return $buttons;
}
function add_plugin($plugin_array) {
$plugin_array['quote'] = get_bloginfo('template_url').'/js/customcodes.js';
return $plugin_array;
}
然后我用以下代码创建一个customcodes.js文件:
(function() {
tinymce.create('tinymce.plugins.quote', {
init : function(ed, url) {
ed.addButton('quote', {
title : 'Add a Quote',
image : url+'/image.png',
onclick : function() {
ed.selection.setContent('[quote]' + ed.selection.getContent() + '[/quote]');
}
});
},
createControl : function(n, cm) {
return null;
},
});
tinymce.PluginManager.add('quote', tinymce.plugins.quote);
})();
再说一次,如何在不必为每个新按钮执行所有代码的情况下添加多个按钮?
谢谢:)塞巴斯蒂安
答案 0 :(得分:7)
如果我正确理解您的问题,您想要添加更多按钮而无需复制register_button($buttons)
和add_plugin($plugin_array)
功能吗?
我知道这是一个老问题,但有一种方法可以在不重复功能的情况下完成。
只需进入你的customcodes.js和init : function(ed, url)
创建新按钮,就像你做第一个按钮一样,所以它看起来像这样:
init : function(ed, url) {
/* your original button */
ed.addButton('quote', {
title : 'Add a Quote',
image : url+'/image.png',
onclick : function() {
ed.selection.setContent('[quote]' + ed.selection.getContent() + '[/quote]');
}
});
/* your second button */
ed.addButton('singlequote', {
title : 'Add a Single Quote',
image : url+'/image.png',
onclick : function() {
ed.selection.setContent('[singlequote]' + ed.selection.getContent() + '[/singlequote]');
}
});
}
等等,你需要的按钮很多。
之后,只需返回register_button($buttons)
功能并更新array_push()
即可。
所以,当你只有一个按钮添加它时,它看起来像这样:
function register_button($buttons) {
array_push($buttons, "quote");
return $buttons; }
现在您创建了新按钮,此功能将如下所示。
function register_button($buttons) {
array_push($buttons, "quote", "singlequote");
return $buttons; }
依此类推,取决于您添加了多少新按钮。
您无需复制功能,也无需添加新操作和过滤器即可向tinyMCE添加新按钮。
您只需在tinyMCE插件中创建新按钮,并列出您在array_push().
也许您并不知道array_push()
接受多个推送值。
Here is its documentation on php.net
答案 1 :(得分:2)
在步骤3修改php以按下第二个按钮:
//Step 3: Register Our Button
function register_button($buttons) {
array_push($buttons, "BOUTON1");
array_push($buttons, "BOUTON2");
return $buttons;
}
向该BOUTON2添加特定传递:
//Step 4: Register Our TinyMCE Plugin
function add_plugin($plugin_array) {
$plugin_array['BOUTON1'] = '/yourpathtojs/bouton1.js';
$plugin_array['BOUTON2'] = '/yourpathtojs/bouton2.js';
return $plugin_array;
}
然后你们每个人都有不同的文件,看看PLUG1和BOUTON1的使用,它在nettuts上更好,因为他们没有区分“引用”一词:
bouton1.js:
(function() {
tinymce.create('tinymce.plugins.PLUG1', {
init : function(ed, url) {
ed.addButton('BOUTON1', {
title : 'You', image : url+'/image.png',
onclick : function() { ed.selection.setContent('[thumb from="youtube" code="'+ed.selection.getContent()+'"]'); }
});
},
createControl : function(n, cm) {
return null;
},
});
tinymce.PluginManager.add('BOUTON1', tinymce.plugins.PLUG1);
})();
bouton2.js:
(function() {
tinymce.create('tinymce.plugins.PLUG2', {
init : function(ed, url) {
ed.addButton('BOUTON2', {
title : 'Vim', image : url+'/image.png',
onclick : function() { ed.selection.setContent('[thumb from="vimeo" code="'+ed.selection.getContent()+'"]'); }
});
},
createControl : function(n, cm) {
return null;
},
});
tinymce.PluginManager.add('BOUTON2', tinymce.plugins.PLUG2);
})();
答案 2 :(得分:1)
除了可能在现有功能中添加额外的按钮代码之外,我认为没有办法做你正在尝试的事情。
不幸的是,这是添加按钮的代码,所以如果你想添加另一个按钮,你必须再次添加代码。
如果您想要添加的按钮几乎在所有方面都相似,那么您可以通过foreach {}
后跟switch(){case '':}
来实现数据输入,但除非所有按钮都执行同样的事情似乎有点多余。
如果你要做的就是保持你的function.php文件整洁,那么我建议将每个按钮放在一个名为与main函数相同的单独的.php文件中,在一个名为inc的文件夹中或包含在你的模板中,然后包括它们:
$temp_path = 'http//www.yourdomain.com/wp-content/theme/yourtheme/includes/';
include $temp_path.'file1.php';
include $temp_path.'file2.php';
我正在使用temp_path变量,因为某些原因bloginfo()
和get_bloginfo()
似乎在函数文件中不起作用。
另一方面,尽管它只是供个人使用,但尝试使用更多独特的功能名称,quote
可能是任何东西,tinymce_quote_button
这绝对是它的本质。这样可以避免以后潜在的函数名称冲突。
答案 3 :(得分:0)
如果所有按钮都是相关的,并且您想要一次性添加它们(即您不需要选择添加哪些按钮,您可以在init调用中复制ed.addButton调用。它会将每个addbutton调用封装到它自己的函数中是有意义的,
(function() {
function addQuoteButton(ed, url){
ed.addButton('quote', {
title : 'Add a Quote',
image : url+'/image.png',
onclick : function() {
ed.selection.setContent('[quote]' + ed.selection.getContent() + '[/quote]');
}
});
}
function addOtherButton(ed, url){
// functionality to add another button.
}
tinymce.create('tinymce.plugins.quote', {
init : function(ed, url) {
addQuoteButton(ed, url);
addOtherButton(ed,url);
},
createControl : function(n, cm) {
return null;
},
});
tinymce.PluginManager.add('quote', tinymce.plugins.quote);
})();
为了进一步分解,你可以将add * Button函数拆分成自己的文件(如@DouglasMarken所建议的那样)。