web-dev-qa-db-ja.com

ショートコードに属性が存在するかどうかを確認する

私はボタンのためのHTMLを吐き出す小さなプラグインを書きました。ユーザーが画像を指定しなかった場合、画像は壊れているように見えます。ユーザーが画像を指定したかどうかを確認して確認する方法はありますか。その場合は、画像コードのみを印刷します。

これが私のプラグインコードです:

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

これがショートコードです。

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

5
JacobTheDev

Borekは正しい方向を示しました、これが私の良いコードです*:

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

*注:私はいくつかの属性名とものも変更しましたが、それは必要ではありませんでした。

0
JacobTheDev

さて、私はそれが以下をするように関数を書き直しました:

  • 使用する前に、配列の値が設定されていることを確認してください。あなたはいつも彼らがそこにいるとは限らない。
  • 画像が空の場合は、エラーメッセージが表示されます。これがあなたが望むものであるかどうかわからないが、あなたはそれを削除することができます。
  • 最初にあなたの画像のHTMLを作成します。
  • 次に、URLが指定されている場合は、リンクのHTMLに画像がまとめられています。そうでなければ、それは単にあなたの画像のHTMLを返すでしょう。

HTMLの作成方法に注目してください。文字列を分割して開く、引用符をエスケープするなどの操作は面倒で読みにくいです。 HTML文字列を作成するときは一重引用符を使用して、二重引用符をエスケープせずに使用できるようにします。

私はまたsprintf()を使用し、それから私が欲しい各部分を置き換えます。読みやすく、後で修正します。

それが役に立てば幸い!

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;
}

ポール.

4
Paul G.

デフォルトの画像をこの変数に代入するだけではどうでしょうか。画像が指定されていない場合は、デフォルトの(空ではなく)画像のURLが使用されますか?ところで。これらのバックスラッシュについてはどうですか?一重引用符と二重引用符を使用してください。

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

今、あなたが別々のボタンを出力する必要があるならば(画像が存在するかどうかにかかわらず)、その時のように条件式を使います:

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