web-dev-qa-db-ja.com

ショートコードで単一の属性に渡された複数の値を取得します

1つのパラメータだけを使用してショートコードに渡された値を取得する方法を教えてください。

例:

[related type="2,3,4,5,6"]

それは可能ですか?

2
Yuri Rodrigues

以下の解決策は、ショートコードのtypeパラメータに渡されたカンマ区切りの値を解析します。また、値を囲む空白を削除することで、ユーザビリティが向上します(以下のコードの後の例2を参照)。

add_shortcode( 'related', 'wpse_related' );
function wpse_related( $atts, $content = '' ) {
    // User provided values are stored in $atts.
    // Default values are passed to shortcode_atts() below.
    // Merged values are stored in the $a array.
    $a = shortcode_atts( [
                'type'   => false,
    ], $atts );

    $output = '';

    if ( $a['type'] ) {
        // Parse type into an array. Whitespace will be stripped.
        $a['type'] = array_map( 'trim', str_getcsv( $a['type'], ',' ) );
    }

    // Debugging: Display the type parameter as a formatted array.
    $output .= '<pre>' . print_r( $a['type'], true  ) . '</pre>';

    return $output;
}

例1:

[related type="2,3,4,5,6"]

出力:

Array
(
    [0] => 2
    [1] => 3
    [2] => 4
    [3] => 5
    [4] => 6
)

例2:

[related type="8, 6, 7,5,30, 9"]

出力:

Array
(
    [0] => 8
    [1] => 6
    [2] => 7
    [3] => 5
    [4] => 30
    [5] => 9
)
4
Dave Romsey

JSONオブジェクトを短いコードで渡すことができます。

[related values='{"a":"foo","b":"bar"}']

それからあなたはjson_decodeを使って渡された属性を検索することができます

public static function myshortcode( $atts, $content = null ) {
    extract( shortcode_atts( array(
        "values" = "",
    ), $atts ) );

    $values = json_decode( $values, true );

    // Your Shortcode Functionality here

}
1
JItendra Rana