如果我有这样的简码:
[shortcode att1="true" att2="true"]
有什么方法可以确定哪个属性(att1 或 att2)先出现?因此,如果短代码看起来像这样,它将给出与第一个示例不同的输出:
[shortcode att2="true" att1="true"]
我没有对此进行测试,我猜这取决于 Shortcode API 如何在内部处理参数,但只要将简码按照解析简码时遇到的顺序添加到数组中,您就可以检查顺序提供给您的短代码处理程序回调的 atteibutes 数组中的参数。像这样的东西可能会起作用:
// [bartag foo="foo-value" bar="bar-value"]
function bartag_func( $atts ) {
$first_param = null;
// Loop through $atts to check which parameter comes first
foreach ($atts as $att_key => $att_value) {
switch ($att_key) {
case 'foo':
case 'bar':
$first_param = $att_key;
break 2;
}
}
// Perform filtering/modifying content, settings defaults etc. according to parameter order
if ($first_param == 'foo') {
// foo came first
} else if ($first_param != null) {
// bar came first
}
// Supply defaults and extract parameters
extract( shortcode_atts( array(
'foo' => 'something',
'bar' => 'something else',
), $atts ) );
// Return accordingly
return "foo = {$foo}";
}
add_shortcode( 'bartag', 'bartag_func' );
编辑:在实现这样的功能之前,我会尝试真正考虑清楚,因为它可能会让用户感到有些困惑,除非它清楚地表明参数顺序确实很重要。