什么是WordPress带参数的短代码?WP插件开发指南

WordPress带参数的短代码是一种在文章、页面或小工具中插入的简短代码片段,可接收参数以执行特定功能或显示动态内容。例如,通过传递参数显示不同数据或调整功能行为。

带参数的短代码

现在我们知道了如何创建一个基本的短代码以及如何将其用作自关闭和封闭的,我们将研究如何在短代码[$tag]和处理程序函数中使用参数。

短代码[$tag]可以接受参数,称为属性:


[wporg title="WordPress.org"]
Having fun with WordPress.org shortcodes.
[/wporg]

短代码处理函数可以接受 3 个参数:

$atts– 数组 – [$tag] 属性
$content– 字符串 – 短代码中的内容。在上面的例子中,内容为“使用 WordPress.org 短代码尽享乐趣”。
$tag– 字符串 – [$tag] 的名称(即短代码的名称)

function wporg_shortcode( $atts = array(), $content = null, $tag = '' ) {}

解析属性

对于用户来说,短代码只是帖子内容中带有方括号的字符串。用户不知道哪些属性可用,也不知道幕后发生了什么。

对于插件开发者来说,没有办法强制执行属性的使用策略。用户可以添加一个属性,也可以添加两个属性,或者根本不添加任何属性。

要控制如何使用短代码:

声明处理函数的默认参数
使用array_change_key_case()对属性数组的关键大小写进行规范化
使用shortcode_atts()解析属性 ,提供默认值数组和用户$atts
返回之前确保输出安全

完整示例

使用基本短代码结构的完整示例,处理自关闭和封闭场景并确保输出安全。

一个[wporg]短代码将接受一个标题并显示一个我们可以用 CSS 设置样式的框。
可以查看官方代码:
https://developer.wordpress.org/plugins/shortcodes/shortcodes-with-parameters/#complete-example


/**
 * The [wporg] shortcode.
 *
 * Accepts a title and will display a box.
 *
 * @param array  $atts    Shortcode attributes. Default empty.
 * @param string $content Shortcode content. Default null.
 * @param string $tag     Shortcode tag (name). Default empty.
 * @return string Shortcode output.
 */
function wporg_shortcode( $atts = [], $content = null, $tag = '' ) {
	// normalize attribute keys, lowercase
	$atts = array_change_key_case( (array) $atts, CASE_LOWER );

	// override default attributes with user attributes
	$wporg_atts = shortcode_atts(
		array(
			'title' => 'WordPress.org',
		), $atts, $tag
	);

	// start box
	$o = '
'; // title $o .= '< h2 >' . esc_html( $wporg_atts['title'] ) . '< / h2 >'; // enclosing tags if ( ! is_null( $content ) ) { // $content here holds everything in between the opening and the closing tags of your shortcode. eg.g [my-shortcode]content[/my-shortcode]. // Depending on what your shortcode supports, you will parse and append the content to your output in different ways. // In this example, we just secure output by executing the_content filter hook on $content. $o .= apply_filters( 'the_content', $content ); } // end box $o .= '
'; // return output return $o; } /** * Central location to create all shortcodes. */ function wporg_shortcodes_init() { add_shortcode( 'wporg', 'wporg_shortcode' ); } add_action( 'init', 'wporg_shortcodes_init' );