在 WordPress 中如果要插入一段特定的代码,是一件比较困难的事情,不过 WordPress 开发团队可能注意到了这一点,所以开发了一个叫 shortcode 的东西,能够自定义一段已经编辑好的代码,比如视频代码等。
首先被称为 mycode 简码可以看起来像任何一种:
[mycode]
[mycode foo="bar" id="123" color="red" something="data"]
[mycode]Some Content[/mycode]
[mycode]<p><a href="http://example.com/">HTML Content</a></p>[/mycode]
[mycode]Content [another-shotcode] more content[/mycode]
[mycode foo="bar" id="123"]Some Content[/mycode]
正如你所看到的简码允许用户将代码放入的文章或页面,和一个插件然后可以轻松地处理那些代码。他们可以嵌套,包含内容 (包括 HTML)、属性等。
你想要利用新的、 功能强大的简码系统在 WordPress 2.5 中,但你要从哪里开始呢?首先您需要添加你的简码:
add_shortcode('mycode', 'yourFunction');
你的函数应该带两个参数并返回的内容,您想要替换的简码。第一个参数将是一个关联数组的属性 (键将的属性名称和值将相应的属性值),和第二个将会在标记之间的内容。
若要处理的默认属性,您可以使用 shortcode_atts($attributes, Array $defaultsArray)
function yourFunction ($attr, $content) {
$attr = shortcode_atts(array('foo'=>'bar', 'id'=>'', 'color'=>'blue'), $attr);
return '<h2>Attributes</h2><pre>'.print_r($attr, true).'</pre><h2>content</h2>'.$content;
}
这就是为什么他们是如此伟大,花几乎没有来处理,然而也许你正考虑相对复杂的方式来使用这些,和你想要把它带到下一个级别。
也许你担心你不会理解的你的简码,错综复杂的用户或将饱受拼写错误。它是一个有效的关注。例如我不想承担我的用户将能够通过完美地输入创建一个谷歌地图:
[googleMap width="100%" height="400" name="Aero Rental - Phoenix" directions_to="true" directions_from="true"]3432 W. Clarendon, 85017[/googleMap]
解决方法是创建一种方式为您的用户生成简码,并把他们写入编辑器中,但从哪里开始呢?首先你需要的页面中添加一个 meta 框的写作/编辑 (这些是编辑器,如标签、 类别等下面的下拉列表框)。要这样做,请创建一个函数,您将使用显示的窗体,用来生成您的简码 (我会称它为 insertForm )。然后你需要钩入到位行动,并使用它来创建 metaboxes:
<?php
function handleAdminMenu() {
// You have to add one to the "post" writing/editing page, and one to the "page" writing/editing page
add_meta_box('yourMetaBoxID', 'Your Meta Box Title', 'insertForm', 'post', 'normal');
add_meta_box('yourMetaBoxID', 'Your Meta Box Title', 'insertForm', 'page', 'normal');
}
function insertForm() {
?>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="wpYourPluginName_content"><?php _e('Tag Content:')?></label></th>
<td>
<input type="text" size="40" style="width:95%;" name="wpYourPluginName[content]" id="wpYourPluginName_content" />
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="wpYourPluginName_foo"><?php _e('Foo Attribute:')?></label></th>
<td>
<input type="text" size="40" style="width:95%;" name="wpYourPluginName[foo]" id="wpYourPluginName_foo" />
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="wpYourPluginName_bar"><?php _e('Bar Attribute:')?></label></th>
<td>
<input type="text" size="40" style="width:95%;" name="wpYourPluginName[bar]" id="wpYourPluginName_bar" />
</td>
</tr>
</table>
<p class="submit">
<input type="button" onclick="return wpYourPluginAdmin.sendToEditor(this.form);" value="<?php _e('Send Map to Editor »'); ?>" />
</p>
<?php
}
function adminHead () {
if ($GLOBALS['editing']) {
wp_enqueue_script('wpYourPluginNameAdmin', 'path/to/yourJsFile.js', array('jquery'), '1.0.0');
}
}
add_action('admin_menu', 'handleAdminMenu');
add_filter('admin_print_scripts', 'adminHead');
?>
具体内容是 yourMetaBoxID 成为 metabox DIV 的 id,Your Meta Box Title将为 metabox 显示的标题。
你可能已经注意到提交按钮调用一些 JavaScript(特别是 wpYourPluginAdmin.sendToEditor(this.form)),和我们进行一个 JavaScript 文件排队。下面是该文件:
/**
* Handle: wpYourPluginNameAdmin
* Version: 0.0.1
* Deps: jquery
* Enqueue: true
*/
var wpYourPluginNameAdmin = function () {}
wpYourPluginNameAdmin.prototype = {
options : {},
generateShortCode : function() {
var content = this['options']['content'];
delete this['options']['content'];
var attrs = '';
jQuery.each(this['options'], function(name, value){
if (value != '') {
attrs += ' ' + name + '="' + value + '"';
}
});
return '[googleMap' + attrs + ']' + content + '[/googleMap]'
},
sendToEditor : function(f) {
var collection = jQuery(f).find("input[id^=wpYourPluginName]:not(input:checkbox),input[id^=wpYourPluginName]:checkbox:checked");
var $this = this;
collection.each(function () {
var name = this.name.substring(13, this.name.length-1);
$this['options'][name] = this.value;
});
send_to_editor(this.generateShortCode());
return false;
}
}
var wpYourPluginAdmin = new wpYourPluginNameAdmin();
这个 JavaScript 解析从窗体的项目、 格式简码,并将它发送到编辑器,现在您可以创建一个接口,使您的用户,以允许轻松地生成有效简码为您解析。