0

次のようなショートコードがある場合:

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

どの属性 (att1 または att2) が最初に来るかを判断する方法はありますか? したがって、ショートコードが次のように見える場合、最初の例とは異なる出力が得られます。

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

4

1 に答える 1

1

私はこれをテストしておらず、ショートコード API がパラメーターを内部で処理する方法に依存していると思いますが、ショートコードが解析されたときに遭遇した順序でショートコードが配列に追加されている限り、おそらく次の順序を確認できます。ショートコード ハンドラー コールバックに提供される属性配列の引数。このようなものがうまくいくかもしれません:

// [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' );

EDIT : パラメータの順序が実際に重要であることが明確に伝えられていない限り、ユーザーを少し混乱させる可能性があるため、このような関数を実装する前に、実際に物事を考えてみます。

于 2012-10-22T15:21:19.540 に答える