web-dev-qa-db-fra.com

Paramètres multiples pour un shortcode

Je travaille sur la construction de codes courts pour mon blog. Je peux définir un paramètre unique pour mon shortcode, mais je ne sais pas comment définir un paramètre différent.

Par exemple, je peux utiliser [myshortcode myvalue] pour générer un bloc HTML dans le contenu de la publication.

Voici ce que j'utilise actuellement:

function test_shortcodes( $atts ) {
    extract( shortcode_atts( array(
        'myvalue' => '<div class="shortcodecontent"></div>'

    ), $atts ) );

    return $myvalue;
}
add_shortcode( 'myshortcode', 'test_shortcodes' );

Maintenant, comment puis-je utiliser [myshortcode myothervalue] pour générer un bloc de code HTML différent?

Veuillez noter que le shortcode est identique, seul le paramètre est modifié.

1
Abhik

Regardons le shortcode

[SH_TEST var1="somevalue" var2="someothervalue"]THE SHORTCODE CONTENT[/SH_TEST]

la fonction de gestionnaire de shortcode accepte 3 paramètres

  1. $atts - un tableau d'attributs transmis par le shortcode dans notre cas:

    • $atts['var1'] est défini sur 'somevalue'
    • $atts['var2'] est défini sur 'someothervalue'
  2. $content - est une chaîne de la valeur incluse dans les balises shortcode, dans notre cas: -$content est défini sur THE SHORTCODE CONTENT

  3. $tag - est une chaîne de la balise shortcode, dans notre cas: -$tag est défini sur SH_TEST

Lorsque je crée un shortcode, je définis généralement les valeurs par défaut et les fusionne avec les valeurs soumises par la balise shortcode ex:

add_shortcode('SH_TEST','SH_TEST_handler');
function SH_TEST_handler($atts = array(), $content = null, $tag){
    shortcode_atts(array(
        'var1' => 'default var1',
        'var2' => false
    ), $atts);

    if ($atts['var2'])
          return 'myothervalue';
    else
          return 'myvalue'; 
}
5
Bainternet

Si vous utilisez un shortcode comme celui-ci, atts[0] contiendra la valeur:

add_shortcode( 'test', 'test_callback' );

function test_callback( $atts )
{
    return $atts[0];
}

Une autre méthode consiste à appeler la valeur avec un nom:

[myshortcode val="myvalue"]

function test_callback( $atts )
{
    return $atts["val"];
}
1
fuxia

Cette méthode fonctionne pour moi dans tous les cas en utilisant [myshortcode type = "myvalue"]

function test_shortcodes( $atts = array() ) {
extract( shortcode_atts( array(
    'type' => 'myvalue'

), $atts ) );

switch( $atts['type] ){
    case 'myvalue': 
        $output = '<div class="shortcodecontent"></div>';
        break;

    case 'myothervalue': 
        $output = '<div class="othershortcodecontent"></div>';
        break;

    default:
        $output = '<div class="defaultshortcodecontent"></div>';
        break;
}

return $output;
}
add_shortcode( 'myshortcode', 'test_shortcodes' );

Et si vous voulez ajouter un autre paramètre, il vous suffit de ceci [myshortcode type = "myvalue" other = "somevalue"]

test_shortcodes( $atts = array() ) {
extract( shortcode_atts( array(
    'type' => 'myvalue', //Could be default
    'other' => 'somevalue' //Could be default

), $atts ) );

switch( $atts['other'] ){
    case 'somevalue': 
        $output = '<div class="shortcodecontent">somevalue</div>';
        break;

    case 'myothervalue': 
        $output = '<div class="othershortcodecontent"></div>';
        break;

    default:
        $output = '<div class="defaultshortcodecontent"></div>';
        break;
}

return $output;
}
add_shortcode( 'myshortcode', 'test_shortcodes' );

J'espère que ça aide

0
Delorme Grant

Vous feriez mieux de le faire comme ça:

function test_shortcodes( $atts ) {
    extract( shortcode_atts( array(
        'type' => 'myvalue'

    ), $atts ) );

    switch( $type ){
        case 'myvalue': 
            $output = '<div class="shortcodecontent"></div>';
            break;

        case 'myothervalue': 
            $output = '<div class="othershortcodecontent"></div>';
            break;

        default:
            $output = '<div class="defaultshortcodecontent"></div>';
            break;
    }

    return $output;
}
add_shortcode( 'myshortcode', 'test_shortcodes' );

Utilisez-le comme ceci:

[myshortcode type="myvalue"] à la sortie <div class="shortcodecontent"></div>

et

[myshortcode type="myothervalue"] à la sortie <div class="othershortcodecontent"></div>

0
WP Themes