it-swarm.com.de

Überprüfen, ob ein Attribut in einem Shortcode vorhanden ist

Ich habe ein kleines Plugin geschrieben, das HTML für einen Button ausspuckt. Abgesehen von einem Punkt funktioniert es hervorragend: Wenn der Benutzer kein Bild angibt, wird das Bild als fehlerhaft angezeigt. Kann ich überprüfen, ob der Benutzer ein Bild angegeben hat, und den Bildcode nur dann ausdrucken, wenn dies der Fall ist?

Hier ist mein Plugin-Code:

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");

Hier ist der Shortcode:

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

5
JacobTheDev

Borek zeigte in die richtige Richtung, hier ist mein 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");

* Hinweis: Ich habe auch einige der Attributnamen und -materialien geändert, aber das war nicht erforderlich.

0
JacobTheDev

Okay, ich habe die Funktion so umgeschrieben, dass sie Folgendes bewirkt:

  • überprüft, ob Ihre Array-Werte festgelegt sind, bevor Sie sie verwenden. Sie können nicht immer sicher sein, dass sie da sein werden.
  • wenn das Bild leer ist, wird eine Fehlermeldung ausgegeben. Ich bin mir nicht sicher, ob Sie dies möchten, aber Sie können es einfach entfernen.
  • zuerst erstellt Ihr Bild HTML.
  • wenn dann eine URL angegeben ist, wird das Bild in Ihrem Link-HTML-Code eingeschlossen. Andernfalls wird nur Ihr Bild-HTML-Code zurückgegeben.

Beachten Sie, wie ich Ihr HTML erstellt habe. Das Brechen und Öffnen von Zeichenketten und das Entkommen von Anführungszeichen usw. ist chaotisch und schwer zu lesen. Verwenden Sie einfache Anführungszeichen, wenn Sie HTML-Zeichenfolgen erstellen, damit Sie doppelte Anführungszeichen verwenden können, ohne sie zu maskieren.

Ich habe auch sprintf () verwendet und dann jedes Stück, das ich will, ersetzt. Viel einfacher zu lesen und später zu ändern.

Ich hoffe es hilft!

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.

Wie wäre es einfach, dieser Variablen ein Standardbild zuzuweisen? Wenn also kein Bild angegeben ist, wird eine Standard-Bild-URL (anstelle einer leeren) verwendet. Übrigens. Was ist mit diesen Backslashes? Verwenden Sie einfach einfache und doppelte Anführungszeichen.

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");

Wenn Sie nun separate Schaltflächen ausgeben müssen (ob ein Bild vorhanden ist oder nicht), verwenden Sie folgende Bedingungen:

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