是否可以检索短代码中的属性顺序? (WordPress的)

时间:2012-10-22 15:07:13

标签: php wordpress shortcode

如果我有这样的短代码:

[shortcode att1="true" att2="true"]

有没有办法确定哪个属性(att1或att2)是第一个?因此,如果短代码看起来像这样,它将提供与第一个示例不同的输出:

[shortcode att2="true" att1="true"]

1 个答案:

答案 0 :(得分:1)

我没有对此进行测试,我想这取决于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' );

编辑:在实现这样的功能之前,我会尝试真正考虑事情,因为它可能会让用户感到有点困惑,除非明确告知参数顺序确实很重要。