Comprobando si un atributo existe en un shortcode

5

He escrito un pequeño complemento que escupe html para un botón. Funciona muy bien, excepto por una cosa: si el usuario no especifica una imagen, la imagen aparece rota. ¿Hay alguna manera de verificar y ver si el usuario ha especificado una imagen y solo imprimir el código de la imagen si ese es el caso?

Aquí está mi código de complemento:

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

Aquí está el código corto:

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

    
pregunta JacobTheDev 01.05.2014 - 20:54

3 respuestas

0

Borek señaló en la dirección correcta, aquí está mi buen código *:

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

* Nota: También cambié algunos de los nombres de atributos y esas cosas, pero eso no fue necesario.

    
respondido por el JacobTheDev 01.05.2014 - 21:41
4

Bien, he reescrito la función para que haga lo siguiente:

  • comprueba que los valores de la matriz están establecidos antes de usarlos. No siempre puedes estar seguro de que estarán allí.
  • si la imagen está vacía, vuelve con un mensaje de error. No estoy seguro de si esto es lo que quieres, pero puedes eliminarlo.
  • primero crea su imagen html.
  • entonces, si hay una URL especificada, envuelve la imagen en su enlace HTML. Si no, simplemente devolverá su imagen HTML.

Tenga en cuenta la forma en que he creado su HTML. Romper y abrir cadenas y evadir citas, etc. es complicado y difícil de leer. Use comillas simples al construir cadenas HTML para que pueda usar comillas dobles sin escapar de ellas.

También he usado sprintf () y luego sustituyo cada pieza que quiero. Mucho más fácil de leer y modificar más adelante.

Espero que ayude!

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.

    
respondido por el Paul G. 01.05.2014 - 21:41
2

¿Qué tal si solo asigna una imagen predeterminada a esta variable? Entonces, si no se especifica ninguna imagen, ¿se usa una url de imagen predeterminada (en lugar de vacía)? Por cierto ¿Qué pasa con esas barras invertidas? Solo usa comillas simples y dobles.

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

Ahora, si necesita generar botones separados (si la imagen está presente o no), utilice condicionales como estos:

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");
    
respondido por el Borek 01.05.2014 - 21:15

Lea otras preguntas en las etiquetas