web-dev-qa-db-fra.com

Récupérer plusieurs valeurs transmises à un seul attribut dans un shortcode

Comment puis-je récupérer les valeurs transmises au shortcode en utilisant un seul paramètre?

Exemple:

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

Est-il possible de faire ça?

2
Yuri Rodrigues

La solution ci-dessous analysera les valeurs séparées par des virgules transmises au paramètre type du shortcode. Nous allons également supprimer les espaces entourant les valeurs, ce qui constitue une amélioration de la convivialité (voir l'exemple 2 après le code ci-dessous).

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;
}

Exemple 1:

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

Sortie:

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

Exemple 2:

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

Sortie:

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

Vous pouvez transmettre un objet JSON dans un code court:

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

Ensuite, vous pouvez récupérer les attributs passés en utilisant 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