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é.
Regardons le shortcode
[SH_TEST var1="somevalue" var2="someothervalue"]THE SHORTCODE CONTENT[/SH_TEST]
la fonction de gestionnaire de shortcode accepte 3 paramètres
$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'
$content
- est une chaîne de la valeur incluse dans les balises shortcode, dans notre cas: -$content
est défini sur THE SHORTCODE CONTENT
$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';
}
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"];
}
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
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>