web-dev-qa-db-fra.com

Vérifier si un attribut existe dans un shortcode

J'ai écrit un petit plugin qui crache du code HTML pour un bouton. Cela fonctionne très bien, sauf pour une chose: si l'utilisateur ne spécifie pas d'image, celle-ci apparaît brisée. Est-il possible pour moi de vérifier si l'utilisateur a spécifié une image et de n'imprimer le code de l'image que si c'est le cas?

Voici mon code de plugin:

function button_shortcode($args) {
    return "<a class=\"button\" href=\"" . $args["url"] . "\"><img alt=\"" . $args["bigtext"] . "\" class=\"alignleft\" src=\"" . $args["img"] . "\" /><small>" . $args["smalltext"] . "</small>" . $args["bigtext"] . "</a>";
}
add_shortcode("button", "button_shortcode");

Voici le shortcode:

[button url="http://www.example.com/" img="/path/to/image.png" smalltext="Smaller Text" bigtext="Bigger Text"]

5
JacobTheDev

Borek a pointé dans la bonne direction, voici mon code *:

function button_shortcode($attributes, $content) {
    if ($attributes["image"] != "") {
        $img = "<img alt=\"" . $content . "\" class=\"alignleft\" src=\"" . $attributes["image"] . "\" />";
    } else {
        $img = "";
    }
    if ($attributes["intro"] != "") {
        $intro = "<small>" . $attributes["intro"] . "</small>";
    }
    return "<a class=\"button\" href=\"" . $attributes["link"] . "\">" . $img . $intro . $content . "</a>";
}
add_shortcode("button", "button_shortcode");

* Remarque: j'ai également changé certains noms d'attributs et d'autres éléments, mais ce n'était pas nécessaire.

0
JacobTheDev

D'accord, j'ai réécrit la fonction pour qu'elle réponde aux exigences suivantes:

  • vérifie que vos valeurs de tableau sont définies avant de les utiliser. Vous ne pouvez pas toujours être sûr qu'ils seront là.
  • si l'image est vide, elle renvoie un message d'erreur. Vous ne savez pas si c'est ce que vous voulez, mais vous pouvez simplement le supprimer.
  • commence par créer votre image html.
  • ensuite, si une URL est spécifiée, elle encapsule l'image dans votre lien HTML. Sinon, il vous suffira de retourner votre image HTML.

Notez la façon dont j'ai créé votre code HTML. Casser et ouvrir des chaînes, des guillemets, etc. est compliqué et difficile à lire. Utilisez des guillemets simples lors de la construction de chaînes HTML afin de pouvoir utiliser des guillemets doubles sans les échapper.

J'ai également utilisé sprintf () puis substituer chaque morceau que je veux. Beaucoup plus facile à lire et à modifier plus tard.

J'espère que ça aide!

function button_shortcode($args) {

    if ( empty( $args['img'] ) ) {
        return 'Error - no image source was specified';
    }

    $sBigText = isset( $args['bigtext'] )? $args['bigtext'] : '';
    $sSmallText = isset( $args['smalltext'] )? $args['smalltext'] : '';

    $sHtmlToReturn = sprintf( '<img alt="%s" class="alignleft" src="%s" /><small>%s</small>%s', $sBigText, $args['img'], $sSmallText, $sBigText );

    if ( !empty( $args['url'] ) ) {
        $sHtmlToReturn = sprintf( '<a class="button" href="%s">%s</a>', $args['url'], $sHtmlToReturn );
    }

    return $sHtmlToReturn;
}

Paul.

4
Paul G.

Pourquoi ne pas assigner une image par défaut à cette variable? Donc, si aucune image n'est spécifiée, une URL d'image par défaut (au lieu de vide) est utilisée? BTW. C'est quoi ces backslash? Utilisez simplement des guillemets simples et doubles.

function button_shortcode($args) {
    extract(shortcode_atts($default=array(
        'url' => 'http://default.com',
        'bigtext' => 'Your default big text',
        'img' => 'http://your-default-img-path.com/img.png',
        'small' => 'Your default small text',
    ), $args));
    return '<a class="button" href="' . $url . '"><img alt="' . $bigtext . '" class="alignleft" src="' . $img . '" /><small>' . $smalltext . '</small>' . $bigtext . '</a>';
}
add_shortcode("button", "button_shortcode");

Maintenant, si vous devez afficher des boutons séparés (si une image est présente ou non), utilisez des conditions telles que

function button_shortcode($args) {
    extract(shortcode_atts($default=array(
        'url' => 'http://default.com',
        'bigtext' => 'Your default big text',
        'img' => '',
        'small' => 'Your default small text',
    ), $args));

    if (!empty($url)) {
        $button_output = '<a class="button" href="' . $url . '"><img alt="' . $bigtext . '" class="alignleft" src="' . $img . '" /><small>' . $smalltext . '</small>' . $bigtext . '</a>';
    } else { 
        $button_output = '<a class="button" href="' . $url . '"><small>' . $smalltext . '</small>' . $bigtext . '</a>';
    }

    return $button_output;
}
add_shortcode("button", "button_shortcode");
2
Borek