日期:2014-10-22 阅读:4819
dmandwp系统 - wordpress系统和DM系统区块建站>>
wordpress shortcode短代码是什么?
简单说 WordPress Shortcode 指的是一些使用[]包含的短代码,WordPress会识别这些短代码并根据短代码的定义输出为特定的内容。
定义Shortcode
function my_shortcode_func($attr, $content) {
// $attr $key=>$value 的数组
// $content 是 shortcode 中包含的字符串
// 对 $attr 和 $content 进行处理
// 返回预期的值
}
-------------
具体看: http://codex.wordpress.org/Function_Reference/add_shortcode
Simplest example of a shortcode tag using the API:
[footag foo="bar"]
function footag_func( $atts ) {
return "foo = {$atts['foo']}"; //$atts是一个数组,{}是一种输出格式。
}
add_shortcode('footag', 'footag_func');
==================================================================
输出shortcode
shortcode在编辑器里,一般格式是:[footag foo="bar"]>
[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]
那么在其他地方呢?比如在php模板文件里,或者在widget里等,
// Use shortcodes in text widgets.
add_filter( 'widget_text', 'do_shortcode' ); //在主题的function.php或其他文件里加上这个。
另外:
add_filter('the_content', 'do_shortcode', 11); // AFTER wpautop() --- 这个在 wp-includes/shortcodes.php 的最后。
the_content 是什么? 就是在模板文件里输出的内容<?php the_content(); ?>
-----
// Use shortcodes in form like Landing Page Template.
echo do_shortcode( '[contact-form-7 id="91" title="quote"]' );
具体看: http://codex.wordpress.org/Function_Reference/do_shortcode
=================================================================
解决 Shortcode 中自动添加的 br 或者 p 标签 (这个在wordpress4.0版里,这个问题好像不存在了)
我们在使用 WordPress Shortcode API 开发插件的时候,有个比较麻烦的问题,就是 WordPress 会自动在 shortcode 内添加 br 或者 p 标签,这样可能会打乱你的原先预想的 HTML 结构和布局。
造成这个问题的原因是 WordPress 默认的日志内容处理流程中,wpautop(将回车转换成 p 或者 br 标签的函数)是在 Shortcode 前面运行的。所以我们的解决方案也是非常简单,改变它们执行的顺序,在当前主题的 functions.php 文件中添加:
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12); //--- 这行代码原来是在 wp-includes/default-filters.php
注意:看前面add_filter('the_content', 'do_shortcode', 11); //12排在11后面。
---------------